combine-diff: better hunk splitting.
[gitweb.git] / git-bisect.sh
index 2455f00ee58384ddc121553e747673db1366c43e..51e1e4417d95530612d3ce5db64c8295c9236f53 100755 (executable)
@@ -1,9 +1,7 @@
 #!/bin/sh
-. git-sh-setup
 
-usage() {
-    echo >&2 'usage: git bisect [start|bad|good|next|reset|visualize]
-git bisect start               reset bisect state and start bisection.
+USAGE='[start|bad|good|next|reset|visualize]'
+LONG_USAGE='git bisect start [<pathspec>]      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.
@@ -11,7 +9,17 @@ git bisect reset [<branch>]   finish bisection search and go back to branch.
 git bisect visualize            show bisect status in gitk.
 git bisect replay <logfile>    replay bisection log
 git bisect log                 show bisect log.'
-    exit 1
+
+. git-sh-setup
+
+sq() {
+       perl -e '
+               for (@ARGV) {
+                       s/'\''/'\'\\\\\'\''/g;
+                       print " '\''$_'\''";
+               }
+               print "\n";
+       ' "$@"
 }
 
 bisect_autostart() {
@@ -56,8 +64,11 @@ bisect_start() {
        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"
-       echo "$@" > "$GIT_DIR/BISECT_NAMES"
+       {
+           printf "git-bisect start"
+           sq "$@"
+       } >"$GIT_DIR/BISECT_LOG"
+       sq "$@" >"$GIT_DIR/BISECT_NAMES"
 }
 
 bisect_bad() {
@@ -142,7 +153,8 @@ bisect_next() {
 
 bisect_visualize() {
        bisect_next_check fail
-       gitk bisect/bad --not `cd "$GIT_DIR/refs" && echo bisect/good-*` -- $(cat $GIT_DIR/BISECT_NAMES)
+       not=`cd "$GIT_DIR/refs" && echo bisect/good-*`
+       eval gitk bisect/bad --not $not -- $(cat "$GIT_DIR/BISECT_NAMES")
 }
 
 bisect_reset() {
@@ -173,7 +185,8 @@ bisect_replay () {
                test "$bisect" = "git-bisect" || continue
                case "$command" in
                start)
-                       bisect_start
+                       cmd="bisect_start $rev"
+                       eval "$cmd"
                        ;;
                good)
                        echo "$rev" >"$GIT_DIR/refs/bisect/good-$rev"