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>
This commit is contained in:
parent
4796e823a3
commit
b704a8b3fd
@ -126,6 +126,18 @@ test_expect_success 'bisect reset removes packed refs' '
|
||||
test -z "$(git for-each-ref "refs/heads/bisect")"
|
||||
'
|
||||
|
||||
test_expect_success 'bisect reset removes bisect state after --no-checkout' '
|
||||
git bisect reset &&
|
||||
git bisect start --no-checkout &&
|
||||
git bisect good $HASH1 &&
|
||||
git bisect bad $HASH3 &&
|
||||
git bisect next &&
|
||||
git bisect reset &&
|
||||
test -z "$(git for-each-ref "refs/bisect/*")" &&
|
||||
test -z "$(git for-each-ref "refs/heads/bisect")" &&
|
||||
test -z "$(git for-each-ref "BISECT_HEAD")"
|
||||
'
|
||||
|
||||
test_expect_success 'bisect start: back in good branch' '
|
||||
git branch > branch.output &&
|
||||
grep "* other" branch.output > /dev/null &&
|
||||
@ -630,4 +642,74 @@ test_expect_success 'bisect fails if tree is broken on trial commit' '
|
||||
test_cmp expected.missing-tree.default error.txt
|
||||
'
|
||||
|
||||
check_same()
|
||||
{
|
||||
echo "Checking $1 is the same as $2" &&
|
||||
git rev-parse "$1" > expected.same &&
|
||||
git rev-parse "$2" > expected.actual &&
|
||||
test_cmp expected.same expected.actual
|
||||
}
|
||||
|
||||
test_expect_success 'bisect: --no-checkout - start commit bad' '
|
||||
git bisect reset &&
|
||||
git bisect start BROKEN_HASH7 BROKEN_HASH4 --no-checkout &&
|
||||
check_same BROKEN_HASH6 BISECT_HEAD &&
|
||||
git bisect reset
|
||||
'
|
||||
|
||||
test_expect_success 'bisect: --no-checkout - trial commit bad' '
|
||||
git bisect reset &&
|
||||
git bisect start broken BROKEN_HASH4 --no-checkout &&
|
||||
check_same BROKEN_HASH6 BISECT_HEAD &&
|
||||
git bisect reset
|
||||
'
|
||||
|
||||
test_expect_success 'bisect: --no-checkout - target before breakage' '
|
||||
git bisect reset &&
|
||||
git bisect start broken BROKEN_HASH4 --no-checkout &&
|
||||
check_same BROKEN_HASH6 BISECT_HEAD &&
|
||||
git bisect bad BISECT_HEAD &&
|
||||
check_same BROKEN_HASH5 BISECT_HEAD &&
|
||||
git bisect bad BISECT_HEAD &&
|
||||
check_same BROKEN_HASH5 bisect/bad &&
|
||||
git bisect reset
|
||||
'
|
||||
|
||||
test_expect_success 'bisect: --no-checkout - target in breakage' '
|
||||
git bisect reset &&
|
||||
git bisect start broken BROKEN_HASH4 --no-checkout &&
|
||||
check_same BROKEN_HASH6 BISECT_HEAD &&
|
||||
git bisect bad BISECT_HEAD &&
|
||||
check_same BROKEN_HASH5 BISECT_HEAD &&
|
||||
git bisect good BISECT_HEAD &&
|
||||
check_same BROKEN_HASH6 bisect/bad &&
|
||||
git bisect reset
|
||||
'
|
||||
|
||||
test_expect_success 'bisect: --no-checkout - target after breakage' '
|
||||
git bisect reset &&
|
||||
git bisect start broken BROKEN_HASH4 --no-checkout &&
|
||||
check_same BROKEN_HASH6 BISECT_HEAD &&
|
||||
git bisect good BISECT_HEAD &&
|
||||
check_same BROKEN_HASH8 BISECT_HEAD &&
|
||||
git bisect good BISECT_HEAD &&
|
||||
check_same BROKEN_HASH9 bisect/bad &&
|
||||
git bisect reset
|
||||
'
|
||||
|
||||
test_expect_success 'bisect: demonstrate identification of damage boundary' "
|
||||
git bisect reset &&
|
||||
git checkout broken &&
|
||||
git bisect start broken master --no-checkout &&
|
||||
git bisect run sh -c '
|
||||
GOOD=\$(git for-each-ref \"--format=%(objectname)\" refs/bisect/good-*) &&
|
||||
git rev-list --objects BISECT_HEAD --not \$GOOD >tmp.\$\$ &&
|
||||
git pack-objects --stdout >/dev/null < tmp.\$\$
|
||||
rc=\$?
|
||||
rm -f tmp.\$\$
|
||||
test \$rc = 0' &&
|
||||
check_same BROKEN_HASH6 bisect/bad &&
|
||||
git bisect reset
|
||||
"
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user