Taylor Blau <m...@ttaylorr.com> writes:

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


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

Reply via email to