From: Junio C Hamano Date: Tue, 13 Nov 2018 13:37:17 +0000 (+0900) Subject: Merge branch 'jk/proto-v2-ref-prefix-fix' X-Git-Tag: v2.20.0-rc0~57 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/81c365bbd1ea68da62755f6242d65834af469c73?ds=inline;hp=-c Merge branch 'jk/proto-v2-ref-prefix-fix' "git ls-remote $there foo" was broken by recent update for the protocol v2 and stopped showing refs that match 'foo' that are not refs/{heads,tags}/foo, which has been fixed. * jk/proto-v2-ref-prefix-fix: ls-remote: pass heads/tags prefixes to transport ls-remote: do not send ref prefixes for patterns --- 81c365bbd1ea68da62755f6242d65834af469c73 diff --combined builtin/ls-remote.c index 6a0cdec30d,71036b011e..1d7f1f5ce2 --- a/builtin/ls-remote.c +++ b/builtin/ls-remote.c @@@ -88,18 -88,15 +88,15 @@@ int cmd_ls_remote(int argc, const char int i; pattern = xcalloc(argc, sizeof(const char *)); for (i = 1; i < argc; i++) { - const char *glob; pattern[i - 1] = xstrfmt("*/%s", argv[i]); - - glob = strchr(argv[i], '*'); - if (glob) - argv_array_pushf(&ref_prefixes, "%.*s", - (int)(glob - argv[i]), argv[i]); - else - expand_ref_prefix(&ref_prefixes, argv[i]); } } + if (flags & REF_TAGS) + argv_array_push(&ref_prefixes, "refs/tags/"); + if (flags & REF_HEADS) + argv_array_push(&ref_prefixes, "refs/heads/"); + remote = remote_get(dest); if (!remote) { if (dest) @@@ -151,6 -148,6 +148,6 @@@ } UNLEAK(sorting); - UNLEAK(ref_array); + ref_array_clear(&ref_array); return status; } diff --combined t/t5512-ls-remote.sh index bc5703ff9b,0e8d0fb595..91ee6841c1 --- a/t/t5512-ls-remote.sh +++ b/t/t5512-ls-remote.sh @@@ -15,7 -15,7 +15,7 @@@ test_expect_success setup git tag mark1.10 && git show-ref --tags -d | sed -e "s/ / /" >expected.tag && ( - echo "$(git rev-parse HEAD) HEAD" + echo "$(git rev-parse HEAD) HEAD" && git show-ref -d | sed -e "s/ / /" ) >expected.all && @@@ -105,7 -105,7 +105,7 @@@ test_expect_success 'use branch.. git clone . other.git && ( cd other.git && - echo "$(git rev-parse HEAD) HEAD" + echo "$(git rev-parse HEAD) HEAD" && git show-ref | sed -e "s/ / /" ) >exp && @@@ -155,12 -155,14 +155,12 @@@ test_expect_success 'die with non-2 fo test_expect_success 'Report success even when nothing matches' ' git ls-remote other.git "refs/nsn/*" >actual && - >expect && - test_cmp expect actual + test_must_be_empty actual ' test_expect_success 'Report no-match with --exit-code' ' test_expect_code 2 git ls-remote --exit-code other.git "refs/nsn/*" >actual && - >expect && - test_cmp expect actual + test_must_be_empty actual ' test_expect_success 'Report match with --exit-code' ' @@@ -302,4 -304,22 +302,22 @@@ test_expect_success 'ls-remote works ou nongit git ls-remote dst.git ' + test_expect_success 'ls-remote patterns work with all protocol versions' ' + git for-each-ref --format="%(objectname) %(refname)" \ + refs/heads/master refs/remotes/origin/master >expect && + git -c protocol.version=1 ls-remote . master >actual.v1 && + test_cmp expect actual.v1 && + git -c protocol.version=2 ls-remote . master >actual.v2 && + test_cmp expect actual.v2 + ' + + test_expect_success 'ls-remote prefixes work with all protocol versions' ' + git for-each-ref --format="%(objectname) %(refname)" \ + refs/heads/ refs/tags/ >expect && + git -c protocol.version=1 ls-remote --heads --tags . >actual.v1 && + test_cmp expect actual.v1 && + git -c protocol.version=2 ls-remote --heads --tags . >actual.v2 && + test_cmp expect actual.v2 + ' + test_done