Merge branch 'jc/maint-am-abort-safely'
authorJunio C Hamano <gitster@pobox.com>
Wed, 22 Dec 2010 22:41:19 +0000 (14:41 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 22 Dec 2010 22:41:19 +0000 (14:41 -0800)
* jc/maint-am-abort-safely:
am --abort: keep unrelated commits since the last failure and warn

1  2 
git-am.sh
diff --combined git-am.sh
index df09b42840b7675e135605f9108894ce93e6d477,e5671f61c61aad7fe47e174a31b534da6d8d2798..cf1f64b574b180332105d95295dfa35c8f6e10bb
+++ b/git-am.sh
@@@ -68,9 -68,31 +68,31 @@@ sq () 
  
  stop_here () {
      echo "$1" >"$dotest/next"
+     git rev-parse --verify -q HEAD >"$dotest/abort-safety"
      exit 1
  }
  
+ safe_to_abort () {
+       if test -f "$dotest/dirtyindex"
+       then
+               return 1
+       fi
+       if ! test -s "$dotest/abort-safety"
+       then
+               return 0
+       fi
+       abort_safety=$(cat "$dotest/abort-safety")
+       if test "z$(git rev-parse --verify -q HEAD)" = "z$abort_safety"
+       then
+               return 0
+       fi
+       echo >&2 "You seem to have moved HEAD since the last 'am' failure."
+       echo >&2 "Not rewinding to ORIG_HEAD"
+       return 1
+ }
  stop_here_user_resolve () {
      if [ -n "$resolvemsg" ]; then
            printf '%s\n' "$resolvemsg"
@@@ -419,10 -441,11 +441,11 @@@ the
                        exec git rebase --abort
                fi
                git rerere clear
-               test -f "$dotest/dirtyindex" || {
+               if safe_to_abort
+               then
                        git read-tree --reset -u HEAD ORIG_HEAD
                        git reset ORIG_HEAD
-               }
+               fi
                rm -fr "$dotest"
                exit ;;
        esac
@@@ -444,12 -467,12 +467,12 @@@ els
                                set x
                                first=
                        }
 -                      case "$arg" in
 -                      /*)
 -                              set "$@" "$arg" ;;
 -                      *)
 -                              set "$@" "$prefix$arg" ;;
 -                      esac
 +                      if is_absolute_path "$arg"
 +                      then
 +                              set "$@" "$arg"
 +                      else
 +                              set "$@" "$prefix$arg"
 +                      fi
                done
                shift
        fi