40f327faf5
The recently-introduced "core.alternateRefsCommand" allows callers to specify with high flexibility the tips that they wish to advertise from alternates. This flexibility comes at the cost of some inconvenience when the caller only wishes to limit the advertisement to one or more prefixes. For example, to advertise only tags, a caller using 'core.alternateRefsCommand' would have to do: $ git config core.alternateRefsCommand ' \ f() { git -C "$1" for-each-ref \ refs/tags --format="%(objectname)" }; f "$@"' The above is cumbersome to write, so let's introduce a "core.alternateRefsPrefixes" to address this common case. Instead, the caller can run: $ git config core.alternateRefsPrefixes 'refs/tags' Which will behave identically to the longer example using "core.alternateRefsCommand". Since the value of "core.alternateRefsPrefixes" is appended to 'git for-each-ref' and then executed, include a "--" before taking the configured value to avoid misinterpreting arguments as flags to 'git for-each-ref'. In the case that the caller wishes to specify multiple prefixes, they may separate them by whitespace. If "core.alternateRefsCommand" is set, it will take precedence over "core.alternateRefsPrefixes". Signed-off-by: Taylor Blau <me@ttaylorr.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
42 lines
1.1 KiB
Bash
Executable File
42 lines
1.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='git receive-pack with alternate ref filtering'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success 'setup' '
|
|
test_commit base &&
|
|
git clone -s --bare . fork &&
|
|
git checkout -b public/branch master &&
|
|
test_commit public &&
|
|
git checkout -b private/branch master &&
|
|
test_commit private
|
|
'
|
|
|
|
extract_haves () {
|
|
depacketize | perl -lne '/^(\S+) \.have/ and print $1'
|
|
}
|
|
|
|
test_expect_success 'with core.alternateRefsCommand' '
|
|
write_script fork/alternate-refs <<-\EOF &&
|
|
git --git-dir="$1" for-each-ref \
|
|
--format="%(objectname)" \
|
|
refs/heads/public/
|
|
EOF
|
|
test_config -C fork core.alternateRefsCommand alternate-refs &&
|
|
git rev-parse public/branch >expect &&
|
|
printf "0000" | git receive-pack fork >actual &&
|
|
extract_haves <actual >actual.haves &&
|
|
test_cmp expect actual.haves
|
|
'
|
|
|
|
test_expect_success 'with core.alternateRefsPrefixes' '
|
|
test_config -C fork core.alternateRefsPrefixes "refs/heads/private" &&
|
|
git rev-parse private/branch >expect &&
|
|
printf "0000" | git receive-pack fork >actual &&
|
|
extract_haves <actual >actual.haves &&
|
|
test_cmp expect actual.haves
|
|
'
|
|
|
|
test_done
|