diff --git a/git-bisect.sh b/git-bisect.sh index f8857747c4..c8be9f7e8a 100755 --- a/git-bisect.sh +++ b/git-bisect.sh @@ -151,20 +151,16 @@ bisect_state() { rev=$(git rev-parse --verify HEAD) || die "Bad rev input: HEAD" bisect_write "$state" "$rev" ;; - 2,bad) - rev=$(git rev-parse --verify "$2^{commit}") || - die "Bad rev input: $2" - bisect_write "$state" "$rev" ;; - *,good|*,skip) + 2,bad|*,good|*,skip) shift - revs=$(git rev-parse --revs-only --no-flags "$@") && - test '' != "$revs" || die "Bad rev input: $@" - for rev in $revs + for rev in "$@" do rev=$(git rev-parse --verify "$rev^{commit}") || - die "Bad rev commit: $rev^{commit}" + die "Bad rev input: $rev" bisect_write "$state" "$rev" done ;; + *,bad) + die "'git bisect bad' can take only one argument." ;; *) usage ;; esac diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh index 4908e878fe..dc87f13558 100755 --- a/t/t6030-bisect-porcelain.sh +++ b/t/t6030-bisect-porcelain.sh @@ -71,6 +71,19 @@ test_expect_success 'bisect start with one bad and good' ' git bisect next ' +test_expect_success 'bisect good and bad fails if not given only revs' ' + git bisect reset && + 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 && + 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 &&