#!/bin/sh test_description='git am running' . ./test-lib.sh cat >msg <failmail <pine < Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA Message-ID: This text is part of the internal format of your mail folder, and is not a real message. It is created automatically by the mail system software. If deleted, important folder data will be lost, and it will be re-created with the data reset to initial values. EOF echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected test_expect_success setup ' echo hello >file && git add file && test_tick && git commit -m first && git tag first && echo world >>file && git add file && test_tick && git commit -s -F msg && git tag second && git format-patch --stdout first >patch1 && sed -n -e "3,\$p" msg >file && git add file && test_tick && git commit -m third && git format-patch --stdout first >patch2 && git checkout -b lorem && sed -n -e "11,\$p" msg >file && head -n 9 msg >>file && test_tick && git commit -a -m "moved stuff" && echo goodbye >another && git add another && test_tick && git commit -m "added another file" && git format-patch --stdout master >lorem-move.patch ' # reset time unset test_tick test_tick test_expect_success 'am applies patch correctly' ' git checkout first && test_tick && git am " = \ "$(git log -1 --pretty=format:"%cn <%ce>" HEAD)" ' test_expect_success 'am --signoff adds Signed-off-by: line' ' git checkout -b master2 first && git am --signoff " >>expected && git cat-file commit HEAD^ | grep "Signed-off-by:" >actual && test_cmp actual expected && echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected && git cat-file commit HEAD | grep "Signed-off-by:" >actual && test_cmp actual expected ' test_expect_success 'am stays in branch' ' test "refs/heads/master2" = "$(git symbolic-ref HEAD)" ' test_expect_success 'am --signoff does not add Signed-off-by: line if already there' ' git format-patch --stdout HEAD^ >patch3 && sed -e "/^Subject/ s,\[PATCH,Re: Re: Re: & 1/5 v2," patch3 >patch4 git checkout HEAD^ && git am --signoff patch4 && test "$(git cat-file commit HEAD | grep -c "^Signed-off-by:")" -eq 1 ' test_expect_success 'am without --keep removes Re: and [PATCH] stuff' ' test "$(git rev-parse HEAD)" = "$(git rev-parse master2)" ' test_expect_success 'am --keep really keeps the subject' ' git checkout HEAD^ && git am --keep patch4 && ! test -d .git/rebase-apply && git cat-file commit HEAD | fgrep "Re: Re: Re: [PATCH 1/5 v2] third" ' test_expect_success 'am -3 falls back to 3-way merge' ' git checkout -b lorem2 master2 && sed -n -e "3,\$p" msg >file && head -n 9 msg >>file && git add file && test_tick && git commit -m "copied stuff" && git am -3 lorem-move.patch && ! test -d .git/rebase-apply && test -z "$(git diff lorem)" ' test_expect_success 'am pauses on conflict' ' git checkout lorem2^^ && test_must_fail git am lorem-move.patch && test -d .git/rebase-apply ' test_expect_success 'am --skip works' ' git am --skip && ! test -d .git/rebase-apply && test -z "$(git diff lorem2^^ -- file)" && test goodbye = "$(cat another)" ' test_expect_success 'am --resolved works' ' git checkout lorem2^^ && test_must_fail git am lorem-move.patch && test -d .git/rebase-apply && echo resolved >>file && git add file && git am --resolved && ! test -d .git/rebase-apply && test goodbye = "$(cat another)" ' test_expect_success 'am takes patches from a Pine mailbox' ' git checkout first && cat pine patch1 | git am && ! test -d .git/rebase-apply && test -z "$(git diff master^..HEAD)" ' test_expect_success 'am fails on mail without patch' ' test_must_fail git am >failmail && test_must_fail git am