Re: [PATCH 2/2] fetch-pack: do not check links for partial fetch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jonathan Tan <jonathantanmy@xxxxxxxxxx> writes:

> 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.

It is expected that _some_ links are missing, but this makes me
wonder if we can do better than disabling the connectivity check
altogether.  Does "git fetch" lack sufficient information to attempt
the connectivity check, and when (and only when) it hits a broken
link, see if that is because the connectivity check traversal is
crossing a "partial" fetch boundary, or something along that line?

>
> Signed-off-by: Jonathan Tan <jonathantanmy@xxxxxxxxxx>
> ---
>  fetch-pack.c             | 13 +++++++++++--
>  t/t5616-partial-clone.sh | 11 +++++++++++
>  2 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/fetch-pack.c b/fetch-pack.c
> index d97461296..1d6117565 100644
> --- a/fetch-pack.c
> +++ b/fetch-pack.c
> @@ -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;
> diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh
> index 29d863118..cee556536 100755
> --- a/t/t5616-partial-clone.sh
> +++ b/t/t5616-partial-clone.sh
> @@ -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



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux