Re: [PATCH v2 3/3] transport.c: introduce core.alternateRefsPrefixes
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 21, 2018, 21:14 UTC
- Message-ID
- <xmqqbm8qv9hy.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <6e8f65a16dc0be84234d2be93bb4a5c9a585dd57.1537555544.git.me@ttaylorr.com>
Taylor Blau <me@ttaylorr.com> writes:
Show 6 quoted lines
> +core.alternateRefsPrefixes:: > + When listing references from an alternate, list only references that begin > + with the given prefix. Prefixes match as if they were given as arguments to > + linkgit:git-for-each-ref[1]. To list multiple prefixes, separate them with > + whitespace. If `core.alternateRefsCommand` is set, setting > + `core.alternateRefsPrefixes` has no effect.
We do not allow anything elaborate like "refs/tags/release-*" but we still allow "refs/tags/" and "refs/heads/" by listing them together, and because these are only prefixes, whitespace is a reasonable list separator as they cannot appear anywhere in a refname. OK.
Why is this "core"? I thought this was more about receive-pack; even if this is going to be extended to upload-pack's negotiation, "core" is way too wide a hierarchy. We have "transport.*" for things like this, no?
The exact same comment applies to 2/3, of course.
Show 33 quoted lines
> diff --git a/t/t5410-receive-pack.sh b/t/t5410-receive-pack.sh
> index 2f21f1cb8f..b656c9b30c 100755
> --- a/t/t5410-receive-pack.sh
> +++ b/t/t5410-receive-pack.sh
> @@ -51,4 +51,12 @@ test_expect_success 'with core.alternateRefsCommand' '
> test_cmp expect actual.haves
> '
>
> +test_expect_success 'with core.alternateRefsPrefixes' '
> + test_config -C fork core.alternateRefsPrefixes "refs/tags" &&
> + expect_haves one three two >expect &&
> + printf "0000" | git receive-pack fork >actual &&
> + extract_haves <actual >actual.haves &&
> + test_cmp expect actual.haves
> +'
> +
> test_done
> diff --git a/transport.c b/transport.c
> index e7d2cdf00b..9323e5c3cd 100644
> --- a/transport.c
> +++ b/transport.c
> @@ -1341,6 +1341,11 @@ static void fill_alternate_refs_command(struct child_process *cmd,
> argv_array_pushf(&cmd->args, "--git-dir=%s", repo_path);
> argv_array_push(&cmd->args, "for-each-ref");
> argv_array_push(&cmd->args, "--format=%(objectname) %(refname)");
> +
> + if (!git_config_get_value("core.alternateRefsPrefixes", &value)) {
> + argv_array_push(&cmd->args, "--");
> + argv_array_split(&cmd->args, value);
> + }
> }
>
> cmd->env = local_repo_env;