Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'pt/am-tests'
* pt/am-tests:
  t3901: test git-am encoding conversion
  t3418: non-interactive rebase --continue with rerere enabled
  t4150: tests for am --[no-]scissors
  t4150: am with post-applypatch hook
  t4150: am with pre-applypatch hook
  t4150: am with applypatch-msg hook
  t4150: am --resolved fails if index has unmerged entries
  t4150: am --resolved fails if index has no changes
  t4150: am refuses patches when paused
  t4151: am --abort will keep dirty index intact
  t4150: am fails if index is dirty
  t4150: am.messageid really adds the message id
  • Loading branch information
Junio C Hamano committed Aug 3, 2015
2 parents 461c119 + 5b05b92 commit 980a3d3
Show file tree
Hide file tree
Showing 4 changed files with 313 additions and 0 deletions.
19 changes: 19 additions & 0 deletions t/t3418-rebase-continue.sh
Expand Up @@ -40,6 +40,25 @@ test_expect_success 'non-interactive rebase --continue works with touched file'
git rebase --continue
'

test_expect_success 'non-interactive rebase --continue with rerere enabled' '
test_config rerere.enabled true &&
test_when_finished "test_might_fail git rebase --abort" &&
git reset --hard commit-new-file-F2-on-topic-branch &&
git checkout master &&
rm -fr .git/rebase-* &&
test_must_fail git rebase --onto master master topic &&
echo "Resolved" >F2 &&
git add F2 &&
cp F2 F2.expected &&
git rebase --continue &&
git reset --hard commit-new-file-F2-on-topic-branch &&
git checkout master &&
test_must_fail git rebase --onto master master topic &&
test_cmp F2.expected F2
'

test_expect_success 'rebase --continue can not be used with other options' '
test_must_fail git rebase -v --continue &&
test_must_fail git rebase --continue -v
Expand Down
62 changes: 62 additions & 0 deletions t/t3901-i18n-patch.sh
Expand Up @@ -251,4 +251,66 @@ test_expect_success 'rebase --merge (L/U)' '
check_encoding 2 8859
'

test_expect_success 'am (U/U)' '
# Apply UTF-8 patches with UTF-8 commitencoding
git config i18n.commitencoding UTF-8 &&
. "$TEST_DIRECTORY"/t3901-utf8.txt &&
git reset --hard master &&
git am out-u1 out-u2 &&
check_encoding 2
'

test_expect_success !MINGW 'am (L/L)' '
# Apply ISO-8859-1 patches with ISO-8859-1 commitencoding
git config i18n.commitencoding ISO8859-1 &&
. "$TEST_DIRECTORY"/t3901-8859-1.txt &&
git reset --hard master &&
git am out-l1 out-l2 &&
check_encoding 2 8859
'

test_expect_success 'am (U/L)' '
# Apply ISO-8859-1 patches with UTF-8 commitencoding
git config i18n.commitencoding UTF-8 &&
. "$TEST_DIRECTORY"/t3901-utf8.txt &&
git reset --hard master &&
# am specifies --utf8 by default.
git am out-l1 out-l2 &&
check_encoding 2
'

test_expect_success 'am --no-utf8 (U/L)' '
# Apply ISO-8859-1 patches with UTF-8 commitencoding
git config i18n.commitencoding UTF-8 &&
. "$TEST_DIRECTORY"/t3901-utf8.txt &&
git reset --hard master &&
git am --no-utf8 out-l1 out-l2 2>err &&
# commit-tree will warn that the commit message does not contain valid UTF-8
# as mailinfo did not convert it
grep "did not conform" err &&
check_encoding 2
'

test_expect_success !MINGW 'am (L/U)' '
# Apply UTF-8 patches with ISO-8859-1 commitencoding
git config i18n.commitencoding ISO8859-1 &&
. "$TEST_DIRECTORY"/t3901-8859-1.txt &&
git reset --hard master &&
# mailinfo will re-code the commit message to the charset specified by
# i18n.commitencoding
git am out-u1 out-u2 &&
check_encoding 2 8859
'

test_done
217 changes: 217 additions & 0 deletions t/t4150-am.sh
Expand Up @@ -67,6 +67,19 @@ test_expect_success 'setup: messages' '
EOF
cat >scissors-msg <<-\EOF &&
Test git-am with scissors line
This line should be included in the commit message.
EOF
cat - scissors-msg >no-scissors-msg <<-\EOF &&
This line should not be included in the commit message with --scissors enabled.
- - >8 - - remove everything above this line - - >8 - -
EOF
signoff="Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
'

Expand Down Expand Up @@ -137,6 +150,20 @@ test_expect_success setup '
} >patch1-hg.eml &&
echo scissors-file >scissors-file &&
git add scissors-file &&
git commit -F scissors-msg &&
git tag scissors &&
git format-patch --stdout scissors^ >scissors-patch.eml &&
git reset --hard HEAD^ &&
echo no-scissors-file >no-scissors-file &&
git add no-scissors-file &&
git commit -F no-scissors-msg &&
git tag no-scissors &&
git format-patch --stdout no-scissors^ >no-scissors-patch.eml &&
git reset --hard HEAD^ &&
sed -n -e "3,\$p" msg >file &&
git add file &&
test_tick &&
Expand Down Expand Up @@ -186,6 +213,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 &&
Expand Down Expand Up @@ -269,6 +308,133 @@ test_expect_success 'am --patch-format=hg applies hg patch' '
test_cmp_rev second^ HEAD^
'

test_expect_success 'am with applypatch-msg hook' '
test_when_finished "rm -f .git/hooks/applypatch-msg" &&
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout first &&
mkdir -p .git/hooks &&
write_script .git/hooks/applypatch-msg <<-\EOF &&
cat "$1" >actual-msg &&
echo hook-message >"$1"
EOF
git am patch1 &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code second &&
echo hook-message >expected &&
git log -1 --format=format:%B >actual &&
test_cmp expected actual &&
git log -1 --format=format:%B second >expected &&
test_cmp expected actual-msg
'

test_expect_success 'am with failing applypatch-msg hook' '
test_when_finished "rm -f .git/hooks/applypatch-msg" &&
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout first &&
mkdir -p .git/hooks &&
write_script .git/hooks/applypatch-msg <<-\EOF &&
exit 1
EOF
test_must_fail git am patch1 &&
test_path_is_dir .git/rebase-apply &&
git diff --exit-code first &&
test_cmp_rev first HEAD
'

test_expect_success 'am with pre-applypatch hook' '
test_when_finished "rm -f .git/hooks/pre-applypatch" &&
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout first &&
mkdir -p .git/hooks &&
write_script .git/hooks/pre-applypatch <<-\EOF &&
git diff first >diff.actual
exit 0
EOF
git am patch1 &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code second &&
test_cmp_rev second HEAD &&
git diff first..second >diff.expected &&
test_cmp diff.expected diff.actual
'

test_expect_success 'am with failing pre-applypatch hook' '
test_when_finished "rm -f .git/hooks/pre-applypatch" &&
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout first &&
mkdir -p .git/hooks &&
write_script .git/hooks/pre-applypatch <<-\EOF &&
exit 1
EOF
test_must_fail git am patch1 &&
test_path_is_dir .git/rebase-apply &&
git diff --exit-code second &&
test_cmp_rev first HEAD
'

test_expect_success 'am with post-applypatch hook' '
test_when_finished "rm -f .git/hooks/post-applypatch" &&
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout first &&
mkdir -p .git/hooks &&
write_script .git/hooks/post-applypatch <<-\EOF &&
git rev-parse HEAD >head.actual
git diff second >diff.actual
exit 0
EOF
git am patch1 &&
test_path_is_missing .git/rebase-apply &&
test_cmp_rev second HEAD &&
git rev-parse second >head.expected &&
test_cmp head.expected head.actual &&
git diff second >diff.expected &&
test_cmp diff.expected diff.actual
'

test_expect_success 'am with failing post-applypatch hook' '
test_when_finished "rm -f .git/hooks/post-applypatch" &&
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout first &&
mkdir -p .git/hooks &&
write_script .git/hooks/post-applypatch <<-\EOF &&
git rev-parse HEAD >head.actual
exit 1
EOF
git am patch1 &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code second &&
test_cmp_rev second HEAD &&
git rev-parse second >head.expected &&
test_cmp head.expected head.actual
'

test_expect_success 'am --scissors cuts the message at the scissors line' '
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout second &&
git am --scissors scissors-patch.eml &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code scissors &&
test_cmp_rev scissors HEAD
'

test_expect_success 'am --no-scissors overrides mailinfo.scissors' '
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout second &&
test_config mailinfo.scissors true &&
git am --no-scissors no-scissors-patch.eml &&
test_path_is_missing .git/rebase-apply &&
git diff --exit-code no-scissors &&
test_cmp_rev no-scissors HEAD
'

test_expect_success 'setup: new author and committer' '
GIT_AUTHOR_NAME="Another Thor" &&
GIT_AUTHOR_EMAIL="a.thor@example.com" &&
Expand Down Expand Up @@ -448,6 +614,20 @@ test_expect_success 'am --abort removes a stray directory' '
test_path_is_missing .git/rebase-apply
'

test_expect_success 'am refuses patches when paused' '
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout lorem2^^ &&
test_must_fail git am lorem-move.patch &&
test_path_is_dir .git/rebase-apply &&
test_cmp_rev lorem2^^ HEAD &&
test_must_fail git am <lorem-move.patch &&
test_path_is_dir .git/rebase-apply &&
test_cmp_rev lorem2^^ HEAD
'

test_expect_success 'am --resolved works' '
echo goodbye >expected &&
rm -fr .git/rebase-apply &&
Expand All @@ -462,6 +642,31 @@ test_expect_success 'am --resolved works' '
test_cmp expected another
'

test_expect_success 'am --resolved fails if index has no changes' '
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout lorem2^^ &&
test_must_fail git am lorem-move.patch &&
test_path_is_dir .git/rebase-apply &&
test_cmp_rev lorem2^^ HEAD &&
test_must_fail git am --resolved &&
test_path_is_dir .git/rebase-apply &&
test_cmp_rev lorem2^^ HEAD
'

test_expect_success 'am --resolved fails if index has unmerged entries' '
rm -fr .git/rebase-apply &&
git reset --hard &&
git checkout second &&
test_must_fail git am -3 lorem-move.patch &&
test_path_is_dir .git/rebase-apply &&
test_cmp_rev second HEAD &&
test_must_fail git am --resolved >err &&
test_path_is_dir .git/rebase-apply &&
test_cmp_rev second HEAD &&
test_i18ngrep "still have unmerged paths" err
'

test_expect_success 'am takes patches from a Pine mailbox' '
rm -fr .git/rebase-apply &&
git reset --hard &&
Expand Down Expand Up @@ -626,6 +831,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 &&
Expand Down
15 changes: 15 additions & 0 deletions t/t4151-am-abort.sh
Expand Up @@ -95,6 +95,21 @@ test_expect_success 'am --abort will keep the local commits intact' '
test_cmp expect actual
'

test_expect_success 'am --abort will keep dirty index intact' '
git reset --hard initial &&
echo dirtyfile >dirtyfile &&
cp dirtyfile dirtyfile.expected &&
git add dirtyfile &&
test_must_fail git am 0001-*.patch &&
test_cmp_rev initial HEAD &&
test_path_is_file dirtyfile &&
test_cmp dirtyfile.expected dirtyfile &&
git am --abort &&
test_cmp_rev initial HEAD &&
test_path_is_file dirtyfile &&
test_cmp dirtyfile.expected dirtyfile
'

test_expect_success 'am -3 stops on conflict on unborn branch' '
git checkout -f --orphan orphan &&
git reset &&
Expand Down

0 comments on commit 980a3d3

Please sign in to comment.