Fix tests breaking when checkout path contains shell metacharacters
[gitweb.git] / t / t6030-bisect-porcelain.sh
index 53956c08e2754eb68a2a8311b26e16f5ee891308..5e3e5445c730140ad6c2fa9cc5bda4a7029e7fbf 100755 (executable)
@@ -71,6 +71,61 @@ test_expect_success 'bisect start with one bad and good' '
        git bisect next
 '
 
+test_expect_success 'bisect fails if given any junk instead of revs' '
+       git bisect reset &&
+       test_must_fail git bisect start foo $HASH1 -- &&
+       test_must_fail git bisect start $HASH4 $HASH1 bar -- &&
+       test -z "$(git for-each-ref "refs/bisect/*")" &&
+       test_must_fail ls .git/BISECT_* &&
+       git bisect start &&
+       test_must_fail git bisect good foo $HASH1 &&
+       test_must_fail git bisect good $HASH1 bar &&
+       test_must_fail git bisect bad frotz &&
+       test_must_fail git bisect bad $HASH3 $HASH4 &&
+       test_must_fail git bisect skip bar $HASH3 &&
+       test_must_fail git bisect skip $HASH1 foo &&
+       test -z "$(git for-each-ref "refs/bisect/*")" &&
+       git bisect good $HASH1 &&
+       git bisect bad $HASH4
+'
+
+test_expect_success 'bisect reset: back in the master branch' '
+       git bisect reset &&
+       echo "* master" > branch.expect &&
+       git branch > branch.output &&
+       cmp branch.expect branch.output
+'
+
+test_expect_success 'bisect reset: back in another branch' '
+       git checkout -b other &&
+       git bisect start &&
+       git bisect good $HASH1 &&
+       git bisect bad $HASH3 &&
+       git bisect reset &&
+       echo "  master" > branch.expect &&
+       echo "* other" >> branch.expect &&
+       git branch > branch.output &&
+       cmp branch.expect branch.output
+'
+
+test_expect_success 'bisect reset when not bisecting' '
+       git bisect reset &&
+       git branch > branch.output &&
+       cmp branch.expect branch.output
+'
+
+test_expect_success 'bisect reset removes packed refs' '
+       git bisect reset &&
+       git bisect start &&
+       git bisect good $HASH1 &&
+       git bisect bad $HASH3 &&
+       git pack-refs --all --prune &&
+       git bisect next &&
+       git bisect reset &&
+       test -z "$(git for-each-ref "refs/bisect/*")" &&
+       test -z "$(git for-each-ref "refs/heads/bisect")"
+'
+
 # $HASH1 is good, $HASH4 is bad, we skip $HASH3
 # but $HASH2 is bad,
 # so we should find $HASH2 as the first bad commit
@@ -167,7 +222,7 @@ test_expect_success 'bisect skip: add line and then a new test' '
        git bisect skip &&
        git bisect good > my_bisect_log.txt &&
        grep "$HASH5 is first bad commit" my_bisect_log.txt &&
-       git bisect log > log_to_replay.txt
+       git bisect log > log_to_replay.txt &&
        git bisect reset
 '
 
@@ -182,7 +237,7 @@ test_expect_success 'bisect run & skip: cannot tell between 2' '
        add_line_into_file "6: Yet a line." hello &&
        HASH6=$(git rev-parse --verify HEAD) &&
        echo "#"\!"/bin/sh" > test_script.sh &&
-       echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
        echo "grep line hello > /dev/null" >> test_script.sh &&
        echo "test \$? -ne 0" >> test_script.sh &&
        chmod +x test_script.sh &&
@@ -207,8 +262,8 @@ test_expect_success 'bisect run & skip: find first bad' '
        add_line_into_file "7: Should be the last line." hello &&
        HASH7=$(git rev-parse --verify HEAD) &&
        echo "#"\!"/bin/sh" > test_script.sh &&
-       echo "tail -1 hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
-       echo "tail -1 hello | grep day > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep Ciao > /dev/null && exit 125" >> test_script.sh &&
+       echo "sed -ne \\\$p hello | grep day > /dev/null && exit 125" >> test_script.sh &&
        echo "grep Yet hello > /dev/null" >> test_script.sh &&
        echo "test \$? -ne 0" >> test_script.sh &&
        chmod +x test_script.sh &&
@@ -217,6 +272,18 @@ test_expect_success 'bisect run & skip: find first bad' '
        grep "$HASH6 is first bad commit" my_bisect_log.txt
 '
 
+test_expect_success 'bisect starting with a detached HEAD' '
+
+       git bisect reset &&
+       git checkout master^ &&
+       HEAD=$(git rev-parse --verify HEAD) &&
+       git bisect start &&
+       test $HEAD = $(cat .git/BISECT_START) &&
+       git bisect reset &&
+       test $HEAD = $(git rev-parse --verify HEAD)
+
+'
+
 #
 #
 test_done