Documentation/git-remote-helpers: explain how import works with multiple refs
[gitweb.git] / git-bisect.sh
index f5d9ede9dde988f7b2ce9dc89c1f86d74c30664c..e0ca3fb853083d0ebdfe11e5eb3fead4723248ad 100755 (executable)
@@ -29,7 +29,6 @@ Please use "git help bisect" to get the full man page.'
 OPTIONS_SPEC=
 . git-sh-setup
 . git-sh-i18n
-require_work_tree
 
 _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
@@ -79,7 +78,12 @@ bisect_start() {
        orig_args=$(git rev-parse --sq-quote "$@")
        bad_seen=0
        eval=''
-       mode=''
+       if test "z$(git rev-parse --is-bare-repository)" != zfalse
+       then
+               mode=--no-checkout
+       else
+               mode=''
+       fi
        while [ $# -gt 0 ]; do
                arg="$1"
                case "$arg" in
@@ -94,9 +98,9 @@ bisect_start() {
                        die "$(eval_gettext "unrecognised option: '\$arg'")" ;;
                *)
                        rev=$(git rev-parse -q --verify "$arg^{commit}") || {
-                           test $has_double_dash -eq 1 &&
-                       die "$(eval_gettext "'\$arg' does not appear to be a valid revision")"
-                           break
+                               test $has_double_dash -eq 1 &&
+                               die "$(eval_gettext "'\$arg' does not appear to be a valid revision")"
+                               break
                        }
                        case $bad_seen in
                        0) state='bad' ; bad_seen=1 ;;
@@ -125,7 +129,7 @@ bisect_start() {
                start_head=$(cat "$GIT_DIR/BISECT_START")
                if test "z$mode" != "z--no-checkout"
                then
-                   git checkout "$start_head" --
+                       git checkout "$start_head" --
                fi
        else
                # Get rev from where we start.
@@ -198,7 +202,8 @@ is_expected_rev() {
 
 check_expected_revs() {
        for _rev in "$@"; do
-               if ! is_expected_rev "$_rev"; then
+               if ! is_expected_rev "$_rev"
+               then
                        rm -f "$GIT_DIR/BISECT_ANCESTORS_OK"
                        rm -f "$GIT_DIR/BISECT_EXPECTED_REV"
                        return
@@ -331,7 +336,8 @@ bisect_visualize() {
        if test $# = 0
        then
                if test -n "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" &&
-                  type gitk >/dev/null 2>&1; then
+                       type gitk >/dev/null 2>&1
+               then
                        set gitk
                else
                        set git log
@@ -362,13 +368,11 @@ bisect_reset() {
        *)
                usage ;;
        esac
-       if ! test -f "$GIT_DIR/BISECT_HEAD"
+
+       if ! test -f "$GIT_DIR/BISECT_HEAD" && ! git checkout "$branch" --
        then
-               if ! git checkout "$branch" --
-               then
-                       die "$(eval_gettext "Could not check out original HEAD '\$branch'.
+               die "$(eval_gettext "Could not check out original HEAD '\$branch'.
 Try 'git bisect reset <commit>'.")"
-               fi
        fi
        bisect_clean_state
 }
@@ -400,7 +404,8 @@ bisect_replay () {
        while read git bisect command rev
        do
                test "$git $bisect" = "git bisect" -o "$git" = "git-bisect" || continue
-               if test "$git" = "git-bisect"; then
+               if test "$git" = "git-bisect"
+               then
                        rev="$command"
                        command="$bisect"
                fi
@@ -428,7 +433,8 @@ bisect_run () {
                res=$?
 
                # Check for really bad run error.
-               if [ $res -lt 0 -o $res -ge 128 ]; then
+               if [ $res -lt 0 -o $res -ge 128 ]
+               then
                        (
                                eval_gettext "bisect run failed:
 exit code \$res from '\$command' is < 0 or >= 128" &&
@@ -439,9 +445,11 @@ exit code \$res from '\$command' is < 0 or >= 128" &&
 
                # Find current state depending on run success or failure.
                # A special exit code of 125 means cannot test.
-               if [ $res -eq 125 ]; then
+               if [ $res -eq 125 ]
+               then
                        state='skip'
-               elif [ $res -gt 0 ]; then
+               elif [ $res -gt 0 ]
+               then
                        state='bad'
                else
                        state='good'
@@ -454,7 +462,8 @@ exit code \$res from '\$command' is < 0 or >= 128" &&
                cat "$GIT_DIR/BISECT_RUN"
 
                if sane_grep "first bad commit could be any of" "$GIT_DIR/BISECT_RUN" \
-                       > /dev/null; then
+                       > /dev/null
+               then
                        (
                                gettext "bisect run cannot continue any more" &&
                                echo
@@ -462,7 +471,8 @@ exit code \$res from '\$command' is < 0 or >= 128" &&
                        exit $res
                fi
 
-               if [ $res -ne 0 ]; then
+               if [ $res -ne 0 ]
+               then
                        (
                                eval_gettext "bisect run failed:
 'bisect_state \$state' exited with error code \$res" &&
@@ -471,7 +481,8 @@ exit code \$res from '\$command' is < 0 or >= 128" &&
                        exit $res
                fi
 
-               if sane_grep "is the first bad commit" "$GIT_DIR/BISECT_RUN" > /dev/null; then
+               if sane_grep "is the first bad commit" "$GIT_DIR/BISECT_RUN" > /dev/null
+               then
                        gettext "bisect run success"; echo
                        exit 0;
                fi