Skip to content

Commit dcc73cf

Browse files
bmwillgitster
authored andcommitted
fetch: generate ref-prefixes when using a configured refspec
Teach fetch to generate ref-prefixes, to be used for server-side filtering of the ref-advertisement, based on the configured fetch refspec ('remote.<name>.fetch') when no user provided refspec exists. Signed-off-by: Brandon Williams <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 6373cb5 commit dcc73cf

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

builtin/fetch.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,15 @@ static struct ref *get_ref_map(struct transport *transport,
351351

352352
const struct ref *remote_refs;
353353

354-
refspec_ref_prefixes(rs, &ref_prefixes);
354+
if (rs->nr)
355+
refspec_ref_prefixes(rs, &ref_prefixes);
356+
else if (transport->remote && transport->remote->fetch.nr)
357+
refspec_ref_prefixes(&transport->remote->fetch, &ref_prefixes);
358+
359+
if (ref_prefixes.argc &&
360+
(tags == TAGS_SET || (tags == TAGS_DEFAULT && !rs->nr))) {
361+
argv_array_push(&ref_prefixes, "refs/tags/");
362+
}
355363

356364
remote_refs = transport_get_remote_refs(transport, &ref_prefixes);
357365

t/t5702-protocol-v2.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,20 @@ test_expect_success 'ref advertisment is filtered during fetch using protocol v2
201201
! grep "refs/tags/three" log
202202
'
203203

204+
test_expect_success 'default refspec is used to filter ref when fetchcing' '
205+
test_when_finished "rm -f log" &&
206+
207+
GIT_TRACE_PACKET="$(pwd)/log" git -C file_child -c protocol.version=2 \
208+
fetch origin &&
209+
210+
git -C file_child log -1 --format=%s three >actual &&
211+
git -C file_parent log -1 --format=%s three >expect &&
212+
test_cmp expect actual &&
213+
214+
grep "ref-prefix refs/heads/" log &&
215+
grep "ref-prefix refs/tags/" log
216+
'
217+
204218
# Test protocol v2 with 'http://' transport
205219
#
206220
. "$TEST_DIRECTORY"/lib-httpd.sh

0 commit comments

Comments
 (0)