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:
parent
ec7c51bc6b
commit
f1627040b9
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user