summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-08-30 19:45:41 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-08-30 19:45:41 (GMT)
commitcc9f24d024e7e4bf0b2fbd4e1beb7eb1a425805f (patch)
treede2a595537e758e6fd9a8a0a18e2e1b1bae8022a
parent670f5fe34f0f6a363297d5dcd73051089b78fe82 (diff)
downloadgit-cc9f24d024e7e4bf0b2fbd4e1beb7eb1a425805f.zip
git-cc9f24d024e7e4bf0b2fbd4e1beb7eb1a425805f.tar.gz
git-cc9f24d024e7e4bf0b2fbd4e1beb7eb1a425805f.tar.bz2
'git bisect visualize'
Linus says: I'm testing bisection to find a bug that causes my G5 to no longer boot, and during the process have found this command line very nice: gitk bisect/bad --not $(cd .git/refs ; ls bisect/good-*) it basically shows the state of bisection with the known bad commit as the top, and cutting off all the good commits - so what you see are the potential buggy commits. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-xgit-bisect-script28
1 files changed, 22 insertions, 6 deletions
diff --git a/git-bisect-script b/git-bisect-script
index 649b702..e5a4670 100755
--- a/git-bisect-script
+++ b/git-bisect-script
@@ -2,12 +2,13 @@
. git-sh-setup-script || dir "Not a git archive"
usage() {
- echo >&2 'usage: git bisect [start | bad | good | next | reset]
+ echo >&2 'usage: git bisect [start|bad|good|next|reset|visualize]
git bisect start reset bisect state and start bisection.
git bisect bad [<rev>] mark <rev> a known-bad revision.
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 reset [<branch>] finish bisection search and go back to branch.
+git bisect visualize show bisect status in gitk.'
exit 1
}
@@ -57,8 +58,14 @@ bisect_start() {
bisect_bad() {
bisect_autostart
- case "$#" in 0 | 1) ;; *) usage ;; esac
- rev=$(git-rev-parse --verify --default HEAD "$@") || exit
+ case "$#" in
+ 0)
+ rev=$(git-rev-parse --verify HEAD) ;;
+ 1)
+ rev=$(git-rev-parse --verify "$1") ;;
+ *)
+ usage ;;
+ esac || exit
echo "$rev" > "$GIT_DIR/refs/bisect/bad"
bisect_auto_next
}
@@ -67,11 +74,13 @@ bisect_good() {
bisect_autostart
case "$#" in
0) revs=$(git-rev-parse --verify HEAD) || exit ;;
- *) revs=$(git-rev-parse --revs-only --no-flags "$@") || exit ;;
+ *) revs=$(git-rev-parse --revs-only --no-flags "$@") &&
+ test '' != "$revs" || die "Bad rev input: $@" ;;
esac
for rev in $revs
do
- echo "$rev" >"$GIT_DIR/refs/bisect/good-$rev"
+ rev=$(git-rev-parse --verify "$rev") || exit
+ echo "$rev" >"$GIT_DIR/refs/bisect/good-$rev"
done
bisect_auto_next
}
@@ -122,6 +131,11 @@ bisect_next() {
ln -sf refs/heads/bisect "$GIT_DIR/HEAD"
}
+bisect_visualize() {
+ bisect_next_check fail
+ gitk bisect/bad --not `cd "$GIT_DIR/refs" && echo bisect/good-*`
+}
+
bisect_reset() {
case "$#" in
0) branch=master ;;
@@ -154,6 +168,8 @@ case "$#" in
next)
# Not sure we want "next" at the UI level anymore.
bisect_next "$@" ;;
+ visualize)
+ bisect_visualize "$@" ;;
reset)
bisect_reset "$@" ;;
*)