@matheusbsbs / matheus-bagliano / commits / 14c7fa269e
Fork 0

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 <delphij@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Xin Li committed Jun 5, 2020 at 02:10 UTC 14c7fa269e42df4133edd9ae7763b678ed6594cd
2 files changed +20 -3
setup.c
+9 -3
@@ -507,9 +507,15 @@ static int check_repository_format_gently(const char *gitdir, struct repository_
507 die("%s", err.buf);
508 }
509
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 + }
519 string_list_clear(&candidate->unknown_extensions, 0);
520
521 if (repository_format_worktree_config) {
t/t0410-partial-clone.sh
+11
@@ -42,6 +42,17 @@ test_expect_success 'convert shallow clone to partial clone' '
42 test_cmp_config -C client 1 core.repositoryformatversion
43 '
44
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 +
56 test_expect_success 'missing reflog object, but promised by a commit, passes fsck' '
57 rm -rf repo &&
58 test_create_repo repo &&