Browse Source

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>
maint
Xin Li 5 years ago committed by Junio C Hamano
parent
commit
14c7fa269e
  1. 12
      setup.c
  2. 11
      t/t0410-partial-clone.sh

12
setup.c

@ -507,9 +507,15 @@ static int check_repository_format_gently(const char *gitdir, struct repository_ @@ -507,9 +507,15 @@ static int check_repository_format_gently(const char *gitdir, struct repository_
die("%s", err.buf);
}

repository_format_precious_objects = candidate->precious_objects;
set_repository_format_partial_clone(candidate->partial_clone);
repository_format_worktree_config = candidate->worktree_config;
if (candidate->version >= 1) {
repository_format_precious_objects = candidate->precious_objects;
set_repository_format_partial_clone(candidate->partial_clone);
repository_format_worktree_config = candidate->worktree_config;
} else {
repository_format_precious_objects = 0;
set_repository_format_partial_clone(NULL);
repository_format_worktree_config = 0;
}
string_list_clear(&candidate->unknown_extensions, 0);

if (repository_format_worktree_config) {

11
t/t0410-partial-clone.sh

@ -42,6 +42,17 @@ test_expect_success 'convert shallow clone to partial clone' ' @@ -42,6 +42,17 @@ test_expect_success 'convert shallow clone to partial clone' '
test_cmp_config -C client 1 core.repositoryformatversion
'

test_expect_success 'convert shallow clone to partial clone must fail with any extension' '
rm -fr server client &&
test_create_repo server &&
test_commit -C server my_commit 1 &&
test_commit -C server my_commit2 1 &&
git clone --depth=1 "file://$(pwd)/server" client &&
test_cmp_config -C client 0 core.repositoryformatversion &&
git -C client config extensions.partialclone origin &&
test_must_fail git -C client fetch --unshallow --filter="blob:none"
'

test_expect_success 'missing reflog object, but promised by a commit, passes fsck' '
rm -rf repo &&
test_create_repo repo &&

Loading…
Cancel
Save