Browse Source

fetch-pack: do not check links for partial fetch

When doing a partial clone or fetch with transfer.fsckobjects=1, use the
--fsck-objects instead of the --strict flag when invoking index-pack so
that links are not checked, only objects. This is because incomplete
links are expected when doing a partial clone or fetch.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jonathan Tan 7 years ago committed by Junio C Hamano
parent
commit
98a2ea46c2
  1. 13
      fetch-pack.c
  2. 11
      t/t5616-partial-clone.sh

13
fetch-pack.c

@ -886,8 +886,17 @@ static int get_pack(struct fetch_pack_args *args, @@ -886,8 +886,17 @@ static int get_pack(struct fetch_pack_args *args,
? fetch_fsck_objects
: transfer_fsck_objects >= 0
? transfer_fsck_objects
: 0)
argv_array_push(&cmd.args, "--strict");
: 0) {
if (args->from_promisor)
/*
* We cannot use --strict in index-pack because it
* checks both broken objects and links, but we only
* want to check for broken objects.
*/
argv_array_push(&cmd.args, "--fsck-objects");
else
argv_array_push(&cmd.args, "--strict");
}

cmd.in = demux.out;
cmd.git_cmd = 1;

11
t/t5616-partial-clone.sh

@ -143,4 +143,15 @@ test_expect_success 'manual prefetch of missing objects' ' @@ -143,4 +143,15 @@ test_expect_success 'manual prefetch of missing objects' '
test_line_count = 0 observed.oids
'

test_expect_success 'partial clone with transfer.fsckobjects=1 uses index-pack --fsck-objects' '
git init src &&
test_commit -C src x &&
test_config -C src uploadpack.allowfilter 1 &&
test_config -C src uploadpack.allowanysha1inwant 1 &&

GIT_TRACE="$(pwd)/trace" git -c transfer.fsckobjects=1 \
clone --filter="blob:none" "file://$(pwd)/src" dst &&
grep "git index-pack.*--fsck-objects" trace
'

test_done

Loading…
Cancel
Save