Since that git has supported the --always option for the git-format-patch command to create a patch with an empty commit message, git-am should support applying and committing with empty patches. ---------------------------------------------------------------------------- Changes since v1: 1. add a case when not passing the --always option 2. rename the --always option to --allow-empty ---------------------------------------------------------------------------- Changes since v2: 1. rename the --allow-empty option to --empty-commit 2. introduce three different strategies (die|skip|asis) when trying to record empty patches as empty commits. ---------------------------------------------------------------------------- Changes since v3: 1. generate the missed file for test cases 2. grep -f cannot be used under Mac OS ---------------------------------------------------------------------------- Aleen (2): doc: git-format-patch: describe the option --always am: support --empty-commit option to handle empty patches Documentation/git-am.txt | 9 ++++ Documentation/git-format-patch.txt | 6 ++- builtin/am.c | 48 ++++++++++++++++++-- t/t4150-am.sh | 73 ++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 6 deletions(-) base-commit: b550198c73edd4cc058832dcf74b41aeec2adba2 Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1076%2Faleen42%2Fnext-v4 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1076/aleen42/next-v4 Pull-Request: https://github.com/gitgitgadget/git/pull/1076 Range-diff vs v3: 1: 9f1b3dd6d0b = 1: 9f1b3dd6d0b doc: git-format-patch: describe the option --always 2: ef33ce8c6f9 ! 2: b7e30c9b7ab am: support --empty-commit option to handle empty patches @@ t/t4150-am.sh: test_expect_success setup ' + git commit -m "empty commit" --allow-empty && + + git format-patch --stdout empty-commit^ >empty.patch && ++ git format-patch --stdout --cover-letter empty-commit^ >cover-letter.patch && + git format-patch --always --stdout empty-commit^ >empty-commit.patch && + # reset time @@ t/t4150-am.sh: test_expect_success 'apply binary blob in partial clone' ' + + git am --empty-commit=skip cover-letter.patch >err && + test_path_is_missing .git/rebase-apply && -+ git rev-parse empty-commit^ >expected && -+ git rev-parse HEAD >actual && -+ test_cmp expected actual ++ test_cmp_rev empty-commit^ HEAD +' + +test_expect_success 'record as an empty commit when meeting e-mail message that lacks a patch' ' + git am --empty-commit=asis empty-commit.patch && + test_path_is_missing .git/rebase-apply && -+ git show empty-commit --format="%B" >expected && ++ { ++ git show empty-commit --format="%B" && ++ echo "--" && ++ git version | sed -e "s/^git version //" && ++ echo ++ } >expected && + git show HEAD --format="%B" >actual && -+ grep -f actual expected && ++ test_cmp actual expected && + + git am --empty-commit=asis cover-letter.patch && + test_path_is_missing .git/rebase-apply && -+ git show empty-commit --format="%B" >expected && ++ { ++ echo "*** SUBJECT HERE ***" && ++ echo && ++ echo "*** BLURB HERE ***" && ++ echo && ++ echo "A U Thor (1):" && ++ printf " " && ++ git show empty-commit --format="%B" && ++ echo "--" && ++ git version | sed -e "s/^git version //" && ++ echo ++ } >expected && + git show HEAD --format="%B" >actual && -+ grep -f actual expected ++ test_cmp actual expected +' + test_done -- gitgitgadget