From 40ce41604daf200cdc85abded0133d40faafc2f8 Mon Sep 17 00:00:00 2001 From: Eric Sunshine Date: Sun, 22 Jul 2018 05:57:17 -0400 Subject: format-patch: allow --range-diff to apply to a lone-patch When submitting a revised version of a patch or series, it can be helpful (to reviewers) to include a summary of changes since the previous attempt in the form of a range-diff, typically in the cover letter. However, it is occasionally useful, despite making for a noisy read, to insert a range-diff into the commentary section of the lone patch of a 1-patch series. Therefore, extend "git format-patch --range-diff=" to insert a range-diff into the commentary section of a lone patch rather than requiring a cover letter. Implementation note: Generating a range-diff for insertion into the commentary section of a patch which itself is currently being generated requires invoking the diffing machinery recursively. However, the machinery does not (presently) support this since it uses global state. Consequently, we need to take care to stash away the state of the in-progress operation while generating the range-diff, and restore it after. Signed-off-by: Eric Sunshine Signed-off-by: Junio C Hamano --- builtin/log.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'builtin') diff --git a/builtin/log.c b/builtin/log.c index 05965a57ca..f69b67b9ce 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1576,7 +1576,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) N_("show changes against in cover letter or single patch"), parse_opt_object_name), OPT_STRING(0, "range-diff", &rdiff_prev, N_("refspec"), - N_("show changes against in cover letter")), + N_("show changes against in cover letter or single patch")), OPT_INTEGER(0, "creation-factor", &creation_factor, N_("percentage by which creation is weighted")), OPT_END() @@ -1817,8 +1817,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) die(_("--creation-factor requires --range-diff")); if (rdiff_prev) { - if (!cover_letter) - die(_("--range-diff requires --cover-letter")); + if (!cover_letter && total != 1) + die(_("--range-diff requires --cover-letter or single patch")); infer_range_diff_ranges(&rdiff1, &rdiff2, rdiff_prev, origin, list[0]); @@ -1867,8 +1867,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) print_signature(rev.diffopt.file); total++; start_number--; - /* interdiff in cover-letter; omit from patches */ + /* interdiff/range-diff in cover-letter; omit from patches */ rev.idiff_oid1 = NULL; + rev.rdiff1 = NULL; } rev.add_signoff = do_signoff; -- cgit v1.3