Code

Merge branch 'jc/clone'
[git.git] / t / t3404-rebase-interactive.sh
index 883cf29595366a6db17b7741ac11e13deb727070..a9b552ff087fd6e45419e87f892b42da33ffed98 100755 (executable)
@@ -63,7 +63,14 @@ test_expect_success 'setup' '
 
 cat > fake-editor.sh << EOF
 #!/bin/sh
-test "\$1" = .git/COMMIT_EDITMSG && exit
+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 "\$EXPECT_COUNT" ||
+       test "\$EXPECT_COUNT" = \$(grep -ve "^#" -e "^$" < "\$1" | wc -l) ||
+       exit
 test -z "\$FAKE_LINES" && exit
 grep -v "^#" < "\$1" > "\$1".tmp
 rm "\$1"
@@ -91,6 +98,14 @@ test_expect_success 'no changes are a nop' '
        test $(git rev-parse I) = $(git rev-parse HEAD)
 '
 
+test_expect_success 'test the [branch] option' '
+       git checkout -b dead-end &&
+       git rm file6 &&
+       git commit -m "stop here" &&
+       git rebase -i F branch2 &&
+       test $(git rev-parse I) = $(git rev-parse HEAD)
+'
+
 test_expect_success 'rebase on top of a non-conflicting commit' '
        git checkout branch1 &&
        git tag original-branch1 &&
@@ -181,6 +196,7 @@ test_expect_success 'preserve merges with -p' '
        echo C > file1 &&
        test_tick &&
        git commit -m K file1 &&
+       test_tick &&
        git rebase -i -p --onto branch1 master &&
        test $(git rev-parse HEAD^^2) = $(git rev-parse to-be-preserved) &&
        test $(git rev-parse HEAD~3) = $(git rev-parse branch1) &&
@@ -188,4 +204,74 @@ test_expect_success 'preserve merges with -p' '
        test $(git show HEAD~2:file1) = B
 '
 
+test_expect_success '--continue tries to commit' '
+       test_tick &&
+       ! git rebase -i --onto new-branch1 HEAD^ &&
+       echo resolved > file1 &&
+       git add file1 &&
+       FAKE_COMMIT_MESSAGE="chouette!" git rebase --continue &&
+       test $(git rev-parse HEAD^) = $(git rev-parse new-branch1) &&
+       git show HEAD | grep chouette
+'
+
+test_expect_success 'verbose flag is heeded, even after --continue' '
+       git reset --hard HEAD@{1} &&
+       test_tick &&
+       ! git rebase -v -i --onto new-branch1 HEAD^ &&
+       echo resolved > file1 &&
+       git add file1 &&
+       git rebase --continue > output &&
+       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_expect_success 'ignore patch if in upstream' '
+       HEAD=$(git rev-parse HEAD) &&
+       git checkout -b has-cherry-picked HEAD^ &&
+       echo unrelated > file7 &&
+       git add file7 &&
+       test_tick &&
+       git commit -m "unrelated change" &&
+       git cherry-pick $HEAD &&
+       EXPECT_COUNT=1 git rebase -i $HEAD &&
+       test $HEAD = $(git rev-parse HEAD^)
+'
+
 test_done