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 <jon.seymour@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jon Seymour committed Aug 4, 2011 at 22:01 UTC b704a8b3fd1d5a2eeeeadcef48c962db2c84b0af
1 file changed +82
t/t6030-bisect-porcelain.sh
+82
@@ -126,6 +126,18 @@ test_expect_success 'bisect reset removes packed refs' '
126 test -z "$(git for-each-ref "refs/heads/bisect")"
127 '
128
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 +
141 test_expect_success 'bisect start: back in good branch' '
142 git branch > branch.output &&
143 grep "* other" branch.output > /dev/null &&
@@ -630,4 +642,74 @@ test_expect_success 'bisect fails if tree is broken on trial commit' '
642 test_cmp expected.missing-tree.default error.txt
643 '
644
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 +
715 test_done