Skip to content

Commit 6376651

Browse files
avargitster
authored andcommitted
bundle tests: use test_cmp instead of grep
Change the bundle tests to fully compare the expected "git ls-remote" or "git bundle list-heads" output, instead of merely grepping it. This avoids subtle regressions in the tests. In f62e0a3 (t5704 (bundle): add tests for bundle --stdin, 2010-04-19) the "bundle --stdin <rev-list options>" test was added to make sure we didn't include the tag. But since the --stdin mode didn't work until 5bb0fd2 (bundle: arguments can be read from stdin, 2021-01-11) our grepping of "master" (later "main") missed the important part of the test. Namely that we should not include the "refs/tags/tag" tag in that case. Since the test only grepped for "main" in the output we'd miss a regression in that code. So let's use test_cmp instead, and also in the other nearby tests where it's easy. This does make things a bit more verbose in the case of the test that's checking the bundle header, since it's different under SHA1 and SHA256. I think this makes test easier to follow. I've got some WIP changes to extend the "git bundle" command to dump parts of the header out, which are easier to understand if we test the output explicitly like this. Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 95cf646 commit 6376651

File tree

1 file changed

+53
-13
lines changed

1 file changed

+53
-13
lines changed

t/t5607-clone-bundle.sh

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,21 @@ test_expect_success '"verify" needs a worktree' '
2929

3030
test_expect_success 'annotated tags can be excluded by rev-list options' '
3131
git bundle create bundle --all --since=7.Apr.2005.15:14:00.-0700 &&
32-
git ls-remote bundle > output &&
33-
grep tag output &&
32+
cat >expect <<-EOF &&
33+
$(git rev-parse HEAD) HEAD
34+
$(git rev-parse tag) refs/tags/tag
35+
$(git rev-parse main) refs/heads/main
36+
EOF
37+
git ls-remote bundle >actual &&
38+
test_cmp expect actual &&
39+
3440
git bundle create bundle --all --since=7.Apr.2005.15:16:00.-0700 &&
35-
git ls-remote bundle > output &&
36-
! grep tag output
41+
cat >expect <<-EOF &&
42+
$(git rev-parse HEAD) HEAD
43+
$(git rev-parse main) refs/heads/main
44+
EOF
45+
git ls-remote bundle >actual &&
46+
test_cmp expect actual
3747
'
3848

3949
test_expect_success 'die if bundle file cannot be created' '
@@ -43,14 +53,20 @@ test_expect_success 'die if bundle file cannot be created' '
4353

4454
test_expect_success 'bundle --stdin' '
4555
echo main | git bundle create stdin-bundle.bdl --stdin &&
46-
git ls-remote stdin-bundle.bdl >output &&
47-
grep main output
56+
cat >expect <<-EOF &&
57+
$(git rev-parse main) refs/heads/main
58+
EOF
59+
git ls-remote stdin-bundle.bdl >actual &&
60+
test_cmp expect actual
4861
'
4962

5063
test_expect_success 'bundle --stdin <rev-list options>' '
5164
echo main | git bundle create hybrid-bundle.bdl --stdin tag &&
52-
git ls-remote hybrid-bundle.bdl >output &&
53-
grep main output
65+
cat >expect <<-EOF &&
66+
$(git rev-parse main) refs/heads/main
67+
EOF
68+
git ls-remote stdin-bundle.bdl >actual &&
69+
test_cmp expect actual
5470
'
5571

5672
test_expect_success 'empty bundle file is rejected' '
@@ -67,11 +83,31 @@ test_expect_success 'ridiculously long subject in boundary' '
6783
printf "%01200d\n" 0 | git commit -F - &&
6884
test_commit fifth &&
6985
git bundle create long-subject-bundle.bdl HEAD^..HEAD &&
70-
git bundle list-heads long-subject-bundle.bdl >heads &&
71-
test -s heads &&
86+
cat >expect <<-EOF &&
87+
$(git rev-parse main) HEAD
88+
EOF
89+
git bundle list-heads long-subject-bundle.bdl >actual &&
90+
test_cmp expect actual &&
91+
7292
git fetch long-subject-bundle.bdl &&
73-
sed -n "/^-/{p;q;}" long-subject-bundle.bdl >boundary &&
74-
grep "^-$OID_REGEX " boundary
93+
94+
if ! test_have_prereq SHA1
95+
then
96+
echo "@object-format=sha256"
97+
fi >expect &&
98+
cat >>expect <<-EOF &&
99+
-$(git log --pretty=format:"%H %s" -1 HEAD^)
100+
$(git rev-parse HEAD) HEAD
101+
EOF
102+
103+
if test_have_prereq SHA1
104+
then
105+
head -n 3 long-subject-bundle.bdl
106+
else
107+
head -n 4 long-subject-bundle.bdl
108+
fi | grep -v "^#" >actual &&
109+
110+
test_cmp expect actual
75111
'
76112

77113
test_expect_success 'prerequisites with an empty commit message' '
@@ -103,7 +139,11 @@ test_expect_success 'fetch SHA-1 from bundle' '
103139

104140
test_expect_success 'git bundle uses expected default format' '
105141
git bundle create bundle HEAD^.. &&
106-
head -n1 bundle | grep "^# v$(test_oid version) git bundle$"
142+
cat >expect <<-EOF &&
143+
# v$(test_oid version) git bundle
144+
EOF
145+
head -n1 bundle >actual &&
146+
test_cmp expect actual
107147
'
108148

109149
test_expect_success 'git bundle v3 has expected contents' '

0 commit comments

Comments
 (0)