summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6bac10d)
raw | patch | inline | side by side (parent: 6bac10d)
author | Junio C Hamano <junkio@cox.net> | |
Sat, 10 Sep 2005 22:18:31 +0000 (15:18 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sat, 10 Sep 2005 22:18:31 +0000 (15:18 -0700) |
The 'git bisect' command was very unforgiving in that once you made a
mistake telling it good/bad it was very hard to take it back. Keep a
log of what you told it in an earlier session, so that it can be
replayed after removing everything after what you botched last time.
Signed-off-by: Junio C Hamano <junkio@cox.net>
mistake telling it good/bad it was very hard to take it back. Keep a
log of what you told it in an earlier session, so that it can be
replayed after removing everything after what you botched last time.
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-bisect.sh | patch | blob | history |
diff --git a/git-bisect.sh b/git-bisect.sh
index 605d58a2becf8bb61281f57db864cd9e5419f694..a5be3a7293c0b29c60c266beeca28086bd143fbb 100755 (executable)
--- a/git-bisect.sh
+++ b/git-bisect.sh
git bisect good [<rev>...] mark <rev>... known-good revisions.
git bisect next find next bisection to test and check it out.
git bisect reset [<branch>] finish bisection search and go back to branch.
-git bisect visualize show bisect status in gitk.'
+git bisect visualize show bisect status in gitk.
+git bisect replay <logfile> replay bisection log
+git bisect log show bisect log.'
exit 1
}
rm -f "$GIT_DIR/refs/heads/bisect"
rm -rf "$GIT_DIR/refs/bisect/"
mkdir "$GIT_DIR/refs/bisect"
+ echo "git-bisect start" >"$GIT_DIR/BISECT_LOG"
}
bisect_bad() {
*)
usage ;;
esac || exit
- echo "$rev" > "$GIT_DIR/refs/bisect/bad"
+ echo "$rev" >"$GIT_DIR/refs/bisect/bad"
+ echo "# bad: "$(git-show-branch $rev) >>"$GIT_DIR/BISECT_LOG"
+ echo "git-bisect bad $rev" >>"$GIT_DIR/BISECT_LOG"
bisect_auto_next
}
do
rev=$(git-rev-parse --verify "$rev") || exit
echo "$rev" >"$GIT_DIR/refs/bisect/good-$rev"
+ echo "# good: "$(git-show-branch $rev) >>"$GIT_DIR/BISECT_LOG"
+ echo "git-bisect good $rev" >>"$GIT_DIR/BISECT_LOG"
done
bisect_auto_next
}
git checkout new-bisect || exit
mv "$GIT_DIR/refs/heads/new-bisect" "$GIT_DIR/refs/heads/bisect" &&
ln -sf refs/heads/bisect "$GIT_DIR/HEAD"
+ git-show-branch "$rev"
}
bisect_visualize() {
esac
git checkout "$branch" &&
rm -fr "$GIT_DIR/refs/bisect"
- rm -f "$GIT_DIR/refs/reads/bisect"
+ rm -f "$GIT_DIR/refs/heads/bisect"
+ rm -f "$GIT_DIR/BISECT_LOG"
+}
+
+bisect_replay () {
+ test -r "$1" || {
+ echo >&2 "cannot read $1 for replaying"
+ exit 1
+ }
+ bisect_reset
+ while read bisect command rev
+ do
+ test "$bisect" = "git-bisect" || continue
+ case "$command" in
+ start)
+ bisect_start
+ ;;
+ good)
+ echo "$rev" >"$GIT_DIR/refs/bisect/good-$rev"
+ echo "# good: "$(git-show-branch $rev) >>"$GIT_DIR/BISECT_LOG"
+ echo "git-bisect good $rev" >>"$GIT_DIR/BISECT_LOG"
+ ;;
+ bad)
+ echo "$rev" >"$GIT_DIR/refs/bisect/bad"
+ echo "# bad: "$(git-show-branch $rev) >>"$GIT_DIR/BISECT_LOG"
+ echo "git-bisect bad $rev" >>"$GIT_DIR/BISECT_LOG"
+ ;;
+ *)
+ echo >&2 "?? what are you talking about?"
+ exit 1 ;;
+ esac
+ done <"$1"
+ bisect_auto_next
}
case "$#" in
bisect_visualize "$@" ;;
reset)
bisect_reset "$@" ;;
+ replay)
+ bisect_replay "$@" ;;
+ log)
+ cat "$GIT_DIR/BISECT_LOG" ;;
*)
usage ;;
esac