Re: [PATCH] t4205: correctly test %(describe:abbrev=...)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Kousik Sanagavarapu <five231003@xxxxxxxxx> writes:

> The pretty format %(describe:abbrev=<number>) tells describe to use only
> <number> characters of the oid to generate the human-readable format of
> the commit-ish.

Is that *only* correct?  I thought it was "at least <number> hexdigits"
to allow for future growth of the project.

> This is not apparent in the test for %(describe:abbrev=...) because we
> directly tag HEAD and use that, in which case the human-readable format
> is just the tag name. So, create a new commit and use that instead.

Nice.  How was this found, I have to wonder, and more importantly,
how would we have written this test in the first place to avoid
testing "the wrong thing", to learn from this experience?

>  test_expect_success '%(describe:abbrev=...) vs git describe --abbrev=...' '
> -	test_when_finished "git tag -d tagname" &&
> -	git tag -a -m tagged tagname &&
> +	test_commit --no-tag file &&
>  	git describe --abbrev=15 >expect &&
>  	git log -1 --format="%(describe:abbrev=15)" >actual &&
>  	test_cmp expect actual

The current test checks that the output in the case where the number
of commits since the tag is 0, and "describe --abbrev=15" and "log
--format='%(describe:abbrev=15)'" give exactly the same result.
Which is a good thing to test.

But we *also* want to test a more typical case where there are
commits between HEAD and the tag that is used to describe it.  

And we *also* want to make sure that the hexadecimal object name
suffix used in the description is at least 15 hexdigits long, if not
more.

The updated test drops test #1 (which is questionable), adds test #2
(which is good), and still omits test #3 (which is not so good).  

So, perhaps

    test_when_finished "git tag -d tagname" &&
-   git tag -a -m tagged tagname &&
    test_commit --no-tag file &&
    git describe --abbrev=15 >expect &&
    git log -1 --format="%(describe:abbrev=15)" >actual &&
    test_cmp expect actual &&
+   sed -e "s/^.*-g\([0-9a-f]*\)$/\1/" <actual >hexpart &&
+   test 16 -le $(wc -c <hexpart) &&
+
+   git tag -a -m tagged tagname &&
+   git describe --abbrev=15 >expect &&
+   git log -1 --format="%(describe:abbrev=15)" >actual &&
+   test_cmp expect actual &&
+   test tagname = $(cat actual)

or something along the line?  First we test with a commit that is
not tagged at all to have some commits between the tag and HEAD with
the original comparison (this is for #2), then we make sure the
length of the hexpart (new---this is for #3), and then we add the
tag to see the "exact" case also works (this is for #1).

Thanks.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux