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 <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Oct 31, 2018 at 00:24 UTC 6a139cdd74b867b5d717854155b4192e84c1f170
2 files changed +14
builtin/ls-remote.c
+5
@@ -92,6 +92,11 @@ int cmd_ls_remote(int argc, const char **argv, const char *prefix)
92 }
93 }
94
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 +
100 remote = remote_get(dest);
101 if (!remote) {
102 if (dest)
t/t5512-ls-remote.sh
+9
@@ -313,4 +313,13 @@ test_expect_success 'ls-remote patterns work with all protocol versions' '
313 test_cmp expect actual.v2
314 '
315
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 +
325 test_done