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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jeff King committed
Aug 24, 2008 at 22:10 UTC
68daa64df2363f848d818dda9fc414511d9330da
2 files changed
+27
-1
builtin-log.c
+2
-1
@@ -932,7 +932,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
932
if (argc > 1)
933
die ("unrecognized argument: %s", argv[1]);
934
935
- if (!rev.diffopt.output_format)
935
+ if (!rev.diffopt.output_format
936
+ || rev.diffopt.output_format == DIFF_FORMAT_PATCH)
937
rev.diffopt.output_format = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_SUMMARY | DIFF_FORMAT_PATCH;
938
939
if (!DIFF_OPT_TST(&rev.diffopt, TEXT) && !no_binary_diff)
t/t4014-format-patch.sh
+25
@@ -230,4 +230,29 @@ test_expect_success 'shortlog of cover-letter wraps overly-long onelines' '
230
231
'
232
233
+cat > expect << EOF
234
+---
235
+ file | 16 ++++++++++++++++
236
+ 1 files changed, 16 insertions(+), 0 deletions(-)
237
+
238
+diff --git a/file b/file
239
+index 40f36c6..2dc5c23 100644
240
+--- a/file
241
++++ b/file
242
+@@ -13,4 +13,20 @@ C
243
+ 10
244
+ D
245
+ E
246
+ F
247
++5
248
+EOF
249
+
250
+test_expect_success 'format-patch respects -U' '
251
+
252
+ git format-patch -U4 -2 &&
253
+ sed -e "1,/^$/d" -e "/^+5/q" < 0001-This-is-an-excessively-long-subject-line-for-a-messa.patch > output &&
254
+ test_cmp expect output
255
+
256
+'
257
+
258
test_done