Bisect: refactor "bisect_{bad,good,skip}" into "bisect_state".

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Christian Couder 2007-10-24 07:01:21 +02:00 committed by Junio C Hamano
parent 737c74ee42
commit 155fc795b9

View file

@ -135,47 +135,33 @@ bisect_write() {
test -z "$nolog" && echo "git-bisect $state $rev" >>"$GIT_DIR/BISECT_LOG" test -z "$nolog" && echo "git-bisect $state $rev" >>"$GIT_DIR/BISECT_LOG"
} }
bisect_bad() { bisect_state() {
bisect_autostart bisect_autostart
case "$#" in state=$1
0) case "$#,$state" in
rev=$(git rev-parse --verify HEAD) ;; 0,*)
1) die "Please call 'bisect_state' with at least one argument." ;;
rev=$(git rev-parse --verify "$1^{commit}") ;; 1,bad|1,good|1,skip)
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)
shift
revs=$(git rev-parse --revs-only --no-flags "$@") &&
test '' != "$revs" || die "Bad rev input: $@"
for rev in $revs
do
rev=$(git rev-parse --verify "$rev^{commit}") ||
die "Bad rev commit: $rev^{commit}"
bisect_write "$state" "$rev"
done ;;
*) *)
usage ;; usage ;;
esac || exit
bisect_write 'bad' "$rev"
bisect_auto_next
}
bisect_good() {
bisect_autostart
case "$#" in
0) revs=$(git rev-parse --verify HEAD) || exit ;;
*) revs=$(git rev-parse --revs-only --no-flags "$@") &&
test '' != "$revs" || die "Bad rev input: $@" ;;
esac esac
for rev in $revs
do
rev=$(git rev-parse --verify "$rev^{commit}") || exit
bisect_write 'good' "$rev"
done
bisect_auto_next
}
bisect_skip() {
bisect_autostart
case "$#" in
0) revs=$(git rev-parse --verify HEAD) || exit ;;
*) revs=$(git rev-parse --revs-only --no-flags "$@") &&
test '' != "$revs" || die "Bad rev input: $@" ;;
esac
for rev in $revs
do
rev=$(git rev-parse --verify "$rev^{commit}") || exit
bisect_write 'skip' "$rev"
done
bisect_auto_next bisect_auto_next
} }
@ -405,24 +391,22 @@ bisect_run () {
exit $res exit $res
fi fi
# Use "bisect_good" or "bisect_bad" # Find current state depending on run success or failure.
# depending on run success or failure.
if [ $res -gt 0 ]; then if [ $res -gt 0 ]; then
next_bisect='bisect_bad' state='bad'
else else
next_bisect='bisect_good' state='good'
fi fi
# We have to use a subshell because bisect_good or # We have to use a subshell because "bisect_state" can exit.
# bisect_bad functions can exit. ( bisect_state $state > "$GIT_DIR/BISECT_RUN" )
( $next_bisect > "$GIT_DIR/BISECT_RUN" )
res=$? res=$?
cat "$GIT_DIR/BISECT_RUN" cat "$GIT_DIR/BISECT_RUN"
if [ $res -ne 0 ]; then if [ $res -ne 0 ]; then
echo >&2 "bisect run failed:" echo >&2 "bisect run failed:"
echo >&2 "$next_bisect exited with error code $res" echo >&2 "'bisect_state $state' exited with error code $res"
exit $res exit $res
fi fi
@ -444,12 +428,8 @@ case "$#" in
case "$cmd" in case "$cmd" in
start) start)
bisect_start "$@" ;; bisect_start "$@" ;;
bad) bad|good|skip)
bisect_bad "$@" ;; bisect_state "$cmd" "$@" ;;
good)
bisect_good "$@" ;;
skip)
bisect_skip "$@" ;;
next) next)
# Not sure we want "next" at the UI level anymore. # Not sure we want "next" at the UI level anymore.
bisect_next "$@" ;; bisect_next "$@" ;;