Skip to content

Commit b704a8b

Browse files
jonseymourgitster
authored andcommitted
bisect: add tests for the --no-checkout option.
These tests verify that git-bisect --no-checkout can successfully bisect commit histories that reference damaged trees. Signed-off-by: Jon Seymour <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 4796e82 commit b704a8b

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

t/t6030-bisect-porcelain.sh

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,18 @@ test_expect_success 'bisect reset removes packed refs' '
126126
test -z "$(git for-each-ref "refs/heads/bisect")"
127127
'
128128

129+
test_expect_success 'bisect reset removes bisect state after --no-checkout' '
130+
git bisect reset &&
131+
git bisect start --no-checkout &&
132+
git bisect good $HASH1 &&
133+
git bisect bad $HASH3 &&
134+
git bisect next &&
135+
git bisect reset &&
136+
test -z "$(git for-each-ref "refs/bisect/*")" &&
137+
test -z "$(git for-each-ref "refs/heads/bisect")" &&
138+
test -z "$(git for-each-ref "BISECT_HEAD")"
139+
'
140+
129141
test_expect_success 'bisect start: back in good branch' '
130142
git branch > branch.output &&
131143
grep "* other" branch.output > /dev/null &&
@@ -630,4 +642,74 @@ test_expect_success 'bisect fails if tree is broken on trial commit' '
630642
test_cmp expected.missing-tree.default error.txt
631643
'
632644

645+
check_same()
646+
{
647+
echo "Checking $1 is the same as $2" &&
648+
git rev-parse "$1" > expected.same &&
649+
git rev-parse "$2" > expected.actual &&
650+
test_cmp expected.same expected.actual
651+
}
652+
653+
test_expect_success 'bisect: --no-checkout - start commit bad' '
654+
git bisect reset &&
655+
git bisect start BROKEN_HASH7 BROKEN_HASH4 --no-checkout &&
656+
check_same BROKEN_HASH6 BISECT_HEAD &&
657+
git bisect reset
658+
'
659+
660+
test_expect_success 'bisect: --no-checkout - trial commit bad' '
661+
git bisect reset &&
662+
git bisect start broken BROKEN_HASH4 --no-checkout &&
663+
check_same BROKEN_HASH6 BISECT_HEAD &&
664+
git bisect reset
665+
'
666+
667+
test_expect_success 'bisect: --no-checkout - target before breakage' '
668+
git bisect reset &&
669+
git bisect start broken BROKEN_HASH4 --no-checkout &&
670+
check_same BROKEN_HASH6 BISECT_HEAD &&
671+
git bisect bad BISECT_HEAD &&
672+
check_same BROKEN_HASH5 BISECT_HEAD &&
673+
git bisect bad BISECT_HEAD &&
674+
check_same BROKEN_HASH5 bisect/bad &&
675+
git bisect reset
676+
'
677+
678+
test_expect_success 'bisect: --no-checkout - target in breakage' '
679+
git bisect reset &&
680+
git bisect start broken BROKEN_HASH4 --no-checkout &&
681+
check_same BROKEN_HASH6 BISECT_HEAD &&
682+
git bisect bad BISECT_HEAD &&
683+
check_same BROKEN_HASH5 BISECT_HEAD &&
684+
git bisect good BISECT_HEAD &&
685+
check_same BROKEN_HASH6 bisect/bad &&
686+
git bisect reset
687+
'
688+
689+
test_expect_success 'bisect: --no-checkout - target after breakage' '
690+
git bisect reset &&
691+
git bisect start broken BROKEN_HASH4 --no-checkout &&
692+
check_same BROKEN_HASH6 BISECT_HEAD &&
693+
git bisect good BISECT_HEAD &&
694+
check_same BROKEN_HASH8 BISECT_HEAD &&
695+
git bisect good BISECT_HEAD &&
696+
check_same BROKEN_HASH9 bisect/bad &&
697+
git bisect reset
698+
'
699+
700+
test_expect_success 'bisect: demonstrate identification of damage boundary' "
701+
git bisect reset &&
702+
git checkout broken &&
703+
git bisect start broken master --no-checkout &&
704+
git bisect run sh -c '
705+
GOOD=\$(git for-each-ref \"--format=%(objectname)\" refs/bisect/good-*) &&
706+
git rev-list --objects BISECT_HEAD --not \$GOOD >tmp.\$\$ &&
707+
git pack-objects --stdout >/dev/null < tmp.\$\$
708+
rc=\$?
709+
rm -f tmp.\$\$
710+
test \$rc = 0' &&
711+
check_same BROKEN_HASH6 bisect/bad &&
712+
git bisect reset
713+
"
714+
633715
test_done

0 commit comments

Comments
 (0)