Merge branch 'master' of git://repo.or.cz/git-gui
[gitweb.git] / t / t3404-rebase-interactive.sh
index 43a6675caa3a57c0ad5a2b177d8b437e660525af..817f614cde29f12e01724901e1f0b966a28d04b3 100755 (executable)
@@ -65,6 +65,7 @@ cat > fake-editor.sh << EOF
 #!/bin/sh
 test "\$1" = .git/COMMIT_EDITMSG && {
        test -z "\$FAKE_COMMIT_MESSAGE" || echo "\$FAKE_COMMIT_MESSAGE" > "\$1"
+       test -z "\$FAKE_COMMIT_AMEND" || echo "\$FAKE_COMMIT_AMEND" >> "\$1"
        exit
 }
 test -z "\$FAKE_LINES" && exit
@@ -212,4 +213,42 @@ test_expect_success 'verbose flag is heeded, even after --continue' '
        grep "^ file1 |    2 +-$" output
 '
 
+test_expect_success 'multi-squash only fires up editor once' '
+       base=$(git rev-parse HEAD~4) &&
+       FAKE_COMMIT_AMEND="ONCE" FAKE_LINES="1 squash 2 squash 3 squash 4" \
+               git rebase -i $base &&
+       test $base = $(git rev-parse HEAD^) &&
+       test 1 = $(git show | grep ONCE | wc -l)
+'
+
+test_expect_success 'squash works as expected' '
+       for n in one two three four
+       do
+               echo $n >> file$n &&
+               git add file$n &&
+               git commit -m $n
+       done &&
+       one=$(git rev-parse HEAD~3) &&
+       FAKE_LINES="1 squash 3 2" git rebase -i HEAD~3 &&
+       test $one = $(git rev-parse HEAD~2)
+'
+
+test_expect_success 'interrupted squash works as expected' '
+       for n in one two three four
+       do
+               echo $n >> conflict &&
+               git add conflict &&
+               git commit -m $n
+       done &&
+       one=$(git rev-parse HEAD~3) &&
+       ! FAKE_LINES="1 squash 3 2" git rebase -i HEAD~3 &&
+       (echo one; echo two; echo four) > conflict &&
+       git add conflict &&
+       ! git rebase --continue &&
+       echo resolved > conflict &&
+       git add conflict &&
+       git rebase --continue &&
+       test $one = $(git rev-parse HEAD~2)
+'
+
 test_done