All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Jacob Vosmaer <jacob@gitlab.com>
Cc: peff@peff.net, gitster@pobox.com, git@vger.kernel.org,
	jeffhost@microsoft.com, jonathantanmy@google.com
Subject: Re: [PATCH v3 1/1] upload-pack.c: fix filter spec quoting bug
Date: Tue, 26 Jan 2021 10:57:36 +0100	[thread overview]
Message-ID: <874kj46mwf.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <20210125230952.15468-2-jacob@gitlab.com>


On Tue, Jan 26 2021, Jacob Vosmaer wrote:

> This fixes a bug that occurs when you combine partial clone and
> uploadpack.packobjectshook. You can reproduce it as follows:

Let's: 

 * Refer to the commit we're fixing a bug in, i.e. Junio's mention of
   10ac85c7 (upload-pack: add object filtering for partial clone,
   2017-12-08) upthread.

 * See also "imperative-mood" in SubmittingPatches. I.e. say "Fix a bug
   in ..." not "This fixes ... can be reproduced as"

 * uploadpack.packObjectsHook not uploadpack.packobjectshook except in C
   code.

> git clone -u 'git -c uploadpack.allowfilter '\
> '-c uploadpack.packobjectshook=env '\
> 'upload-pack' --filter=blob:none --no-local \
> src.git dst.git

This and the output below would be more readable indented.

> Be careful with the line endings because this has a long quoted string
> as the -u argument.
>
> The error I get when I run this is:
>
> Cloning into '/tmp/broken'...
> remote: fatal: invalid filter-spec ''blob:none''
> error: git upload-pack: git-pack-objects died with error.
> fatal: git upload-pack: aborting due to possible repository corruption on the remote side.
> remote: aborting due to possible repository corruption on the remote side.
> fatal: early EOF
> fatal: index-pack failed

[...]

> The problem is an unnecessary and harmful layer of quoting. I tried
> digging through the history of this function and I think this quoting
> was there from the start.


...So looked at "git log" but didn't try to check out 10ac85c7 and see
if it had the same issue? If we're going to leave a note about this at
all probably better to help future source spelunkers by being able to
say the issue was there from the start.


> My best guess is that it stems from a
> misunderstanding what use_shell=1 means. The code seems to assume it
> means "arguments get joined into one big string, then fed to /bin/sh".
> But that is not what it means: use_shell=1 means that the first
> argument in the arguments array may be a shell script and if so should
> be passed to /bin/sh. All other arguments are passed as normal
> arguments.
>
> The solution is simple: never quote the filter spec.
>
> This commit removes the conditional quoting and adds a test for
> partial clone in t5544.
>

Thanks for hacking this up! Hopefully the above is helpful and not too
nitpicky. Mainly wanted to help you get future patches through more
easily...

> Signed-off-by: Jacob Vosmaer <jacob@gitlab.com>
> ---
>  t/t5544-pack-objects-hook.sh | 9 +++++++++
>  upload-pack.c                | 9 +--------
>  2 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/t/t5544-pack-objects-hook.sh b/t/t5544-pack-objects-hook.sh
> index 4357af1525..f5ba663d64 100755
> --- a/t/t5544-pack-objects-hook.sh
> +++ b/t/t5544-pack-objects-hook.sh
> @@ -59,4 +59,13 @@ test_expect_success 'hook does not run from repo config' '
>  	test_path_is_missing .git/hook.stdout
>  '
>  
> +test_expect_success 'hook works with partial clone' '
> +	clear_hook_results &&
> +	test_config_global uploadpack.packObjectsHook ./hook &&
> +	test_config_global uploadpack.allowFilter true &&
> +	git clone --bare --no-local --filter=blob:none . dst.git &&
> +	git -C dst.git rev-list --objects --missing=print HEAD >objects &&
> +	grep "^?" objects
> +'
> +
>  test_done
> diff --git a/upload-pack.c b/upload-pack.c
> index 3b66bf92ba..eae1fdbc55 100644
> --- a/upload-pack.c
> +++ b/upload-pack.c
> @@ -305,14 +305,7 @@ static void create_pack_file(struct upload_pack_data *pack_data,
>  	if (pack_data->filter_options.choice) {
>  		const char *spec =
>  			expand_list_objects_filter_spec(&pack_data->filter_options);
> -		if (pack_objects.use_shell) {
> -			struct strbuf buf = STRBUF_INIT;
> -			sq_quote_buf(&buf, spec);
> -			strvec_pushf(&pack_objects.args, "--filter=%s", buf.buf);
> -			strbuf_release(&buf);
> -		} else {
> -			strvec_pushf(&pack_objects.args, "--filter=%s", spec);
> -		}
> +		strvec_pushf(&pack_objects.args, "--filter=%s", spec);
>  	}
>  	if (uri_protocols) {
>  		for (i = 0; i < uri_protocols->nr; i++)


  reply	other threads:[~2021-01-26 14:36 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-22 14:21 [PATCH 0/1] upload-pack.c: fix filter spec quoting bug Jacob Vosmaer
2021-01-22 14:21 ` [PATCH 1/1] " Jacob Vosmaer
2021-01-22 20:32   ` Jeff King
2021-01-22 21:03     ` [PATCH] run-command: document use_shell option Jeff King
2021-01-22 21:32       ` Taylor Blau
2021-01-22 22:21       ` Junio C Hamano
2021-01-23  0:04         ` Jeff King
2021-01-22 22:10     ` [PATCH 1/1] upload-pack.c: fix filter spec quoting bug Junio C Hamano
2021-01-25 17:09     ` [PATCH v2] " Jacob Vosmaer
2021-01-25 19:48       ` Junio C Hamano
2021-01-25 21:16         ` Jeff King
2021-01-25 23:09           ` [PATCH v3 0/1] " Jacob Vosmaer
2021-01-25 23:09             ` [PATCH v3 1/1] " Jacob Vosmaer
2021-01-26  9:57               ` Ævar Arnfjörð Bjarmason [this message]
2021-01-26 10:29                 ` Jacob Vosmaer
2021-01-26 17:46                   ` Junio C Hamano
2021-01-26 21:09                   ` Jeff King
2021-01-28 16:04                     ` [PATCH v4] " Jacob Vosmaer
     [not found]                       ` <xmqqmtwsx4d9.fsf@gitster.c.googlers.com>
2021-01-28 21:12                         ` Jacob Vosmaer
2021-01-28 21:40                           ` Jacob Vosmaer
2021-01-28 21:51                           ` Jeff King
2021-02-01 20:31                             ` Jacob Vosmaer
2021-01-28 21:58                           ` Junio C Hamano
2021-02-01 20:29                             ` [PATCH v5 0/1] " Jacob Vosmaer
2021-02-01 20:29                               ` [PATCH v5 1/1] " Jacob Vosmaer
2021-02-02  5:49                               ` [PATCH v5 0/1] " Junio C Hamano
2021-02-02 10:37                                 ` [PATCH 1/1] t5544: clarify 'hook works with partial clone' test Jacob Vosmaer
2021-02-02 17:22                                   ` Eric Sunshine
2021-02-02 19:24                                     ` [PATCH v2] " Jacob Vosmaer
2021-02-02 20:21                                       ` Junio C Hamano
2021-01-26 17:51                 ` [PATCH v3 1/1] upload-pack.c: fix filter spec quoting bug Junio C Hamano
2021-01-26 21:07                 ` Jeff King
2021-01-26  0:01             ` [PATCH v3 0/1] " Junio C Hamano
2021-01-26  2:25           ` [PATCH v2] " Junio C Hamano
2021-01-25 21:16       ` Jeff King
2021-01-25 17:14     ` [PATCH 1/1] " Jacob Vosmaer
2021-01-25 17:41     ` Jacob Vosmaer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874kj46mwf.fsf@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jacob@gitlab.com \
    --cc=jeffhost@microsoft.com \
    --cc=jonathantanmy@google.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.