Merge branch 'ph/rebase-i-redo' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 5 Jun 2015 19:00:10 +0000 (12:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 5 Jun 2015 19:00:10 +0000 (12:00 -0700)
"git rebase -i" moved the "current" command from "todo" to "done" a
bit too prematurely, losing a step when a "pick" did not even start.

* ph/rebase-i-redo:
rebase -i: redo tasks that die during cherry-pick

1  2 
t/t3404-rebase-interactive.sh
index eed76cca55ce655cb51c793f21cd5ebbd363ba85,96be93c62443e681eb685e6b2b4e254b041916cf..ac429a0bbbbeb95f96336aa203a5d9726ed6eb1d
@@@ -950,7 -950,7 +950,7 @@@ test_expect_success 'rebase --edit-tod
        set_fake_editor &&
        FAKE_LINES="edit 1 2 3" git rebase -i HEAD~3 &&
        FAKE_LINES="2 1" git rebase --edit-todo &&
 -      git rebase --continue
 +      git rebase --continue &&
        test M = $(git cat-file commit HEAD^ | sed -ne \$p) &&
        test L = $(git cat-file commit HEAD | sed -ne \$p)
  '
@@@ -1007,7 -1007,7 +1007,7 @@@ test_expect_success 'rebase -i with --s
  '
  
  test_expect_success 'rebase -i error on commits with \ in message' '
 -      current_head=$(git rev-parse HEAD)
 +      current_head=$(git rev-parse HEAD) &&
        test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" &&
        test_commit TO-REMOVE will-conflict old-content &&
        test_commit "\temp" will-conflict new-content dummy &&
@@@ -1055,4 -1055,51 +1055,51 @@@ test_expect_success 'todo count' 
        grep "^# Rebase ..* onto ..* ([0-9]" actual
  '
  
+ test_expect_success 'rebase -i commits that overwrite untracked files (pick)' '
+       git checkout --force branch2 &&
+       git clean -f &&
+       set_fake_editor &&
+       FAKE_LINES="edit 1 2" git rebase -i A &&
+       test_cmp_rev HEAD F &&
+       test_path_is_missing file6 &&
+       >file6 &&
+       test_must_fail git rebase --continue &&
+       test_cmp_rev HEAD F &&
+       rm file6 &&
+       git rebase --continue &&
+       test_cmp_rev HEAD I
+ '
+ test_expect_success 'rebase -i commits that overwrite untracked files (squash)' '
+       git checkout --force branch2 &&
+       git clean -f &&
+       git tag original-branch2 &&
+       set_fake_editor &&
+       FAKE_LINES="edit 1 squash 2" git rebase -i A &&
+       test_cmp_rev HEAD F &&
+       test_path_is_missing file6 &&
+       >file6 &&
+       test_must_fail git rebase --continue &&
+       test_cmp_rev HEAD F &&
+       rm file6 &&
+       git rebase --continue &&
+       test $(git cat-file commit HEAD | sed -ne \$p) = I &&
+       git reset --hard original-branch2
+ '
+ test_expect_success 'rebase -i commits that overwrite untracked files (no ff)' '
+       git checkout --force branch2 &&
+       git clean -f &&
+       set_fake_editor &&
+       FAKE_LINES="edit 1 2" git rebase -i --no-ff A &&
+       test $(git cat-file commit HEAD | sed -ne \$p) = F &&
+       test_path_is_missing file6 &&
+       >file6 &&
+       test_must_fail git rebase --continue &&
+       test $(git cat-file commit HEAD | sed -ne \$p) = F &&
+       rm file6 &&
+       git rebase --continue &&
+       test $(git cat-file commit HEAD | sed -ne \$p) = I
+ '
  test_done