From: Junio C Hamano Date: Tue, 30 Aug 2005 19:45:41 +0000 (-0700) Subject: 'git bisect visualize' X-Git-Tag: v0.99.6~42 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=cc9f24d024e7e4bf0b2fbd4e1beb7eb1a425805f;p=git.git '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 --- diff --git a/git-bisect-script b/git-bisect-script index 649b7026..e5a46701 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 [] mark a known-bad revision. git bisect good [...] mark ... known-good revisions. git bisect next find next bisection to test and check it out. -git bisect reset [] finish bisection search and go back to branch.' +git bisect reset [] 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 "$@" ;; *)