Skip to content

Commit

Permalink
t6300: run describe atom tests on a different repo
Browse files Browse the repository at this point in the history
The tests for "describe" atom and its friends currently run on the main
repo of t6300, expect for the test for "bare describe", which is run on
"describe-repo".

Things can get messy with the other tests when such changes to a repo
are done (for example, a new commit or a tag is introduced), especially
in t6300 where the tests depend on commits and tags.

An example for this can be seen in [1], where writing the tests the
current way fails the test "Verify sorts with raw:size" on linux-sha256.
This, at first glance, seems totally unrelated.

Digging in a bit deeper, it is apparent that this behavior is because of
the changes in the repo introduced when writing the "describe" tests,
which changes the raw:size of an object. Such a change in raw-size would
have been, however, small if we were dealing with SHA1, but since we are
dealing with SHA256, the change in raw:size is so significant that it
fails the above mentioned test.

So, run all the "describe" atom tests on "describe-repo", which doesn't
interfere with the main repo on which the tests in t6300 are run.

[1]: https://github.com/five-sh/git/actions/runs/5446892074/jobs/9908256427

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Hariom Verma <hariom18599@gmail.com>
Signed-off-by: Kousik Sanagavarapu <five231003@gmail.com>
  • Loading branch information
five-sh committed Jul 5, 2023
1 parent 9e3e652 commit 43cd3ee
Showing 1 changed file with 57 additions and 44 deletions.
101 changes: 57 additions & 44 deletions t/t6300-for-each-ref.sh
Original file line number Diff line number Diff line change
Expand Up @@ -561,9 +561,7 @@ test_expect_success 'color.ui=always does not override tty check' '
test_cmp expected.bare actual
'

test_expect_success 'describe atom vs git describe' '
test_when_finished "rm -rf describe-repo" &&
test_expect_success 'setup for describe atom tests' '
git init describe-repo &&
(
cd describe-repo &&
Expand All @@ -572,9 +570,16 @@ test_expect_success 'describe atom vs git describe' '
git tag tagone &&
test_commit --no-tag two &&
git tag -a -m "tag two" tagtwo &&
git tag -a -m "tag two" tagtwo
)
'

test_expect_success 'describe atom vs git describe' '
(
cd describe-repo &&
git for-each-ref refs/tags/ --format="%(objectname)" >obj &&
git for-each-ref --format="%(objectname)" \
refs/tags/ >obj &&
while read hash
do
if desc=$(git describe $hash)
Expand All @@ -596,54 +601,62 @@ test_expect_success 'describe atom vs git describe' '
'

test_expect_success 'describe:tags vs describe --tags' '
test_when_finished "git tag -d tagname" &&
git tag tagname &&
git describe --tags >expect &&
git for-each-ref --format="%(describe:tags)" refs/heads/ >actual &&
test_cmp expect actual
(
cd describe-repo &&
git describe --tags >expect &&
git for-each-ref --format="%(describe:tags)" \
refs/heads/ >actual &&
test_cmp expect actual
)
'

test_expect_success 'describe:abbrev=... vs 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=14 >expect &&
git for-each-ref --format="%(describe:abbrev=14)" \
refs/heads/ >actual &&
test_cmp expect actual &&
# Make sure the hash used is atleast 14 digits long
sed -e "s/^.*-g\([0-9a-f]*\)$/\1/" <actual >hexpart &&
test 15 -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=14 >expect &&
git for-each-ref --format="%(describe:abbrev=14)" \
refs/heads/ >actual &&
test_cmp expect actual &&
test tagname = $(cat actual)
(
cd describe-repo &&
# Case 1: We have commits between HEAD and the most
# recent tag reachable from it
test_commit --no-tag file &&
git describe --abbrev=14 >expect &&
git for-each-ref --format="%(describe:abbrev=14)" \
refs/heads/ >actual &&
test_cmp expect actual &&
# Make sure the hash used is atleast 14 digits long
sed -e "s/^.*-g\([0-9a-f]*\)$/\1/" <actual >hexpart &&
test 15 -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=14 >expect &&
git for-each-ref --format="%(describe:abbrev=14)" \
refs/heads/ >actual &&
test_cmp expect actual &&
test tagname = $(cat actual)
)
'

test_expect_success 'describe:match=... vs describe --match ...' '
test_when_finished "git tag -d tag-match" &&
git tag -a -m "tag match" tag-match &&
git describe --match "*-match" >expect &&
git for-each-ref --format="%(describe:match="*-match")" \
refs/heads/ >actual &&
test_cmp expect actual
(
cd describe-repo &&
git tag -a -m "tag match" tag-match &&
git describe --match "*-match" >expect &&
git for-each-ref --format="%(describe:match="*-match")" \
refs/heads/ >actual &&
test_cmp expect actual
)
'

test_expect_success 'describe:exclude:... vs describe --exclude ...' '
test_when_finished "git tag -d tag-exclude" &&
git tag -a -m "tag exclude" tag-exclude &&
git describe --exclude "*-exclude" >expect &&
git for-each-ref --format="%(describe:exclude="*-exclude")" \
refs/heads/ >actual &&
test_cmp expect actual
(
cd describe-repo &&
git tag -a -m "tag exclude" tag-exclude &&
git describe --exclude "*-exclude" >expect &&
git for-each-ref --format="%(describe:exclude="*-exclude")" \
refs/heads/ >actual &&
test_cmp expect actual
)
'

cat >expected <<\EOF
Expand Down

0 comments on commit 43cd3ee

Please sign in to comment.