Doug Bell <madcity...@gmail.com> writes:

> diff --git a/builtin/show-ref.c b/builtin/show-ref.c
> index 4a0310d..4b069e7 100644
> --- a/builtin/show-ref.c
> +++ b/builtin/show-ref.c
> @@ -31,6 +31,9 @@ static int show_ref(const char *refname, const unsigned 
> char *sha1, int flag, vo
>       const char *hex;
>       unsigned char peeled[20];
>  
> +     if (show_head && !strncmp(refname, "HEAD\0", 5))
> +             goto match;
> +
>       if (tags_only || heads_only) {
>               int match;

I think !strcmp(refname, "HEAD") is better up there.

Also we would want some basic test, which so far seems to be lacking
for the command.

How about this squashed in?

 builtin/show-ref.c   |   2 +-
 t/t1403-show-ref.txt | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 168 insertions(+), 1 deletion(-)

diff --git a/builtin/show-ref.c b/builtin/show-ref.c
index 497ad66..099c2a4 100644
--- a/builtin/show-ref.c
+++ b/builtin/show-ref.c
@@ -31,7 +31,7 @@ static int show_ref(const char *refname, const unsigned char 
*sha1, int flag, vo
        const char *hex;
        unsigned char peeled[20];
 
-       if (show_head && !strncmp(refname, "HEAD\0", 5))
+       if (show_head && !strcmp(refname, "HEAD"))
                goto match;
 
        if (tags_only || heads_only) {
diff --git a/t/t1403-show-ref.txt b/t/t1403-show-ref.txt
new file mode 100755
index 0000000..3e500ed
--- /dev/null
+++ b/t/t1403-show-ref.txt
@@ -0,0 +1,167 @@
+#!/bin/sh
+
+test_description='show-ref'
+. ./test-lib.sh
+
+test_expect_success setup '
+       test_commit A &&
+       git tag -f -a -m "annotated A" A &&
+       git checkout -b side &&
+       test_commit B &&
+       git tag -f -a -m "annotated B" B &&
+       git checkout master &&
+       test_commit C &&
+       git branch B A^0
+'
+
+test_expect_success 'show-ref' '
+       echo $(git rev-parse refs/tags/A) refs/tags/A >expect &&
+
+       git show-ref A >actual &&
+       test_cmp expect actual &&
+
+       git show-ref tags/A >actual &&
+       test_cmp expect actual &&
+
+       git show-ref refs/tags/A >actual &&
+       test_cmp expect actual &&
+
+       >expect &&
+
+       test_must_fail git show-ref D >actual
+       test_cmp expect actual
+'
+
+test_expect_success 'show-ref -q' '
+       >expect &&
+
+       git show-ref -q A >actual &&
+       test_cmp expect actual &&
+
+       git show-ref -q tags/A >actual &&
+       test_cmp expect actual &&
+
+       git show-ref -q refs/tags/A >actual &&
+       test_cmp expect actual &&
+
+       test_must_fail git show-ref -q D >actual &&
+       test_cmp expect actual
+'
+
+test_expect_success 'show-ref --verify' '
+       echo $(git rev-parse refs/tags/A) refs/tags/A >expect &&
+
+       git show-ref --verify refs/tags/A >actual &&
+       test_cmp expect actual &&
+
+       >expect &&
+
+       test_must_fail git show-ref --verify A >actual &&
+       test_cmp expect actual &&
+
+       test_must_fail git show-ref --verify tags/A >actual &&
+       test_cmp expect actual &&
+
+       test_must_fail git show-ref --verify D >actual
+       test_cmp expect actual
+'
+
+test_expect_success 'show-ref --verify -q' '
+       >expect &&
+
+       git show-ref --verify -q refs/tags/A >actual &&
+       test_cmp expect actual &&
+
+       test_must_fail git show-ref --verify -q A >actual &&
+       test_cmp expect actual &&
+
+       test_must_fail git show-ref --verify -q tags/A >actual &&
+       test_cmp expect actual &&
+
+       test_must_fail git show-ref --verify -q D >actual
+       test_cmp expect actual
+'
+
+test_expect_success 'show-ref -d' '
+       {
+               echo $(git rev-parse refs/tags/A) refs/tags/A &&
+               echo $(git rev-parse refs/tags/A^0) "refs/tags/A^{}"
+               echo $(git rev-parse refs/tags/C) refs/tags/C
+       } >expect &&
+       git show-ref -d A C >actual &&
+       test_cmp expect actual &&
+
+       git show-ref -d tags/A tags/C >actual &&
+       test_cmp expect actual &&
+
+       git show-ref -d refs/tags/A refs/tags/C >actual &&
+       test_cmp expect actual &&
+
+       echo $(git rev-parse refs/heads/master) refs/heads/master >expect &&
+       git show-ref -d master >actual &&
+       test_cmp expect actual &&
+
+       git show-ref -d heads/master >actual &&
+       test_cmp expect actual &&
+
+       git show-ref -d refs/heads/master >actual &&
+       test_cmp expect actual
+
+       git show-ref -d --verify refs/heads/master >actual &&
+       test_cmp expect actual
+
+       >expect &&
+
+       test_must_fail git show-ref -d --verify master >actual &&
+       test_cmp expect actual &&
+
+       test_must_fail git show-ref -d --verify heads/master >actual &&
+       test_cmp expect actual
+
+'
+
+test_expect_success 'show-ref --heads, --tags, --head, pattern' '
+       for branch in B master side
+       do
+               echo $(git rev-parse refs/heads/$branch) refs/heads/$branch
+       done >expect.heads &&
+       git show-ref --heads >actual &&
+       test_cmp expect.heads actual &&
+
+       for tag in A B C
+       do
+               echo $(git rev-parse refs/tags/$tag) refs/tags/$tag
+       done >expect.tags &&
+       git show-ref --tags >actual &&
+       test_cmp expect.tags actual &&
+
+       cat expect.heads expect.tags >expect &&
+       git show-ref --heads --tags >actual &&
+       test_cmp expect actual &&
+
+       {
+               echo $(git rev-parse HEAD) HEAD &&
+               cat expect.heads expect.tags
+       } >expect &&
+       git show-ref --heads --tags --head >actual &&
+       test_cmp expect actual &&
+
+       {
+               echo $(git rev-parse HEAD) HEAD &&
+               echo $(git rev-parse refs/heads/B) refs/heads/B
+               echo $(git rev-parse refs/tags/B) refs/tags/B
+       } >expect &&
+       git show-ref --head B >actual &&
+       test_cmp expect actual &&
+
+       {
+               echo $(git rev-parse HEAD) HEAD &&
+               echo $(git rev-parse refs/heads/B) refs/heads/B
+               echo $(git rev-parse refs/tags/B) refs/tags/B
+               echo $(git rev-parse refs/tags/B^0) "refs/tags/B^{}"
+       } >expect &&
+       git show-ref --head -d B >actual &&
+       test_cmp expect actual
+'
+
+test_done
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to