diff options
Diffstat (limited to 't/t4014-format-patch.sh')
-rwxr-xr-x | t/t4014-format-patch.sh | 614 |
1 files changed, 467 insertions, 147 deletions
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index db7e733..e37a141 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -5,108 +5,115 @@ test_description='various format-patch tests' +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + . ./test-lib.sh . "$TEST_DIRECTORY"/lib-terminal.sh test_expect_success setup ' - for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i"; done >file && + test_write_lines 1 2 3 4 5 6 7 8 9 10 >file && cat file >elif && git add file elif && test_tick && git commit -m Initial && git checkout -b side && - for i in 1 2 5 6 A B C 7 8 9 10; do echo "$i"; done >file && + test_write_lines 1 2 5 6 A B C 7 8 9 10 >file && test_chmod +x elif && test_tick && git commit -m "Side changes #1" && - for i in D E F; do echo "$i"; done >>file && + test_write_lines D E F >>file && git update-index file && test_tick && git commit -m "Side changes #2" && git tag C2 && - for i in 5 6 1 2 3 A 4 B C 7 8 9 10 D E F; do echo "$i"; done >file && + test_write_lines 5 6 1 2 3 A 4 B C 7 8 9 10 D E F >file && git update-index file && test_tick && git commit -m "Side changes #3 with \\n backslash-n in it." && - git checkout master && + git checkout main && git diff-tree -p C2 >patch && git apply --index <patch && test_tick && - git commit -m "Master accepts moral equivalent of #2" && + git commit -m "Main accepts moral equivalent of #2" && git checkout side && git checkout -b patchid && - for i in 5 6 1 2 3 A 4 B C 7 8 9 10 D E F; do echo "$i"; done >file2 && - for i in 1 2 3 A 4 B C 7 8 9 10 D E F 5 6; do echo "$i"; done >file3 && - for i in 8 9 10; do echo "$i"; done >file && + test_write_lines 5 6 1 2 3 A 4 B C 7 8 9 10 D E F >file2 && + test_write_lines 1 2 3 A 4 B C 7 8 9 10 D E F 5 6 >file3 && + test_write_lines 8 9 10 >file && git add file file2 file3 && test_tick && git commit -m "patchid 1" && - for i in 4 A B 7 8 9 10; do echo "$i"; done >file2 && - for i in 8 9 10 5 6; do echo "$i"; done >file3 && + test_write_lines 4 A B 7 8 9 10 >file2 && + test_write_lines 8 9 10 5 6 >file3 && git add file2 file3 && test_tick && git commit -m "patchid 2" && - for i in 10 5 6; do echo "$i"; done >file && + test_write_lines 10 5 6 >file && git add file && test_tick && git commit -m "patchid 3" && - git checkout master + git checkout -b empty main && + test_tick && + git commit --allow-empty -m "empty commit" && + + git checkout main ' test_expect_success 'format-patch --ignore-if-in-upstream' ' - git format-patch --stdout master..side >patch0 && + git format-patch --stdout main..side >patch0 && grep "^From " patch0 >from0 && test_line_count = 3 from0 ' test_expect_success 'format-patch --ignore-if-in-upstream' ' git format-patch --stdout \ - --ignore-if-in-upstream master..side >patch1 && + --ignore-if-in-upstream main..side >patch1 && grep "^From " patch1 >from1 && test_line_count = 2 from1 ' test_expect_success 'format-patch --ignore-if-in-upstream handles tags' ' git tag -a v1 -m tag side && - git tag -a v2 -m tag master && + git tag -a v2 -m tag main && git format-patch --stdout --ignore-if-in-upstream v2..v1 >patch1 && grep "^From " patch1 >from1 && test_line_count = 2 from1 ' test_expect_success "format-patch doesn't consider merge commits" ' - git checkout -b slave master && + git checkout -b feature main && echo "Another line" >>file && test_tick && - git commit -am "Slave change #1" && + git commit -am "Feature branch change #1" && echo "Yet another line" >>file && test_tick && - git commit -am "Slave change #2" && - git checkout -b merger master && + git commit -am "Feature branch change #2" && + git checkout -b merger main && test_tick && - git merge --no-ff slave && + git merge --no-ff feature && git format-patch -3 --stdout >patch && grep "^From " patch >from && test_line_count = 3 from ' test_expect_success 'format-patch result applies' ' - git checkout -b rebuild-0 master && + git checkout -b rebuild-0 main && git am -3 patch0 && - git rev-list master.. >list && + git rev-list main.. >list && test_line_count = 2 list ' test_expect_success 'format-patch --ignore-if-in-upstream result applies' ' - git checkout -b rebuild-1 master && + git checkout -b rebuild-1 main && git am -3 patch1 && - git rev-list master.. >list && + git rev-list main.. >list && test_line_count = 2 list ' @@ -125,12 +132,18 @@ test_expect_success 'replay did not screw up the log message' ' grep "^Side .* with .* backslash-n" actual ' +test_expect_success 'format-patch empty commit' ' + git format-patch --stdout main..empty >empty && + grep "^From " empty >from && + test_line_count = 1 from +' + test_expect_success 'extra headers' ' git config format.headers "To: R E Cipient <rcipient@example.com> " && git config --add format.headers "Cc: S E Cipient <scipient@example.com> " && - git format-patch --stdout master..side >patch2 && + git format-patch --stdout main..side >patch2 && sed -e "/^\$/q" patch2 >hdrs2 && grep "^To: R E Cipient <rcipient@example.com>\$" hdrs2 && grep "^Cc: S E Cipient <scipient@example.com>\$" hdrs2 @@ -139,7 +152,7 @@ test_expect_success 'extra headers' ' test_expect_success 'extra headers without newlines' ' git config --replace-all format.headers "To: R E Cipient <rcipient@example.com>" && git config --add format.headers "Cc: S E Cipient <scipient@example.com>" && - git format-patch --stdout master..side >patch3 && + git format-patch --stdout main..side >patch3 && sed -e "/^\$/q" patch3 >hdrs3 && grep "^To: R E Cipient <rcipient@example.com>\$" hdrs3 && grep "^Cc: S E Cipient <scipient@example.com>\$" hdrs3 @@ -148,7 +161,7 @@ test_expect_success 'extra headers without newlines' ' test_expect_success 'extra headers with multiple To:s' ' git config --replace-all format.headers "To: R E Cipient <rcipient@example.com>" && git config --add format.headers "To: S E Cipient <scipient@example.com>" && - git format-patch --stdout master..side >patch4 && + git format-patch --stdout main..side >patch4 && sed -e "/^\$/q" patch4 >hdrs4 && grep "^To: R E Cipient <rcipient@example.com>,\$" hdrs4 && grep "^ *S E Cipient <scipient@example.com>\$" hdrs4 @@ -156,7 +169,7 @@ test_expect_success 'extra headers with multiple To:s' ' test_expect_success 'additional command line cc (ascii)' ' git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" && - git format-patch --cc="S E Cipient <scipient@example.com>" --stdout master..side >patch5 && + git format-patch --cc="S E Cipient <scipient@example.com>" --stdout main..side >patch5 && sed -e "/^\$/q" patch5 >hdrs5 && grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs5 && grep "^ *S E Cipient <scipient@example.com>\$" hdrs5 @@ -164,7 +177,7 @@ test_expect_success 'additional command line cc (ascii)' ' test_expect_failure 'additional command line cc (rfc822)' ' git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" && - git format-patch --cc="S. E. Cipient <scipient@example.com>" --stdout master..side >patch5 && + git format-patch --cc="S. E. Cipient <scipient@example.com>" --stdout main..side >patch5 && sed -e "/^\$/q" patch5 >hdrs5 && grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs5 && grep "^ *\"S. E. Cipient\" <scipient@example.com>\$" hdrs5 @@ -172,14 +185,14 @@ test_expect_failure 'additional command line cc (rfc822)' ' test_expect_success 'command line headers' ' git config --unset-all format.headers && - git format-patch --add-header="Cc: R E Cipient <rcipient@example.com>" --stdout master..side >patch6 && + git format-patch --add-header="Cc: R E Cipient <rcipient@example.com>" --stdout main..side >patch6 && sed -e "/^\$/q" patch6 >hdrs6 && grep "^Cc: R E Cipient <rcipient@example.com>\$" hdrs6 ' test_expect_success 'configuration headers and command line headers' ' git config --replace-all format.headers "Cc: R E Cipient <rcipient@example.com>" && - git format-patch --add-header="Cc: S E Cipient <scipient@example.com>" --stdout master..side >patch7 && + git format-patch --add-header="Cc: S E Cipient <scipient@example.com>" --stdout main..side >patch7 && sed -e "/^\$/q" patch7 >hdrs7 && grep "^Cc: R E Cipient <rcipient@example.com>,\$" hdrs7 && grep "^ *S E Cipient <scipient@example.com>\$" hdrs7 @@ -187,40 +200,40 @@ test_expect_success 'configuration headers and command line headers' ' test_expect_success 'command line To: header (ascii)' ' git config --unset-all format.headers && - git format-patch --to="R E Cipient <rcipient@example.com>" --stdout master..side >patch8 && + git format-patch --to="R E Cipient <rcipient@example.com>" --stdout main..side >patch8 && sed -e "/^\$/q" patch8 >hdrs8 && grep "^To: R E Cipient <rcipient@example.com>\$" hdrs8 ' test_expect_failure 'command line To: header (rfc822)' ' - git format-patch --to="R. E. Cipient <rcipient@example.com>" --stdout master..side >patch8 && + git format-patch --to="R. E. Cipient <rcipient@example.com>" --stdout main..side >patch8 && sed -e "/^\$/q" patch8 >hdrs8 && grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" hdrs8 ' test_expect_failure 'command line To: header (rfc2047)' ' - git format-patch --to="R Ä Cipient <rcipient@example.com>" --stdout master..side >patch8 && + git format-patch --to="R Ä Cipient <rcipient@example.com>" --stdout main..side >patch8 && sed -e "/^\$/q" patch8 >hdrs8 && grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" hdrs8 ' test_expect_success 'configuration To: header (ascii)' ' git config format.to "R E Cipient <rcipient@example.com>" && - git format-patch --stdout master..side >patch9 && + git format-patch --stdout main..side >patch9 && sed -e "/^\$/q" patch9 >hdrs9 && grep "^To: R E Cipient <rcipient@example.com>\$" hdrs9 ' test_expect_failure 'configuration To: header (rfc822)' ' git config format.to "R. E. Cipient <rcipient@example.com>" && - git format-patch --stdout master..side >patch9 && + git format-patch --stdout main..side >patch9 && sed -e "/^\$/q" patch9 >hdrs9 && grep "^To: \"R. E. Cipient\" <rcipient@example.com>\$" hdrs9 ' test_expect_failure 'configuration To: header (rfc2047)' ' git config format.to "R Ä Cipient <rcipient@example.com>" && - git format-patch --stdout master..side >patch9 && + git format-patch --stdout main..side >patch9 && sed -e "/^\$/q" patch9 >hdrs9 && grep "^To: =?UTF-8?q?R=20=C3=84=20Cipient?= <rcipient@example.com>\$" hdrs9 ' @@ -234,35 +247,35 @@ check_patch () { } test_expect_success 'format.from=false' ' - git -c format.from=false format-patch --stdout master..side >patch && + git -c format.from=false format-patch --stdout main..side >patch && sed -e "/^\$/q" patch >hdrs && check_patch patch && ! grep "^From: C O Mitter <committer@example.com>\$" hdrs ' test_expect_success 'format.from=true' ' - git -c format.from=true format-patch --stdout master..side >patch && + git -c format.from=true format-patch --stdout main..side >patch && sed -e "/^\$/q" patch >hdrs && check_patch hdrs && grep "^From: C O Mitter <committer@example.com>\$" hdrs ' test_expect_success 'format.from with address' ' - git -c format.from="F R Om <from@example.com>" format-patch --stdout master..side >patch && + git -c format.from="F R Om <from@example.com>" format-patch --stdout main..side >patch && sed -e "/^\$/q" patch >hdrs && check_patch hdrs && grep "^From: F R Om <from@example.com>\$" hdrs ' test_expect_success '--no-from overrides format.from' ' - git -c format.from="F R Om <from@example.com>" format-patch --no-from --stdout master..side >patch && + git -c format.from="F R Om <from@example.com>" format-patch --no-from --stdout main..side >patch && sed -e "/^\$/q" patch >hdrs && check_patch hdrs && ! grep "^From: F R Om <from@example.com>\$" hdrs ' test_expect_success '--from overrides format.from' ' - git -c format.from="F R Om <from@example.com>" format-patch --from --stdout master..side >patch && + git -c format.from="F R Om <from@example.com>" format-patch --from --stdout main..side >patch && sed -e "/^\$/q" patch >hdrs && check_patch hdrs && ! grep "^From: F R Om <from@example.com>\$" hdrs @@ -271,7 +284,7 @@ test_expect_success '--from overrides format.from' ' test_expect_success '--no-to overrides config.to' ' git config --replace-all format.to \ "R E Cipient <rcipient@example.com>" && - git format-patch --no-to --stdout master..side >patch10 && + git format-patch --no-to --stdout main..side >patch10 && sed -e "/^\$/q" patch10 >hdrs10 && check_patch hdrs10 && ! grep "^To: R E Cipient <rcipient@example.com>\$" hdrs10 @@ -281,7 +294,7 @@ test_expect_success '--no-to and --to replaces config.to' ' git config --replace-all format.to \ "Someone <someone@out.there>" && git format-patch --no-to --to="Someone Else <else@out.there>" \ - --stdout master..side >patch11 && + --stdout main..side >patch11 && sed -e "/^\$/q" patch11 >hdrs11 && check_patch hdrs11 && ! grep "^To: Someone <someone@out.there>\$" hdrs11 && @@ -291,7 +304,7 @@ test_expect_success '--no-to and --to replaces config.to' ' test_expect_success '--no-cc overrides config.cc' ' git config --replace-all format.cc \ "C E Cipient <rcipient@example.com>" && - git format-patch --no-cc --stdout master..side >patch12 && + git format-patch --no-cc --stdout main..side >patch12 && sed -e "/^\$/q" patch12 >hdrs12 && check_patch hdrs12 && ! grep "^Cc: C E Cipient <rcipient@example.com>\$" hdrs12 @@ -300,7 +313,7 @@ test_expect_success '--no-cc overrides config.cc' ' test_expect_success '--no-add-header overrides config.headers' ' git config --replace-all format.headers \ "Header1: B E Cipient <rcipient@example.com>" && - git format-patch --no-add-header --stdout master..side >patch13 && + git format-patch --no-add-header --stdout main..side >patch13 && sed -e "/^\$/q" patch13 >hdrs13 && check_patch hdrs13 && ! grep "^Header1: B E Cipient <rcipient@example.com>\$" hdrs13 @@ -309,13 +322,67 @@ test_expect_success '--no-add-header overrides config.headers' ' test_expect_success 'multiple files' ' rm -rf patches/ && git checkout side && - git format-patch -o patches/ master && + git format-patch -o patches/ main && ls patches/0001-Side-changes-1.patch patches/0002-Side-changes-2.patch patches/0003-Side-changes-3-with-n-backslash-n-in-it.patch ' +test_expect_success 'filename length limit' ' + test_when_finished "rm -f 000*" && + rm -rf 000[1-9]-*.patch && + for len in 15 25 35 + do + git format-patch --filename-max-length=$len -3 side && + max=$( + for patch in 000[1-9]-*.patch + do + echo "$patch" | wc -c || exit 1 + done | + sort -nr | + head -n 1 + ) && + test $max -le $len || return 1 + done +' + +test_expect_success 'filename length limit from config' ' + test_when_finished "rm -f 000*" && + rm -rf 000[1-9]-*.patch && + for len in 15 25 35 + do + git -c format.filenameMaxLength=$len format-patch -3 side && + max=$( + for patch in 000[1-9]-*.patch + do + echo "$patch" | wc -c || exit 1 + done | + sort -nr | + head -n 1 + ) && + test $max -le $len || return 1 + done +' + +test_expect_success 'filename limit applies only to basename' ' + test_when_finished "rm -rf patches/" && + rm -rf patches/ && + for len in 15 25 35 + do + git format-patch -o patches --filename-max-length=$len -3 side && + max=$( + for patch in patches/000[1-9]-*.patch + do + echo "${patch#patches/}" | wc -c || exit 1 + done | + sort -nr | + head -n 1 + ) && + test $max -le $len || return 1 + done +' + test_expect_success 'reroll count' ' rm -fr patches && - git format-patch -o patches --cover-letter --reroll-count 4 master..side >list && + git format-patch -o patches --cover-letter --reroll-count 4 main..side >list && ! grep -v "^patches/v4-000[0-3]-" list && sed -n -e "/^Subject: /p" $(cat list) >subjects && ! grep -v "^Subject: \[PATCH v4 [0-3]/3\] " subjects @@ -323,12 +390,36 @@ test_expect_success 'reroll count' ' test_expect_success 'reroll count (-v)' ' rm -fr patches && - git format-patch -o patches --cover-letter -v4 master..side >list && + git format-patch -o patches --cover-letter -v4 main..side >list && ! grep -v "^patches/v4-000[0-3]-" list && sed -n -e "/^Subject: /p" $(cat list) >subjects && ! grep -v "^Subject: \[PATCH v4 [0-3]/3\] " subjects ' +test_expect_success 'reroll count (-v) with a fractional number' ' + rm -fr patches && + git format-patch -o patches --cover-letter -v4.4 main..side >list && + ! grep -v "^patches/v4.4-000[0-3]-" list && + sed -n -e "/^Subject: /p" $(cat list) >subjects && + ! grep -v "^Subject: \[PATCH v4.4 [0-3]/3\] " subjects +' + +test_expect_success 'reroll (-v) count with a non number' ' + rm -fr patches && + git format-patch -o patches --cover-letter -v4rev2 main..side >list && + ! grep -v "^patches/v4rev2-000[0-3]-" list && + sed -n -e "/^Subject: /p" $(cat list) >subjects && + ! grep -v "^Subject: \[PATCH v4rev2 [0-3]/3\] " subjects +' + +test_expect_success 'reroll (-v) count with a non-pathname character' ' + rm -fr patches && + git format-patch -o patches --cover-letter -v4---..././../--1/.2// main..side >list && + ! grep -v "patches/v4-\.-\.-\.-1-\.2-000[0-3]-" list && + sed -n -e "/^Subject: /p" $(cat list) >subjects && + ! grep -v "^Subject: \[PATCH v4---\.\.\./\./\.\./--1/\.2// [0-3]/3\] " subjects +' + check_threading () { expect="$1" && shift && @@ -359,84 +450,89 @@ EOF test_expect_success 'no threading' ' git checkout side && - check_threading expect.no-threading master + check_threading expect.no-threading main ' cat >expect.thread <<EOF --- -Message-Id: <0> +Message-ID: <0> --- -Message-Id: <1> +Message-ID: <1> In-Reply-To: <0> References: <0> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <0> References: <0> EOF test_expect_success 'thread' ' - check_threading expect.thread --thread master + check_threading expect.thread --thread main +' + +test_expect_success '--thread overrides format.thread=deep' ' + test_config format.thread deep && + check_threading expect.thread --thread main ' cat >expect.in-reply-to <<EOF --- -Message-Id: <0> +Message-ID: <0> In-Reply-To: <1> References: <1> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <1> References: <1> --- -Message-Id: <3> +Message-ID: <3> In-Reply-To: <1> References: <1> EOF test_expect_success 'thread in-reply-to' ' check_threading expect.in-reply-to --in-reply-to="<test.message>" \ - --thread master + --thread main ' cat >expect.cover-letter <<EOF --- -Message-Id: <0> +Message-ID: <0> --- -Message-Id: <1> +Message-ID: <1> In-Reply-To: <0> References: <0> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <0> References: <0> --- -Message-Id: <3> +Message-ID: <3> In-Reply-To: <0> References: <0> EOF test_expect_success 'thread cover-letter' ' - check_threading expect.cover-letter --cover-letter --thread master + check_threading expect.cover-letter --cover-letter --thread main ' cat >expect.cl-irt <<EOF --- -Message-Id: <0> +Message-ID: <0> In-Reply-To: <1> References: <1> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <0> References: <1> <0> --- -Message-Id: <3> +Message-ID: <3> In-Reply-To: <0> References: <1> <0> --- -Message-Id: <4> +Message-ID: <4> In-Reply-To: <0> References: <1> <0> @@ -444,44 +540,44 @@ EOF test_expect_success 'thread cover-letter in-reply-to' ' check_threading expect.cl-irt --cover-letter \ - --in-reply-to="<test.message>" --thread master + --in-reply-to="<test.message>" --thread main ' test_expect_success 'thread explicit shallow' ' check_threading expect.cl-irt --cover-letter \ - --in-reply-to="<test.message>" --thread=shallow master + --in-reply-to="<test.message>" --thread=shallow main ' cat >expect.deep <<EOF --- -Message-Id: <0> +Message-ID: <0> --- -Message-Id: <1> +Message-ID: <1> In-Reply-To: <0> References: <0> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <1> References: <0> <1> EOF test_expect_success 'thread deep' ' - check_threading expect.deep --thread=deep master + check_threading expect.deep --thread=deep main ' cat >expect.deep-irt <<EOF --- -Message-Id: <0> +Message-ID: <0> In-Reply-To: <1> References: <1> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <0> References: <1> <0> --- -Message-Id: <3> +Message-ID: <3> In-Reply-To: <2> References: <1> <0> @@ -490,23 +586,23 @@ EOF test_expect_success 'thread deep in-reply-to' ' check_threading expect.deep-irt --thread=deep \ - --in-reply-to="<test.message>" master + --in-reply-to="<test.message>" main ' cat >expect.deep-cl <<EOF --- -Message-Id: <0> +Message-ID: <0> --- -Message-Id: <1> +Message-ID: <1> In-Reply-To: <0> References: <0> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <1> References: <0> <1> --- -Message-Id: <3> +Message-ID: <3> In-Reply-To: <2> References: <0> <1> @@ -514,27 +610,27 @@ References: <0> EOF test_expect_success 'thread deep cover-letter' ' - check_threading expect.deep-cl --cover-letter --thread=deep master + check_threading expect.deep-cl --cover-letter --thread=deep main ' cat >expect.deep-cl-irt <<EOF --- -Message-Id: <0> +Message-ID: <0> In-Reply-To: <1> References: <1> --- -Message-Id: <2> +Message-ID: <2> In-Reply-To: <0> References: <1> <0> --- -Message-Id: <3> +Message-ID: <3> In-Reply-To: <2> References: <1> <0> <2> --- -Message-Id: <4> +Message-ID: <4> In-Reply-To: <3> References: <1> <0> @@ -544,27 +640,27 @@ EOF test_expect_success 'thread deep cover-letter in-reply-to' ' check_threading expect.deep-cl-irt --cover-letter \ - --in-reply-to="<test.message>" --thread=deep master + --in-reply-to="<test.message>" --thread=deep main ' test_expect_success 'thread via config' ' test_config format.thread true && - check_threading expect.thread master + check_threading expect.thread main ' test_expect_success 'thread deep via config' ' test_config format.thread deep && - check_threading expect.deep master + check_threading expect.deep main ' test_expect_success 'thread config + override' ' test_config format.thread deep && - check_threading expect.thread --thread master + check_threading expect.thread --thread main ' test_expect_success 'thread config + --no-thread' ' test_config format.thread deep && - check_threading expect.no-threading --no-thread master + check_threading expect.no-threading --no-thread main ' test_expect_success 'excessive subject' ' @@ -572,12 +668,12 @@ test_expect_success 'excessive subject' ' git checkout side && before=$(git hash-object file) && before=$(git rev-parse --short $before) && - for i in 5 6 1 2 3 A 4 B C 7 8 9 10 D E F; do echo "$i"; done >>file && + test_write_lines 5 6 1 2 3 A 4 B C 7 8 9 10 D E F >>file && after=$(git hash-object file) && after=$(git rev-parse --short $after) && git update-index file && git commit -m "This is an excessively long subject line for a message due to the habit some projects have of not having a short, one-line subject at the start of the commit message, but rather sticking a whole paragraph right at the start as the only thing in the commit message. It had better not become the filename for the patch." && - git format-patch -o patches/ master..side && + git format-patch -o patches/ main..side && ls patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch ' @@ -831,25 +927,54 @@ echo "fatal: --check does not make sense" >expect.check test_expect_success 'options no longer allowed for format-patch' ' test_must_fail git format-patch --name-only 2>output && - test_i18ncmp expect.name-only output && + test_cmp expect.name-only output && test_must_fail git format-patch --name-status 2>output && - test_i18ncmp expect.name-status output && + test_cmp expect.name-status output && test_must_fail git format-patch --check 2>output && - test_i18ncmp expect.check output + test_cmp expect.check output ' test_expect_success 'format-patch --numstat should produce a patch' ' - git format-patch --numstat --stdout master..side >output && + git format-patch --numstat --stdout main..side >output && grep "^diff --git a/" output >diff && test_line_count = 5 diff ' test_expect_success 'format-patch -- <path>' ' - git format-patch master..side -- file 2>error && - ! grep "Use .--" error + rm -f *.patch && + git checkout -b pathspec main && + + echo file_a 1 >file_a && + echo file_b 1 >file_b && + git add file_a file_b && + git commit -m pathspec_initial && + + echo file_a 2 >>file_a && + git add file_a && + git commit -m pathspec_a && + + echo file_b 2 >>file_b && + git add file_b && + git commit -m pathspec_b && + + echo file_a 3 >>file_a && + echo file_b 3 >>file_b && + git add file_a file_b && + git commit -m pathspec_ab && + + cat >expect <<-\EOF && + 0001-pathspec_initial.patch + 0002-pathspec_a.patch + 0003-pathspec_ab.patch + EOF + + git format-patch main..pathspec -- file_a >output && + test_cmp expect output && + ! grep file_b *.patch ' test_expect_success 'format-patch --ignore-if-in-upstream HEAD' ' + git checkout side && git format-patch --ignore-if-in-upstream HEAD ' @@ -1005,7 +1130,7 @@ test_expect_success TTY 'format-patch --stdout paginates' ' test_expect_success 'format-patch handles multi-line subjects' ' rm -rf patches/ && echo content >>file && - for i in one two three; do echo $i; done >msg && + test_write_lines one two three >msg && git add file && git commit -F msg && git format-patch -o patches -1 && @@ -1017,7 +1142,7 @@ test_expect_success 'format-patch handles multi-line subjects' ' test_expect_success 'format-patch handles multi-line encoded subjects' ' rm -rf patches/ && echo content >>file && - for i in en två tre; do echo $i; done >msg && + test_write_lines en två tre >msg && git add file && git commit -F msg && git format-patch -o patches -1 && @@ -1248,7 +1373,27 @@ test_expect_success '--rfc' ' Subject: [RFC PATCH 1/1] header with . in it EOF git format-patch -n -1 --stdout --rfc >patch && - grep ^Subject: patch >actual && + grep "^Subject:" patch >actual && + test_cmp expect actual +' + +test_expect_success '--rfc does not overwrite prefix' ' + cat >expect <<-\EOF && + Subject: [RFC PATCH foobar 1/1] header with . in it + EOF + git -c format.subjectPrefix="PATCH foobar" \ + format-patch -n -1 --stdout --rfc >patch && + grep "^Subject:" patch >actual && + test_cmp expect actual +' + +test_expect_success '--rfc is argument order independent' ' + cat >expect <<-\EOF && + Subject: [RFC PATCH foobar 1/1] header with . in it + EOF + git format-patch -n -1 --stdout --rfc \ + --subject-prefix="PATCH foobar" >patch && + grep "^Subject:" patch >actual && test_cmp expect actual ' @@ -1290,6 +1435,43 @@ test_expect_success '--from omits redundant in-body header' ' test_cmp expect patch.head ' +test_expect_success 'with --force-in-body-from, redundant in-body from is kept' ' + git format-patch --force-in-body-from \ + -1 --stdout --from="A U Thor <author@example.com>" >patch && + cat >expect <<-\EOF && + From: A U Thor <author@example.com> + + From: A U Thor <author@example.com> + + EOF + sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head && + test_cmp expect patch.head +' + +test_expect_success 'format.forceInBodyFrom, equivalent to --force-in-body-from' ' + git -c format.forceInBodyFrom=yes format-patch \ + -1 --stdout --from="A U Thor <author@example.com>" >patch && + cat >expect <<-\EOF && + From: A U Thor <author@example.com> + + From: A U Thor <author@example.com> + + EOF + sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head && + test_cmp expect patch.head +' + +test_expect_success 'format.forceInBodyFrom, equivalent to --force-in-body-from' ' + git -c format.forceInBodyFrom=yes format-patch --no-force-in-body-from \ + -1 --stdout --from="A U Thor <author@example.com>" >patch && + cat >expect <<-\EOF && + From: A U Thor <author@example.com> + + EOF + sed -ne "/^From:/p; /^$/p; /^---$/q" patch >patch.head && + test_cmp expect patch.head +' + test_expect_success 'in-body headers trigger content encoding' ' test_env GIT_AUTHOR_NAME="éxötìc" test_commit exotic && test_when_finished "git reset --hard HEAD^" && @@ -1310,7 +1492,7 @@ append_signoff() C=$(git commit-tree HEAD^^{tree} -p HEAD) && git format-patch --stdout --signoff $C^..$C >append_signoff.patch && sed -n -e "1,/^---$/p" append_signoff.patch | - egrep -n "^Subject|Sign|^$" + grep -E -n "^Subject|Sign|^$" } test_expect_success 'signoff: commit with no body' ' @@ -1602,13 +1784,26 @@ test_expect_success 'format patch ignores color.ui' ' test_cmp expect actual ' +test_expect_success 'format patch respects diff.relative' ' + rm -rf subdir && + mkdir subdir && + echo other content >subdir/file2 && + git add subdir/file2 && + git commit -F msg && + test_unconfig diff.relative && + git format-patch --relative=subdir --stdout -1 >expect && + test_config diff.relative true && + git -C subdir format-patch --stdout -1 >actual && + test_cmp expect actual +' + test_expect_success 'cover letter with invalid --cover-from-description and config' ' test_config branch.rebuild-1.description "config subject body" && - test_must_fail git format-patch --cover-letter --cover-from-description garbage master && + test_must_fail git format-patch --cover-letter --cover-from-description garbage main && test_config format.coverFromDescription garbage && - test_must_fail git format-patch --cover-letter master + test_must_fail git format-patch --cover-letter main ' test_expect_success 'cover letter with format.coverFromDescription = default' ' @@ -1617,7 +1812,7 @@ test_expect_success 'cover letter with format.coverFromDescription = default' ' body" && test_config format.coverFromDescription default && git checkout rebuild-1 && - git format-patch --stdout --cover-letter master >actual && + git format-patch --stdout --cover-letter main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && grep "^config subject$" actual && @@ -1629,7 +1824,7 @@ test_expect_success 'cover letter with --cover-from-description default' ' body" && git checkout rebuild-1 && - git format-patch --stdout --cover-letter --cover-from-description default master >actual && + git format-patch --stdout --cover-letter --cover-from-description default main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && grep "^config subject$" actual && @@ -1642,7 +1837,7 @@ test_expect_success 'cover letter with format.coverFromDescription = none' ' body" && test_config format.coverFromDescription none && git checkout rebuild-1 && - git format-patch --stdout --cover-letter master >actual && + git format-patch --stdout --cover-letter main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && grep "^\*\*\* BLURB HERE \*\*\*$" actual && ! grep "^config subject$" actual && @@ -1654,7 +1849,7 @@ test_expect_success 'cover letter with --cover-from-description none' ' body" && git checkout rebuild-1 && - git format-patch --stdout --cover-letter --cover-from-description none master >actual && + git format-patch --stdout --cover-letter --cover-from-description none main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && grep "^\*\*\* BLURB HERE \*\*\*$" actual && ! grep "^config subject$" actual && @@ -1667,7 +1862,7 @@ test_expect_success 'cover letter with format.coverFromDescription = message' ' body" && test_config format.coverFromDescription message && git checkout rebuild-1 && - git format-patch --stdout --cover-letter master >actual && + git format-patch --stdout --cover-letter main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && grep "^config subject$" actual && @@ -1679,7 +1874,7 @@ test_expect_success 'cover letter with --cover-from-description message' ' body" && git checkout rebuild-1 && - git format-patch --stdout --cover-letter --cover-from-description message master >actual && + git format-patch --stdout --cover-letter --cover-from-description message main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && grep "^config subject$" actual && @@ -1692,7 +1887,7 @@ test_expect_success 'cover letter with format.coverFromDescription = subject' ' body" && test_config format.coverFromDescription subject && git checkout rebuild-1 && - git format-patch --stdout --cover-letter master >actual && + git format-patch --stdout --cover-letter main >actual && grep "^Subject: \[PATCH 0/2\] config subject$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && ! grep "^config subject$" actual && @@ -1704,20 +1899,30 @@ test_expect_success 'cover letter with --cover-from-description subject' ' body" && git checkout rebuild-1 && - git format-patch --stdout --cover-letter --cover-from-description subject master >actual && + git format-patch --stdout --cover-letter --cover-from-description subject main >actual && grep "^Subject: \[PATCH 0/2\] config subject$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && ! grep "^config subject$" actual && grep "^body$" actual ' +test_expect_success 'cover letter with --cover-from-description subject (UTF-8 subject line)' ' + test_config branch.rebuild-1.description "Café? + +body" && + git checkout rebuild-1 && + git format-patch --stdout --cover-letter --cover-from-description subject --encode-email-headers main >actual && + grep "^Subject: \[PATCH 0/2\] =?UTF-8?q?Caf=C3=A9=3F?=$" actual && + ! grep "Café" actual +' + test_expect_success 'cover letter with format.coverFromDescription = auto (short subject line)' ' test_config branch.rebuild-1.description "config subject body" && test_config format.coverFromDescription auto && git checkout rebuild-1 && - git format-patch --stdout --cover-letter master >actual && + git format-patch --stdout --cover-letter main >actual && grep "^Subject: \[PATCH 0/2\] config subject$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && ! grep "^config subject$" actual && @@ -1729,7 +1934,7 @@ test_expect_success 'cover letter with --cover-from-description auto (short subj body" && git checkout rebuild-1 && - git format-patch --stdout --cover-letter --cover-from-description auto master >actual && + git format-patch --stdout --cover-letter --cover-from-description auto main >actual && grep "^Subject: \[PATCH 0/2\] config subject$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && ! grep "^config subject$" actual && @@ -1742,7 +1947,7 @@ test_expect_success 'cover letter with format.coverFromDescription = auto (long body" && test_config format.coverFromDescription auto && git checkout rebuild-1 && - git format-patch --stdout --cover-letter master >actual && + git format-patch --stdout --cover-letter main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && grep "^this is a really long first line and it is over 100 characters long which is the threshold for long subjects$" actual && @@ -1754,7 +1959,7 @@ test_expect_success 'cover letter with --cover-from-description auto (long subje body" && git checkout rebuild-1 && - git format-patch --stdout --cover-letter --cover-from-description auto master >actual && + git format-patch --stdout --cover-letter --cover-from-description auto main >actual && grep "^Subject: \[PATCH 0/2\] \*\*\* SUBJECT HERE \*\*\*$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && grep "^this is a really long first line and it is over 100 characters long which is the threshold for long subjects$" actual && @@ -1767,7 +1972,7 @@ test_expect_success 'cover letter with command-line --cover-from-description ove body" && test_config format.coverFromDescription none && git checkout rebuild-1 && - git format-patch --stdout --cover-letter --cover-from-description subject master >actual && + git format-patch --stdout --cover-letter --cover-from-description subject main >actual && grep "^Subject: \[PATCH 0/2\] config subject$" actual && ! grep "^\*\*\* BLURB HERE \*\*\*$" actual && ! grep "^config subject$" actual && @@ -1777,7 +1982,7 @@ body" && test_expect_success 'cover letter using branch description (1)' ' git checkout rebuild-1 && test_config branch.rebuild-1.description hello && - git format-patch --stdout --cover-letter master >actual && + git format-patch --stdout --cover-letter main >actual && grep hello actual ' @@ -1791,14 +1996,14 @@ test_expect_success 'cover letter using branch description (2)' ' test_expect_success 'cover letter using branch description (3)' ' git checkout rebuild-1 && test_config branch.rebuild-1.description hello && - git format-patch --stdout --cover-letter ^master rebuild-1 >actual && + git format-patch --stdout --cover-letter ^main rebuild-1 >actual && grep hello actual ' test_expect_success 'cover letter using branch description (4)' ' git checkout rebuild-1 && test_config branch.rebuild-1.description hello && - git format-patch --stdout --cover-letter master.. >actual && + git format-patch --stdout --cover-letter main.. >actual && grep hello actual ' @@ -1816,6 +2021,20 @@ test_expect_success 'cover letter using branch description (6)' ' grep hello actual ' +test_expect_success 'cover letter with --description-file' ' + test_when_finished "rm -f description.txt" && + cat >description.txt <<-\EOF && + subject from file + + body from file + EOF + git checkout rebuild-1 && + git format-patch --stdout --cover-letter --cover-from-description auto \ + --description-file description.txt main >actual && + grep "^Subject: \[PATCH 0/2\] subject from file$" actual && + grep "^body from file$" actual +' + test_expect_success 'cover letter with nothing' ' git format-patch --stdout --cover-letter >actual && test_line_count = 0 actual @@ -1865,8 +2084,8 @@ test_expect_success 'From line has expected format' ' test_expect_success 'format-patch -o with no leading directories' ' rm -fr patches && - git format-patch -o patches master..side && - count=$(git rev-list --count master..side) && + git format-patch -o patches main..side && + count=$(git rev-list --count main..side) && ls patches >list && test_line_count = $count list ' @@ -1874,16 +2093,16 @@ test_expect_success 'format-patch -o with no leading directories' ' test_expect_success 'format-patch -o with leading existing directories' ' rm -rf existing-dir && mkdir existing-dir && - git format-patch -o existing-dir/patches master..side && - count=$(git rev-list --count master..side) && + git format-patch -o existing-dir/patches main..side && + count=$(git rev-list --count main..side) && ls existing-dir/patches >list && test_line_count = $count list ' test_expect_success 'format-patch -o with leading non-existing directories' ' rm -rf non-existing-dir && - git format-patch -o non-existing-dir/patches master..side && - count=$(git rev-list --count master..side) && + git format-patch -o non-existing-dir/patches main..side && + count=$(git rev-list --count main..side) && test_path_is_dir non-existing-dir && ls non-existing-dir/patches >list && test_line_count = $count list @@ -1892,8 +2111,8 @@ test_expect_success 'format-patch -o with leading non-existing directories' ' test_expect_success 'format-patch format.outputDirectory option' ' test_config format.outputDirectory patches && rm -fr patches && - git format-patch master..side && - count=$(git rev-list --count master..side) && + git format-patch main..side && + count=$(git rev-list --count main..side) && ls patches >list && test_line_count = $count list ' @@ -1901,11 +2120,44 @@ test_expect_success 'format-patch format.outputDirectory option' ' test_expect_success 'format-patch -o overrides format.outputDirectory' ' test_config format.outputDirectory patches && rm -fr patches patchset && - git format-patch master..side -o patchset && + git format-patch main..side -o patchset && test_path_is_missing patches && test_path_is_dir patchset ' +test_expect_success 'format-patch forbids multiple outputs' ' + rm -fr outfile outdir && + test_must_fail \ + git format-patch --stdout --output-directory=outdir && + test_must_fail \ + git format-patch --stdout --output=outfile && + test_must_fail \ + git format-patch --output=outfile --output-directory=outdir +' + +test_expect_success 'configured outdir does not conflict with output options' ' + rm -fr outfile outdir && + test_config format.outputDirectory outdir && + git format-patch --stdout && + test_path_is_missing outdir && + git format-patch --output=outfile && + test_path_is_missing outdir +' + +test_expect_success 'format-patch --output' ' + rm -fr outfile && + git format-patch -3 --stdout HEAD >expect && + git format-patch -3 --output=outfile HEAD && + test_cmp expect outfile +' + +test_expect_success 'format-patch --cover-letter --output' ' + rm -fr outfile && + git format-patch --cover-letter -3 --stdout HEAD >expect && + git format-patch --cover-letter -3 --output=outfile HEAD && + test_cmp expect outfile +' + test_expect_success 'format-patch --base' ' git checkout patchid && @@ -1965,14 +2217,14 @@ test_expect_success 'format-patch --base errors out when base commit is not ance # ------------W # # If "format-patch Z..X" is given, P and Z can not be specified as the base commit - git checkout -b topic1 master && + git checkout -b topic1 main && git rev-parse HEAD >commit-id-base && test_commit P && git rev-parse HEAD >commit-id-P && test_commit Z && git rev-parse HEAD >commit-id-Z && test_commit Y && - git checkout -b topic2 master && + git checkout -b topic2 main && test_commit W && git merge topic1 && test_commit X && @@ -1985,7 +2237,7 @@ test_expect_success 'format-patch --base errors out when base commit is not ance ' test_expect_success 'format-patch --base=auto' ' - git checkout -b upstream master && + git checkout -b upstream main && git checkout -b local upstream && git branch --set-upstream-to=upstream && test_commit N1 && @@ -2006,11 +2258,11 @@ test_expect_success 'format-patch errors out when history involves criss-cross' # \ / \ # C---M2---E # - git checkout master && + git checkout main && test_commit A && - git checkout -b xb master && + git checkout -b xb main && test_commit B && - git checkout -b xc master && + git checkout -b xc main && test_commit C && git checkout -b xbc xb -- && git merge xc && @@ -2024,6 +2276,12 @@ test_expect_success 'format-patch errors out when history involves criss-cross' test_must_fail git format-patch --base=auto -1 ' +test_expect_success 'format-patch format.useAutoBase whenAble history involves criss-cross' ' + test_config format.useAutoBase whenAble && + git format-patch -1 >patch && + ! grep "^base-commit:" patch +' + test_expect_success 'format-patch format.useAutoBase option' ' git checkout local && test_config format.useAutoBase true && @@ -2034,6 +2292,16 @@ test_expect_success 'format-patch format.useAutoBase option' ' test_cmp expect actual ' +test_expect_success 'format-patch format.useAutoBase option with whenAble' ' + git checkout local && + test_config format.useAutoBase whenAble && + git format-patch --stdout -1 >patch && + grep "^base-commit:" patch >actual && + git rev-parse upstream >commit-id-base && + echo "base-commit: $(cat commit-id-base)" >expect && + test_cmp expect actual +' + test_expect_success 'format-patch --base overrides format.useAutoBase' ' test_config format.useAutoBase true && git format-patch --stdout --base=HEAD~1 -1 >patch && @@ -2049,6 +2317,12 @@ test_expect_success 'format-patch --no-base overrides format.useAutoBase' ' ! grep "^base-commit:" patch ' +test_expect_success 'format-patch --no-base overrides format.useAutoBase whenAble' ' + test_config format.useAutoBase whenAble && + git format-patch --stdout --no-base -1 >patch && + ! grep "^base-commit:" patch +' + test_expect_success 'format-patch --base with --attach' ' git format-patch --attach=mimemime --stdout --base=HEAD~ -1 >patch && sed -n -e "/^base-commit:/s/.*/1/p" -e "/^---*mimemime--$/s/.*/2/p" \ @@ -2059,14 +2333,32 @@ test_expect_success 'format-patch --base with --attach' ' test_expect_success 'format-patch --attach cover-letter only is non-multipart' ' test_when_finished "rm -fr patches" && git format-patch -o patches --cover-letter --attach=mimemime --base=HEAD~ -1 && - ! egrep "^--+mimemime" patches/0000*.patch && - egrep "^--+mimemime$" patches/0001*.patch >output && + ! grep -E "^--+mimemime" patches/0000*.patch && + grep -E "^--+mimemime$" patches/0001*.patch >output && test_line_count = 2 output && - egrep "^--+mimemime--$" patches/0001*.patch >output && + grep -E "^--+mimemime--$" patches/0001*.patch >output && test_line_count = 1 output ' -test_expect_success 'format-patch --pretty=mboxrd' ' +test_expect_success 'format-patch with format.attach' ' + test_when_finished "rm -fr patches" && + separator=attachment-separator && + test_config format.attach "$separator" && + filename=$(git format-patch -o patches -1) && + grep "^Content-Type: multipart/.*$separator" "$filename" +' + +test_expect_success 'format-patch with format.attach=disabled' ' + test_when_finished "rm -fr patches" && + separator=attachment-separator && + test_config_global format.attach "$separator" && + test_config format.attach "" && + filename=$(git format-patch -o patches -1) && + # The output should not even declare content type for text/plain. + ! grep "^Content-Type: multipart/" "$filename" +' + +test_expect_success '-c format.mboxrd format-patch' ' sp=" " && cat >msg <<-INPUT_END && mboxrd should escape the body @@ -2101,14 +2393,16 @@ test_expect_success 'format-patch --pretty=mboxrd' ' INPUT_END C=$(git commit-tree HEAD^^{tree} -p HEAD <msg) && - git format-patch --pretty=mboxrd --stdout -1 $C~1..$C >patch && + git -c format.mboxrd format-patch --stdout -1 $C~1..$C >patch && + git format-patch --pretty=mboxrd --stdout -1 $C~1..$C >compat && + test_cmp patch compat && git grep -h --no-index -A11 \ "^>From could trip up a loose mbox parser" patch >actual && test_cmp expect actual ' test_expect_success 'interdiff: setup' ' - git checkout -b boop master && + git checkout -b boop main && test_commit fnorp blorp && test_commit fleep blorp ' @@ -2119,15 +2413,25 @@ test_expect_success 'interdiff: cover-letter' ' --q EOF git format-patch --cover-letter --interdiff=boop~2 -1 boop && - test_i18ngrep "^Interdiff:$" 0000-cover-letter.patch && - test_i18ngrep ! "^Interdiff:$" 0001-fleep.patch && + test_grep "^Interdiff:$" 0000-cover-letter.patch && + test_grep ! "^Interdiff:$" 0001-fleep.patch && sed "1,/^@@ /d; /^-- $/q" 0000-cover-letter.patch >actual && test_cmp expect actual ' test_expect_success 'interdiff: reroll-count' ' git format-patch --cover-letter --interdiff=boop~2 -v2 -1 boop && - test_i18ngrep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch + test_grep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch +' + +test_expect_success 'interdiff: reroll-count with a non-integer' ' + git format-patch --cover-letter --interdiff=boop~2 -v2.2 -1 boop && + test_grep "^Interdiff:$" v2.2-0000-cover-letter.patch +' + +test_expect_success 'interdiff: reroll-count with a integer' ' + git format-patch --cover-letter --interdiff=boop~2 -v2 -1 boop && + test_grep "^Interdiff ..* v1:$" v2-0000-cover-letter.patch ' test_expect_success 'interdiff: solo-patch' ' @@ -2136,9 +2440,25 @@ test_expect_success 'interdiff: solo-patch' ' EOF git format-patch --interdiff=boop~2 -1 boop && - test_i18ngrep "^Interdiff:$" 0001-fleep.patch && + test_grep "^Interdiff:$" 0001-fleep.patch && sed "1,/^ @@ /d; /^$/q" 0001-fleep.patch >actual && test_cmp expect actual ' +test_expect_success 'format-patch does not respect diff.noprefix' ' + git -c diff.noprefix format-patch -1 --stdout >actual && + grep "^--- a/blorp" actual +' + +test_expect_success 'format-patch respects format.noprefix' ' + git -c format.noprefix format-patch -1 --stdout >actual && + grep "^--- blorp" actual +' + +test_expect_success 'format-patch --default-prefix overrides format.noprefix' ' + git -c format.noprefix \ + format-patch -1 --default-prefix --stdout >actual && + grep "^--- a/blorp" actual +' + test_done |