X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-bisect.sh;h=03df1433ef12014584f23f16e65124c219c2f466;hb=74237d6236d7e32f69469ff26df3f3bb3875f523;hp=68838f3fad1d22ab4f14977434e9ce73365fb304;hpb=5401f3040b61e11da79d676e42aacfa9f1131083;p=git.git diff --git a/git-bisect.sh b/git-bisect.sh index 68838f3f..03df1433 100755 --- a/git-bisect.sh +++ b/git-bisect.sh @@ -1,4 +1,15 @@ #!/bin/sh + +USAGE='[start|bad|good|next|reset|visualize]' +LONG_USAGE='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 visualize show bisect status in gitk. +git bisect replay replay bisection log +git bisect log show bisect log.' + . git-sh-setup sq() { @@ -11,19 +22,6 @@ sq() { ' "$@" } -usage() { - 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 visualize show bisect status in gitk. -git bisect replay replay bisection log -git bisect log show bisect log.' - exit 1 -} - bisect_autostart() { test -d "$GIT_DIR/refs/bisect" || { echo >&2 'You need to start by "git bisect start"' @@ -51,9 +49,16 @@ bisect_start() { die "Bad HEAD - I need a symbolic ref" case "$head" in refs/heads/bisect*) - git checkout master || exit + if [ -s "$GIT_DIR/head-name" ]; then + branch=`cat "$GIT_DIR/head-name"` + else + branch=master + fi + git checkout $branch || exit ;; refs/heads/*) + [ -s "$GIT_DIR/head-name" ] && die "won't bisect on seeked tree" + echo "$head" | sed 's#^refs/heads/##' >"$GIT_DIR/head-name" ;; *) die "Bad HEAD - strange symbolic ref" @@ -67,7 +72,7 @@ bisect_start() { rm -rf "$GIT_DIR/refs/bisect/" mkdir "$GIT_DIR/refs/bisect" { - echo -n "git-bisect start" + printf "git-bisect start" sq "$@" } >"$GIT_DIR/BISECT_LOG" sq "$@" >"$GIT_DIR/BISECT_NAMES" @@ -161,7 +166,11 @@ bisect_visualize() { bisect_reset() { case "$#" in - 0) branch=master ;; + 0) if [ -s "$GIT_DIR/head-name" ]; then + branch=`cat "$GIT_DIR/head-name"` + else + branch=master + fi ;; 1) test -f "$GIT_DIR/refs/heads/$1" || { echo >&2 "$1 does not seem to be a valid branch" exit 1 @@ -172,8 +181,9 @@ bisect_reset() { esac git checkout "$branch" && rm -fr "$GIT_DIR/refs/bisect" - rm -f "$GIT_DIR/refs/heads/bisect" + rm -f "$GIT_DIR/refs/heads/bisect" "$GIT_DIR/head-name" rm -f "$GIT_DIR/BISECT_LOG" + rm -f "$GIT_DIR/BISECT_NAMES" } bisect_replay () {