show-ref: allow -d to work with --verify

Move handling of -d into show_one(), so that it takes effect when
--verify is present as well as when it is absent. This is useful when
the user wishes to avoid the costly iteration of refs.

Signed-off-by: Vladimir Panteleev <git@thecybershadow.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Vladimir Panteleev 2017-01-23 18:00:56 +00:00 committed by Junio C Hamano
parent ec7c51bc6b
commit f1627040b9
2 changed files with 21 additions and 11 deletions

View File

@ -19,19 +19,27 @@ static const char *exclude_existing_arg;
static void show_one(const char *refname, const struct object_id *oid) static void show_one(const char *refname, const struct object_id *oid)
{ {
const char *hex = find_unique_abbrev(oid->hash, abbrev); const char *hex;
struct object_id peeled;
hex = find_unique_abbrev(oid->hash, abbrev);
if (hash_only) if (hash_only)
printf("%s\n", hex); printf("%s\n", hex);
else else
printf("%s %s\n", hex, refname); printf("%s %s\n", hex, refname);
if (!deref_tags)
return;
if (!peel_ref(refname, peeled.hash)) {
hex = find_unique_abbrev(peeled.hash, abbrev);
printf("%s %s^{}\n", hex, refname);
}
} }
static int show_ref(const char *refname, const struct object_id *oid, static int show_ref(const char *refname, const struct object_id *oid,
int flag, void *cbdata) int flag, void *cbdata)
{ {
const char *hex;
struct object_id peeled;
if (show_head && !strcmp(refname, "HEAD")) if (show_head && !strcmp(refname, "HEAD"))
goto match; goto match;
@ -79,13 +87,6 @@ match:
show_one(refname, oid); show_one(refname, oid);
if (!deref_tags)
return 0;
if (!peel_ref(refname, peeled.hash)) {
hex = find_unique_abbrev(peeled.hash, abbrev);
printf("%s %s^{}\n", hex, refname);
}
return 0; return 0;
} }

View File

@ -97,6 +97,9 @@ test_expect_success 'show-ref -d' '
git show-ref -d refs/tags/A refs/tags/C >actual && git show-ref -d refs/tags/A refs/tags/C >actual &&
test_cmp expect actual && test_cmp expect actual &&
git show-ref --verify -d refs/tags/A refs/tags/C >actual &&
test_cmp expect actual &&
echo $(git rev-parse refs/heads/master) refs/heads/master >expect && echo $(git rev-parse refs/heads/master) refs/heads/master >expect &&
git show-ref -d master >actual && git show-ref -d master >actual &&
test_cmp expect actual && test_cmp expect actual &&
@ -116,6 +119,12 @@ test_expect_success 'show-ref -d' '
test_cmp expect actual && test_cmp expect actual &&
test_must_fail git show-ref -d --verify heads/master >actual && test_must_fail git show-ref -d --verify heads/master >actual &&
test_cmp expect actual &&
test_must_fail git show-ref --verify -d A C >actual &&
test_cmp expect actual &&
test_must_fail git show-ref --verify -d tags/A tags/C >actual &&
test_cmp expect actual test_cmp expect actual
' '