#!/bin/sh global test_description := ''git-am command-line options override saved options'' source ./test-lib.sh source "$TEST_DIRECTORY"/lib-terminal.sh proc format_patch { git format-patch --stdout -1 $1 >"$1".eml } test_expect_success 'setup' ' test_commit initial file && test_commit first file && git checkout initial && git mv file file2 && test_tick && git commit -m renamed-file && git tag renamed-file && git checkout -b side initial && test_commit side1 file && test_commit side2 file && format_patch side1 && format_patch side2 ' test_expect_success TTY '--3way overrides --no-3way' ' rm -fr .git/rebase-apply && git reset --hard && git checkout renamed-file && # Applying side1 will fail as the file has been renamed. test_must_fail git am --no-3way side[12].eml && test_path_is_dir .git/rebase-apply && test_cmp_rev renamed-file HEAD && test -z "$(git ls-files -u)" && # Applying side1 with am --3way will succeed due to the threeway-merge. # Applying side2 will fail as --3way does not apply to it. test_must_fail test_terminal git am --3way out && test_path_is_dir .git/rebase-apply && test_i18ngrep ! "^Applying: " out && echo side1 >file && git add file && # Applying side1 will not be quiet. # Applying side2 will be quiet. git am --no-quiet --continue >out && echo "Applying: side1" >expected && test_i18ncmp expected out ' test_expect_success '--signoff overrides --no-signoff' ' rm -fr .git/rebase-apply && git reset --hard && git checkout first && test_must_fail git am --no-signoff side[12].eml && test_path_is_dir .git/rebase-apply && echo side1 >file && git add file && git am --signoff --continue && # Applied side1 will be signed off echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected && git cat-file commit HEAD^ | grep "Signed-off-by:" >actual && test_cmp expected actual && # Applied side2 will not be signed off test $(git cat-file commit HEAD | grep -c "Signed-off-by:") -eq 0 ' test_expect_success TTY '--reject overrides --no-reject' ' rm -fr .git/rebase-apply && git reset --hard && git checkout first && rm -f file.rej && test_must_fail git am --no-reject side1.eml && test_path_is_dir .git/rebase-apply && test_path_is_missing file.rej && test_must_fail test_terminal git am --reject )} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-terminal.sh)}) (FuncDef name: format_patch body: (BraceGroup children: [ (SimpleCommand words: [{(git)} {(format-patch)} {(--stdout)} {(-1)} {(DQ ($ VSub_Number "$1"))}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {(DQ ($ VSub_Number "$1")) (.eml)} spids: [42] ) ] ) ] spids: [27] ) spids: [22 26] ) (C {(test_expect_success)} {(SQ )} { (SQ <"\n"> <"\ttest_commit initial file &&\n"> <"\ttest_commit first file &&\n"> <"\n"> <"\tgit checkout initial &&\n"> <"\tgit mv file file2 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m renamed-file &&\n"> <"\tgit tag renamed-file &&\n"> <"\n"> <"\tgit checkout -b side initial &&\n"> <"\ttest_commit side1 file &&\n"> <"\ttest_commit side2 file &&\n"> <"\n"> <"\tformat_patch side1 &&\n"> <"\tformat_patch side2\n"> ) } ) (C {(test_expect_success)} {(TTY)} {(SQ <"--3way overrides --no-3way">)} { (SQ <"\n"> <"\trm -fr .git/rebase-apply &&\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout renamed-file &&\n"> <"\n"> <"\t# Applying side1 will fail as the file has been renamed.\n"> <"\ttest_must_fail git am --no-3way side[12].eml &&\n"> <"\ttest_path_is_dir .git/rebase-apply &&\n"> <"\ttest_cmp_rev renamed-file HEAD &&\n"> <"\ttest -z \"$(git ls-files -u)\" &&\n"> <"\n"> <"\t# Applying side1 with am --3way will succeed due to the threeway-merge.\n"> <"\t# Applying side2 will fail as --3way does not apply to it.\n"> <"\ttest_must_fail test_terminal git am --3way <"\ttest_path_is_dir .git/rebase-apply &&\n"> <"\ttest side1 = \"$(cat file2)\"\n"> ) } ) (C {(test_expect_success)} {(SQ <"--no-quiet overrides --quiet">)} { (SQ <"\n"> <"\trm -fr .git/rebase-apply &&\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout first &&\n"> <"\n"> <"\t# Applying side1 will be quiet.\n"> <"\ttest_must_fail git am --quiet side[123].eml >out &&\n"> <"\ttest_path_is_dir .git/rebase-apply &&\n"> <"\ttest_i18ngrep ! \"^Applying: \" out &&\n"> <"\techo side1 >file &&\n"> <"\tgit add file &&\n"> <"\n"> <"\t# Applying side1 will not be quiet.\n"> <"\t# Applying side2 will be quiet.\n"> <"\tgit am --no-quiet --continue >out &&\n"> <"\techo \"Applying: side1\" >expected &&\n"> <"\ttest_i18ncmp expected out\n"> ) } ) (C {(test_expect_success)} {(SQ <"--signoff overrides --no-signoff">)} { (SQ <"\n"> <"\trm -fr .git/rebase-apply &&\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout first &&\n"> <"\n"> <"\ttest_must_fail git am --no-signoff side[12].eml &&\n"> <"\ttest_path_is_dir .git/rebase-apply &&\n"> <"\techo side1 >file &&\n"> <"\tgit add file &&\n"> <"\tgit am --signoff --continue &&\n"> <"\n"> <"\t# Applied side1 will be signed off\n"> <"\techo \"Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>\" >expected &&\n"> <"\tgit cat-file commit HEAD^ | grep \"Signed-off-by:\" >actual &&\n"> <"\ttest_cmp expected actual &&\n"> <"\n"> <"\t# Applied side2 will not be signed off\n"> <"\ttest $(git cat-file commit HEAD | grep -c \"Signed-off-by:\") -eq 0\n"> ) } ) (C {(test_expect_success)} {(TTY)} {(SQ <"--reject overrides --no-reject">)} { (SQ <"\n"> <"\trm -fr .git/rebase-apply &&\n"> <"\tgit reset --hard &&\n"> <"\tgit checkout first &&\n"> <"\trm -f file.rej &&\n"> <"\n"> <"\ttest_must_fail git am --no-reject side1.eml &&\n"> <"\ttest_path_is_dir .git/rebase-apply &&\n"> <"\ttest_path_is_missing file.rej &&\n"> <"\n"> <"\ttest_must_fail test_terminal git am --reject <"\ttest_path_is_dir .git/rebase-apply &&\n"> <"\ttest_path_is_file file.rej\n"> ) } ) (C {(test_done)}) ] )