The pretty format %(describe:abbrev=<number>) tells describe to use at least <number> digits of the oid to generate the human-readable format of the commit-ish. There are three things to test here: - Check that we can describe a commit that is not tagged (that is, for example our HEAD is at least one commit ahead of some reachable commit which is tagged) with at least <number> digits of the oid being used for describing it. - Check that when using such a commit-ish, we always use at least <number> digits of the oid to describe it. - Check that we can describe a tag. This just gives the name of the tag irrespective of abbrev (abbrev doesn't make sense here). Do this, instead of the current test which only tests the last case. Helped-by: Junio C Hamano <gitster@xxxxxxxxx> Mentored-by: Christian Couder <christian.couder@xxxxxxxxx> Mentored-by: Hariom Verma <hariom18599@xxxxxxxxx> Signed-off-by: Kousik Sanagavarapu <five231003@xxxxxxxxx> --- Changes since v1: - Changed the log message - Added things to be tested as commented by Junio Range-diff vs v1: 1: 2c10de6c11 ! 1: 76c3e38033 t4205: correctly test %(describe:abbrev=...) @@ Metadata ## Commit message ## t4205: correctly test %(describe:abbrev=...) - 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. + The pretty format %(describe:abbrev=<number>) tells describe to use + at least <number> digits of the oid to generate the human-readable + format of the commit-ish. - 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. + There are three things to test here: + - Check that we can describe a commit that is not tagged (that is, + for example our HEAD is at least one commit ahead of some reachable + commit which is tagged) with at least <number> digits of the oid + being used for describing it. + - Check that when using such a commit-ish, we always use at least + <number> digits of the oid to describe it. + + - Check that we can describe a tag. This just gives the name of the + tag irrespective of abbrev (abbrev doesn't make sense here). + + Do this, instead of the current test which only tests the last case. + + Helped-by: Junio C Hamano <gitster@xxxxxxxxx> Mentored-by: Christian Couder <christian.couder@xxxxxxxxx> Mentored-by: Hariom Verma <hariom18599@xxxxxxxxx> Signed-off-by: Kousik Sanagavarapu <five231003@xxxxxxxxx> ## t/t4205-log-pretty-formats.sh ## @@ t/t4205-log-pretty-formats.sh: test_expect_success '%(describe:tags) vs git describe --tags' ' - ' test_expect_success '%(describe:abbrev=...) vs git describe --abbrev=...' ' -- test_when_finished "git tag -d tagname" && -- git tag -a -m tagged tagname && + test_when_finished "git tag -d tagname" && ++ ++ # Case 1: We have commits between HEAD and the most recent tag ++ # reachable from it + test_commit --no-tag file && ++ git describe --abbrev=15 >expect && ++ git log -1 --format="%(describe:abbrev=15)" >actual && ++ test_cmp expect actual && ++ ++ # Make sure the hash used is at least 15 digits long ++ sed -e "s/^.*-g\([0-9a-f]*\)$/\1/" <actual >hexpart && ++ test 16 -le $(wc -c <hexpart) && ++ ++ # Case 2: We have a tag at HEAD, describe directly gives the ++ # name of the tag + git tag -a -m tagged tagname && git describe --abbrev=15 >expect && git log -1 --format="%(describe:abbrev=15)" >actual && - test_cmp expect actual +- test_cmp expect actual ++ test_cmp expect actual && ++ test tagname = $(cat actual) + ' + + test_expect_success 'log --pretty with space stealing' ' t/t4205-log-pretty-formats.sh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh index 4cf8a77667..dd9035aa38 100755 --- a/t/t4205-log-pretty-formats.sh +++ b/t/t4205-log-pretty-formats.sh @@ -1012,10 +1012,25 @@ test_expect_success '%(describe:tags) vs git describe --tags' ' test_expect_success '%(describe:abbrev=...) vs git describe --abbrev=...' ' test_when_finished "git tag -d tagname" && + + # Case 1: We have commits between HEAD and the most recent tag + # reachable from it + test_commit --no-tag file && + git describe --abbrev=15 >expect && + git log -1 --format="%(describe:abbrev=15)" >actual && + test_cmp expect actual && + + # Make sure the hash used is at least 15 digits long + sed -e "s/^.*-g\([0-9a-f]*\)$/\1/" <actual >hexpart && + test 16 -le $(wc -c <hexpart) && + + # Case 2: We have a tag at HEAD, describe directly gives the + # name of the tag git tag -a -m tagged tagname && git describe --abbrev=15 >expect && git log -1 --format="%(describe:abbrev=15)" >actual && - test_cmp expect actual + test_cmp expect actual && + test tagname = $(cat actual) ' test_expect_success 'log --pretty with space stealing' ' -- 2.41.0.29.g8148156d44.dirty