Taylor Blau <[email protected]> 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;