git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v5 2/2] format-patch: assume --cover-letter for diff in multi-patch series

From
Rubén Justo <rjusto@gmail.com>
Date
Jun 7, 2024, 20:55 UTC
Message-ID
<23bac6b9-1bb1-43fa-be49-c77711b0ece8@gmail.com>
In-Reply-To
<91014071-13f2-46d3-aae7-75c8ea036786@gmail.com>

When we deal with a multi-patch series in git-format-patch(1), if we see `--interdiff` or `--range-diff` but no `--cover-letter`, we return with an error, saying:

    fatal: --range-diff requires --cover-letter or single patch
or:
    fatal: --interdiff requires --cover-letter or single patch

This makes sense because the cover-letter is where we place the diff from the previous version.

However, considering that `format-patch` generates a multi-patch as needed, let's adopt a similar "cover as necessary" approach when using `--interdiff` or `--range-diff`.

Therefore, relax the requirement for an explicit `--cover-letter` in a multi-patch series when the user says `--iterdiff` or `--range-diff`.

Still, if only to return the error, respect "format.coverLetter=no" and `--no-cover-letter`.

Signed-off-by: Rubén Justo <rjusto@gmail.com>
---
 builtin/log.c           |  2 ++
 t/t3206-range-diff.sh   | 14 ++++++++++++++
 t/t4014-format-patch.sh | 15 +++++++++++++++
 3 files changed, 31 insertions(+)
diff --git a/builtin/log.c b/builtin/log.c
index c0a8bb95e9..d61cdbf304 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -2255,6 +2255,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 	if (cover_letter == -1) {
 		if (config_cover_letter == COVER_AUTO)
 			cover_letter = (total > 1);
+		else if ((idiff_prev.nr || rdiff_prev) && (total > 1))
+			cover_letter = (config_cover_letter != COVER_OFF);
 		else
 			cover_letter = (config_cover_letter == COVER_ON);
 	}
diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh
index 7b05bf3961..a767c3520e 100755
--- a/t/t3206-range-diff.sh
+++ b/t/t3206-range-diff.sh
@@ -545,6 +545,20 @@ do
 	'
 done
 
+test_expect_success "--range-diff implies --cover-letter for multi-patch series" '
+	test_when_finished "rm -f v2-000?-*" &&
+	git format-patch -v2 --range-diff=topic main..unmodified &&
+	test_grep "^Range-diff against v1:$" v2-0000-cover-letter.patch
+'
+
+test_expect_success "explicit --no-cover-letter defeats implied --cover-letter" '
+	test_when_finished "rm -f v2-000?-*" &&
+	test_must_fail git format-patch --no-cover-letter \
+		-v2 --range-diff=topic main..unmodified &&
+	test_must_fail git -c format.coverLetter=no format-patch \
+		-v2 --range-diff=topic main..unmodified
+'
+
 test_expect_success 'format-patch --range-diff as commentary' '
 	git format-patch --range-diff=HEAD~1 HEAD~1 >actual &&
 	test_when_finished "rm 0001-*" &&
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index a252c8fbf1..1088c435e0 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -2445,6 +2445,21 @@ test_expect_success 'interdiff: solo-patch' '
 	test_cmp expect actual
 '
 
+test_expect_success 'interdiff: multi-patch, implicit --cover-letter' '
+	test_when_finished "rm -f v23-0*.patch" &&
+	git format-patch --interdiff=boop~2 -2 -v23 &&
+	test_grep "^Interdiff against v22:$" v23-0000-cover-letter.patch &&
+	test_cmp expect actual
+'
+
+test_expect_success 'interdiff: explicit --no-cover-letter defeats implied --cover-letter' '
+	test_when_finished "rm -f v23-0*.patch" &&
+	test_must_fail git format-patch --no-cover-letter \
+		--interdiff=boop~2 -2 -v23 &&
+	test_must_fail git -c format.coverLetter=no format-patch \
+		--interdiff=boop~2 -2 -v23
+'
+
 test_expect_success 'format-patch does not respect diff.noprefix' '
 	git -c diff.noprefix format-patch -1 --stdout >actual &&
 	grep "^--- a/blorp" actual
-- 
2.45.2.23.gd1e9f8561b
Previous: Rubén JustoNext: Junio C Hamano
Message 20 of 21 in “format-patch: assume --cover-letter for diff in multi-patch series”
  1. format-patch: assume --cover-letter for diff in multi-patch seriesRubén Justo, Jun 3, 2024
  2. Patrick SteinhardtJun 4, 2024
  3. Junio C HamanoJun 4, 2024
  4. Rubén JustoJun 5, 2024
  5. Junio C HamanoJun 5, 2024
  6. Junio C HamanoJun 5, 2024
  7. format-patch: assume --cover-letter for diff in multi-patch seriesRubén Justo, Jun 5, 2024
  8. Junio C HamanoJun 5, 2024
  9. Rubén JustoJun 5, 2024
  10. Junio C HamanoJun 5, 2024
  11. Rubén JustoJun 5, 2024
  12. 0/2 format-patch: assume --cover-letter for diff in multi-patch seriesRubén Justo, Jun 7, 2024
  13. 1/2 t4014: cleanups in a few testsRubén Justo, Jun 7, 2024
  14. Junio C HamanoJun 7, 2024
  15. Rubén JustoJun 7, 2024
  16. Junio C HamanoJun 7, 2024
  17. 2/2 format-patch: assume --cover-letter for diff in multi-patch seriesRubén Justo, Jun 7, 2024
  18. 0/2 format-patch: assume --cover-letter for diff in multi-patch seriesRubén Justo, Jun 7, 2024
  19. 1/2 t4014: cleanups in a few testsRubén Justo, Jun 7, 2024
  20. 2/2 format-patch: assume --cover-letter for diff in multi-patch seriesRubén Justo, Jun 7, 2024
  21. Junio C HamanoJun 7, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.