Skip to content

Commit 6a139cd

Browse files
peffgitster
authored andcommitted
ls-remote: pass heads/tags prefixes to transport
Unlike its arbitrary text patterns, the --heads and --tags options to ls-remote are true prefixes. We can pass this information to the transport code. If the v2 protocol is in use, that will reduce the size of the ref advertisement. Note that the test added here succeeds both before and after the patch. This is an optimization, not a bug-fix; it's just making sure we didn't break anything. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 631f0f8 commit 6a139cd

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

builtin/ls-remote.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
9292
}
9393
}
9494

95+
if (flags & REF_TAGS)
96+
argv_array_push(&ref_prefixes, "refs/tags/");
97+
if (flags & REF_HEADS)
98+
argv_array_push(&ref_prefixes, "refs/heads/");
99+
95100
remote = remote_get(dest);
96101
if (!remote) {
97102
if (dest)

t/t5512-ls-remote.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,4 +313,13 @@ test_expect_success 'ls-remote patterns work with all protocol versions' '
313313
test_cmp expect actual.v2
314314
'
315315

316+
test_expect_success 'ls-remote prefixes work with all protocol versions' '
317+
git for-each-ref --format="%(objectname) %(refname)" \
318+
refs/heads/ refs/tags/ >expect &&
319+
git -c protocol.version=1 ls-remote --heads --tags . >actual.v1 &&
320+
test_cmp expect actual.v1 &&
321+
git -c protocol.version=2 ls-remote --heads --tags . >actual.v2 &&
322+
test_cmp expect actual.v2
323+
'
324+
316325
test_done

0 commit comments

Comments
 (0)