Skip to content

Commit 14c7fa2

Browse files
delphijgitster
authored andcommitted
check_repository_format_gently(): refuse extensions for old repositories
Previously, extensions were recognized regardless of repository format version.  If the user sets an undefined "extensions" value on a repository of version 0 and that value is used by a future git version, they might get an undesired result. Because all extensions now also upgrade repository versions, tightening the check would help avoid this for future extensions. Signed-off-by: Xin Li <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 98564d8 commit 14c7fa2

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

setup.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -507,9 +507,15 @@ static int check_repository_format_gently(const char *gitdir, struct repository_
507507
die("%s", err.buf);
508508
}
509509

510-
repository_format_precious_objects = candidate->precious_objects;
511-
set_repository_format_partial_clone(candidate->partial_clone);
512-
repository_format_worktree_config = candidate->worktree_config;
510+
if (candidate->version >= 1) {
511+
repository_format_precious_objects = candidate->precious_objects;
512+
set_repository_format_partial_clone(candidate->partial_clone);
513+
repository_format_worktree_config = candidate->worktree_config;
514+
} else {
515+
repository_format_precious_objects = 0;
516+
set_repository_format_partial_clone(NULL);
517+
repository_format_worktree_config = 0;
518+
}
513519
string_list_clear(&candidate->unknown_extensions, 0);
514520

515521
if (repository_format_worktree_config) {

t/t0410-partial-clone.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,17 @@ test_expect_success 'convert shallow clone to partial clone' '
4242
test_cmp_config -C client 1 core.repositoryformatversion
4343
'
4444

45+
test_expect_success 'convert shallow clone to partial clone must fail with any extension' '
46+
rm -fr server client &&
47+
test_create_repo server &&
48+
test_commit -C server my_commit 1 &&
49+
test_commit -C server my_commit2 1 &&
50+
git clone --depth=1 "file://$(pwd)/server" client &&
51+
test_cmp_config -C client 0 core.repositoryformatversion &&
52+
git -C client config extensions.partialclone origin &&
53+
test_must_fail git -C client fetch --unshallow --filter="blob:none"
54+
'
55+
4556
test_expect_success 'missing reflog object, but promised by a commit, passes fsck' '
4657
rm -rf repo &&
4758
test_create_repo repo &&

0 commit comments

Comments
 (0)