summaryrefslogtreecommitdiff
path: root/git-am.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-12-22 14:41:19 -0800
committerJunio C Hamano <gitster@pobox.com>2010-12-22 14:41:19 -0800
commitcfa775c10ef698c7b84e2d460d04272993c30da4 (patch)
tree552d7266759f13355587e86091815b3cf4dcdd6e /git-am.sh
parent3ea3860758cc2501388059a89c1e5f4a90acb50d (diff)
parent7b3b7e37581fb5266a260687c21af1571b4ade81 (diff)
downloadgit-cfa775c10ef698c7b84e2d460d04272993c30da4.tar.gz
Merge branch 'jc/maint-am-abort-safely'
* jc/maint-am-abort-safely: am --abort: keep unrelated commits since the last failure and warn
Diffstat (limited to 'git-am.sh')
-rwxr-xr-xgit-am.sh27
1 files changed, 25 insertions, 2 deletions
diff --git a/git-am.sh b/git-am.sh
index df09b42840..cf1f64b574 100755
--- a/git-am.sh
+++ b/git-am.sh
@@ -68,9 +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 @@ then
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