t4150: am fails if index is dirty
[gitweb.git] / t / t4150-am.sh
index 306e6f39ac88e7ee4ee0fb16dee12cf999fbba1b..a85e06aa033d11fce4b561df559925febce7914f 100755 (executable)
@@ -154,6 +154,18 @@ test_expect_success 'am applies patch correctly' '
        test "$(git rev-parse second^)" = "$(git rev-parse HEAD^)"
 '
 
+test_expect_success 'am fails if index is dirty' '
+       test_when_finished "rm -f dirtyfile" &&
+       rm -fr .git/rebase-apply &&
+       git reset --hard &&
+       git checkout first &&
+       echo dirtyfile >dirtyfile &&
+       git add dirtyfile &&
+       test_must_fail git am patch1 &&
+       test_path_is_dir .git/rebase-apply &&
+       test_cmp_rev first HEAD
+'
+
 test_expect_success 'am applies patch e-mail not in a mbox' '
        rm -fr .git/rebase-apply &&
        git reset --hard &&
@@ -274,15 +286,21 @@ test_expect_success 'am --keep-non-patch really keeps the non-patch part' '
        grep "^\[foo\] third" actual
 '
 
-test_expect_success 'am -3 falls back to 3-way merge' '
+test_expect_success 'setup am -3' '
        rm -fr .git/rebase-apply &&
        git reset --hard &&
-       git checkout -b lorem2 master2 &&
+       git checkout -b base3way master2 &&
        sed -n -e "3,\$p" msg >file &&
        head -n 9 msg >>file &&
        git add file &&
        test_tick &&
-       git commit -m "copied stuff" &&
+       git commit -m "copied stuff"
+'
+
+test_expect_success 'am -3 falls back to 3-way merge' '
+       rm -fr .git/rebase-apply &&
+       git reset --hard &&
+       git checkout -b lorem2 base3way &&
        git am -3 lorem-move.patch &&
        test_path_is_missing .git/rebase-apply &&
        git diff --exit-code lorem
@@ -291,17 +309,31 @@ test_expect_success 'am -3 falls back to 3-way merge' '
 test_expect_success 'am -3 -p0 can read --no-prefix patch' '
        rm -fr .git/rebase-apply &&
        git reset --hard &&
-       git checkout -b lorem3 master2 &&
-       sed -n -e "3,\$p" msg >file &&
-       head -n 9 msg >>file &&
-       git add file &&
-       test_tick &&
-       git commit -m "copied stuff" &&
+       git checkout -b lorem3 base3way &&
        git am -3 -p0 lorem-zero.patch &&
        test_path_is_missing .git/rebase-apply &&
        git diff --exit-code lorem
 '
 
+test_expect_success 'am with config am.threeWay falls back to 3-way merge' '
+       rm -fr .git/rebase-apply &&
+       git reset --hard &&
+       git checkout -b lorem4 base3way &&
+       test_config am.threeWay 1 &&
+       git am lorem-move.patch &&
+       test_path_is_missing .git/rebase-apply &&
+       git diff --exit-code lorem
+'
+
+test_expect_success 'am with config am.threeWay overridden by --no-3way' '
+       rm -fr .git/rebase-apply &&
+       git reset --hard &&
+       git checkout -b lorem5 base3way &&
+       test_config am.threeWay 1 &&
+       test_must_fail git am --no-3way lorem-move.patch &&
+       test_path_is_dir .git/rebase-apply
+'
+
 test_expect_success 'am can rename a file' '
        grep "^rename from" rename.patch &&
        rm -fr .git/rebase-apply &&
@@ -338,12 +370,7 @@ test_expect_success 'am -3 can rename a file after falling back to 3-way merge'
 test_expect_success 'am -3 -q is quiet' '
        rm -fr .git/rebase-apply &&
        git checkout -f lorem2 &&
-       git reset master2 --hard &&
-       sed -n -e "3,\$p" msg >file &&
-       head -n 9 msg >>file &&
-       git add file &&
-       test_tick &&
-       git commit -m "copied stuff" &&
+       git reset base3way --hard &&
        git am -3 -q lorem-move.patch >output.out 2>&1 &&
        ! test -s output.out
 '
@@ -548,6 +575,18 @@ test_expect_success 'am --message-id really adds the message id' '
        test_cmp expected actual
 '
 
+test_expect_success 'am.messageid really adds the message id' '
+       rm -fr .git/rebase-apply &&
+       git reset --hard &&
+       git checkout HEAD^ &&
+       test_config am.messageid true &&
+       git am patch1.eml &&
+       test_path_is_missing .git/rebase-apply &&
+       git cat-file commit HEAD | tail -n1 >actual &&
+       grep Message-Id patch1.eml >expected &&
+       test_cmp expected actual
+'
+
 test_expect_success 'am --message-id -s signs off after the message id' '
        rm -fr .git/rebase-apply &&
        git reset --hard &&