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

[PATCH] format-patch: use default diff format even with patch options

From
Jeff King <peff@peff.net>
Date
Aug 25, 2008, 02:10 UTC
Message-ID
<20080825021029.GA28355@coredump.intra.peff.net>
In-Reply-To
<20080825013837.GA17201@coredump.intra.peff.net>
On Sun, Aug 24, 2008 at 09:38:37PM -0400, Jeff King wrote:
> This was generated with -U5 to make the first hunk easier to read.

And while doing that, I detected another bug. Or maybe a feature, depending on your perspective.

-- >8 -- format-patch: use default diff format even with patch options

Previously, running "git format-patch -U5" would cause the low-level diff machinery to change the diff output format from "not specified" to "patch". This meant that format-patch thought we explicitly specified a diff output format, and would not use the default format. The resulting message lacked both the diffstat and the summary, as well as the separating "---".

Now format-patch explicitly checks for this condition and uses the default. That means that "git format-patch -p" will now have the "-p" ignored.

Signed-off-by: Jeff King <peff@peff.net>
---
Maybe this is intentional, and that by asking for "-U" I am explicitly
saying "I really want the patch format, not the default." But I think
this more reasonably maps to what the user expects.

I am a little uncomfortable hurting anyone who thought that "format-patch -p" was a good idea. OTOH:

  1. I have to question why they were using format-patch in the first
     place. Probably git-log --pretty=email would be a better fit.
  2. Their mails were already broken, since the presence of the diffstat
     is what triggers the "---" divider.
 builtin-log.c           |    3 ++-
 t/t4014-format-patch.sh |   25 +++++++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletions(-)
diff --git a/builtin-log.c b/builtin-log.c
index 9204ffd..1d3c5cb 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -932,7 +932,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 	if (argc > 1)
 		die ("unrecognized argument: %s", argv[1]);
 
-	if (!rev.diffopt.output_format)
+	if (!rev.diffopt.output_format
+		|| rev.diffopt.output_format == DIFF_FORMAT_PATCH)
 		rev.diffopt.output_format = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_SUMMARY | DIFF_FORMAT_PATCH;
 
 	if (!DIFF_OPT_TST(&rev.diffopt, TEXT) && !no_binary_diff)
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 7fe853c..9d99dc2 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -230,4 +230,29 @@ test_expect_success 'shortlog of cover-letter wraps overly-long onelines' '
 
 '
 
+cat > expect << EOF
+---
+ file |   16 ++++++++++++++++
+ 1 files changed, 16 insertions(+), 0 deletions(-)
+
+diff --git a/file b/file
+index 40f36c6..2dc5c23 100644
+--- a/file
++++ b/file
+@@ -13,4 +13,20 @@ C
+ 10
+ D
+ E
+ F
++5
+EOF
+
+test_expect_success 'format-patch respects -U' '
+
+	git format-patch -U4 -2 &&
+	sed -e "1,/^$/d" -e "/^+5/q" < 0001-This-is-an-excessively-long-subject-line-for-a-messa.patch > output &&
+	test_cmp expect output
+
+'
+
 test_done
-- 
1.6.0.150.gc3242.dirty
Previous: Jeff KingNext: Junio C Hamano
Message 23 of 32 in “allow user aliases for the --author parameter”
  1. allow user aliases for the --author parameterMichael J Gruber, Aug 21, 2008
  2. Miklos VajnaAug 21, 2008
  3. Michael J GruberAug 21, 2008
  4. Alex RiesenAug 21, 2008
  5. Alex RiesenAug 21, 2008
  6. Jeff KingAug 21, 2008
  7. Junio C HamanoAug 22, 2008
  8. Michael J GruberAug 22, 2008
  9. Jeff KingAug 22, 2008
  10. Junio C HamanoAug 22, 2008
  11. Jeff KingAug 22, 2008
  12. allow user aliases for the --author parameterMichael J Gruber, Aug 26, 2008
  13. Junio C HamanoAug 26, 2008
  14. Jeff KingAug 27, 2008
  15. Junio C HamanoAug 27, 2008
  16. Michael J GruberAug 27, 2008
  17. Jeff KingAug 27, 2008
  18. Jeff KingAug 27, 2008
  19. Junio C HamanoAug 27, 2008
  20. Pedro MeloAug 24, 2008
  21. Jeff KingAug 24, 2008
  22. fix "git log -i --grep"Jeff King, Aug 25, 2008
  23. format-patch: use default diff format even with patch optionsJeff King, Aug 25, 2008
  24. Junio C HamanoAug 25, 2008
  25. Junio C HamanoAug 25, 2008
  26. Jeff KingAug 25, 2008
  27. Jeff KingAug 25, 2008
  28. Junio C HamanoAug 25, 2008
  29. Jeff KingAug 27, 2008
  30. Michael J GruberAug 28, 2008
  31. Jeff KingAug 28, 2008
  32. Jeff KingAug 28, 2008

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.