diff options
author | Olivier Marin <dkr@freesurf.fr> | 2008-07-21 15:39:06 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-07-22 00:06:04 -0700 |
commit | 95f8ebbfc7997b3114d4f09360501324905c4e6d (patch) | |
tree | 905c1d73221181f53840b5d7a995581181f30030 | |
parent | d1f63a37caae19314bbd55c9fe3554d2e53537e7 (diff) | |
download | git-95f8ebbfc7997b3114d4f09360501324905c4e6d.tar.gz |
git am --skip: clean the index while preserving local changes
In 3-way merge, "am" will let the index with unmerged path waiting
for us to resolve conflicts and continue. But if we want to --skip
instead, "am" refuses to continue because of the dirty index.
With this patch, "am" will clean the index without touching files
locally modified, before continuing.
Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | git-am.sh | 12 | ||||
-rwxr-xr-x | t/t4151-am-abort.sh | 11 |
2 files changed, 18 insertions, 5 deletions
@@ -202,8 +202,15 @@ then die "previous rebase directory $dotest still exists but mbox given." resume=yes - case "$abort" in - t) + case "$skip,$abort" in + t,) + git rerere clear + git read-tree --reset -u HEAD HEAD + orig_head=$(cat "$GIT_DIR/ORIG_HEAD") + git reset HEAD + git update-ref ORIG_HEAD $orig_head + ;; + ,t) git rerere clear git read-tree --reset -u HEAD ORIG_HEAD git reset ORIG_HEAD @@ -297,7 +304,6 @@ last=`cat "$dotest/last"` this=`cat "$dotest/next"` if test "$skip" = t then - git rerere clear this=`expr "$this" + 1` resume= fi diff --git a/t/t4151-am-abort.sh b/t/t4151-am-abort.sh index dda7e2c28e..249093b6d0 100755 --- a/t/t4151-am-abort.sh +++ b/t/t4151-am-abort.sh @@ -14,7 +14,7 @@ test_expect_success setup ' git add file-1 file-2 && git commit -m initial && git tag initial && - for i in 2 3 4 5 + for i in 2 3 4 5 6 do echo $i >>file-1 && test_tick && @@ -32,7 +32,7 @@ do git reset --hard initial && cp file-2-expect file-2 && - test_must_fail git am$with3 000[124]-*.patch && + test_must_fail git am$with3 000[1245]-*.patch && git log --pretty=tformat:%s >actual && for i in 3 2 initial do @@ -41,6 +41,13 @@ do test_cmp expect actual ' + test_expect_success "am$with3 --skip continue after failed am$with3" ' + test_must_fail git-am$with3 --skip >output && + test "$(grep "^Applying" output)" = "Applying 6" && + test_cmp file-2-expect file-2 && + test ! -f .git/rr-cache/MERGE_RR + ' + test_expect_success "am --abort goes back after failed am$with3" ' git-am --abort && git rev-parse HEAD >actual && |