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

[PATCH 13/14] format-patch: add --creation-factor tweak for --range-diff

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jul 22, 2018, 09:57 UTC
Message-ID
<20180722095717.17912-14-sunshine@sunshineco.com>
In-Reply-To
<20180722095717.17912-1-sunshine@sunshineco.com>

When generating a range-diff, matching up commits between two version of a patch series involves heuristics, thus may give unexpected results. git-range-diff allows tweaking the heuristic via --creation-factor. Follow suit by accepting --creation-factor in combination with --range-diff when generating a range-diff for a cover-letter.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
 Documentation/git-format-patch.txt |  8 +++++++-
 builtin/log.c                      | 10 +++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt
index 425145f536..9b2e172159 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.txt
@@ -24,7 +24,7 @@ SYNOPSIS
 		   [--to=<email>] [--cc=<email>]
 		   [--[no-]cover-letter] [--quiet] [--notes[=<ref>]]
 		   [--interdiff=<previous>]
-		   [--range-diff=<previous>]
+		   [--range-diff=<previous> [--creation-factor=<percent>]]
 		   [--progress]
 		   [<common diff options>]
 		   [ <since> | <revision range> ]
@@ -250,6 +250,12 @@ feeding the result to `git send-email`.
 	disjoint (for example `git format-patch --cover-letter
 	--range-diff=feature/v1~3..feature/v1 -3 feature/v2`).
 
+--creation-factor=<percent>::
+	Used with `--range-diff`, tweak the heuristic which matches up commits
+	between the previous and current series of patches by adjusting the
+	creation/deletion cost fudge factor. See linkgit:git-range-diff[1])
+	for details.
+
 --notes[=<ref>]::
 	Append the notes (see linkgit:git-notes[1]) for the commit
 	after the three-dash line.
diff --git a/builtin/log.c b/builtin/log.c
index fdb2180d7e..10c3801ceb 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1497,6 +1497,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 	struct strbuf rdiff1 = STRBUF_INIT;
 	struct strbuf rdiff2 = STRBUF_INIT;
 	struct strbuf rdiff_title = STRBUF_INIT;
+	int creation_factor = -1;
 
 	const struct option builtin_format_patch_options[] = {
 		{ OPTION_CALLBACK, 'n', "numbered", &numbered, NULL,
@@ -1575,6 +1576,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 			     parse_opt_object_name),
 		OPT_STRING(0, "range-diff", &rdiff_prev, N_("refspec"),
 			   N_("show changes against <refspec> in cover letter")),
+		OPT_INTEGER(0, "creation-factor", &creation_factor,
+			    N_("percentage by which creation is weighted")),
 		OPT_END()
 	};
 
@@ -1807,6 +1810,11 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 					     _("Interdiff against v%d:"));
 	}
 
+	if (creation_factor < 0)
+		creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT;
+	else if (!rdiff_prev)
+		die(_("--creation-factor requires --range-diff"));
+
 	if (rdiff_prev) {
 		if (!cover_letter)
 			die(_("--range-diff requires --cover-letter"));
@@ -1815,7 +1823,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 					origin, list[0]);
 		rev.rdiff1 = rdiff1.buf;
 		rev.rdiff2 = rdiff2.buf;
-		rev.creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT;
+		rev.creation_factor = creation_factor;
 		rev.rdiff_title = diff_title(&rdiff_title, reroll_count,
 					     _("Range-diff:"),
 					     _("Range-diff against v%d:"));
-- 
2.18.0.345.g5c9ce644c3
Previous: Eric SunshineNext: Eric Sunshine
Message 33 of 38 in “format-patch: add --interdiff and --range-diff options”
  1. 00/14 format-patch: add --interdiff and --range-diff optionsEric Sunshine, Jul 22, 2018
  2. 01/14 format-patch: allow additional generated content in make_cover_letter()Eric Sunshine, Jul 22, 2018
  3. 02/14 format-patch: add --interdiff option to embed diff in cover letterEric Sunshine, Jul 22, 2018
  4. Eric SunshineJul 22, 2018
  5. Duy NguyenJul 23, 2018
  6. Eric SunshineJul 23, 2018
  7. Junio C HamanoJul 23, 2018
  8. 03/14 format-patch: teach --interdiff to respect -v/--reroll-countEric Sunshine, Jul 22, 2018
  9. Duy NguyenJul 23, 2018
  10. Eric SunshineJul 23, 2018
  11. 04/14 interdiff: teach show_interdiff() to indent interdiffEric Sunshine, Jul 22, 2018
  12. 05/14 log-tree: show_log: make commentary block delimiting reusableEric Sunshine, Jul 22, 2018
  13. 06/14 format-patch: allow --interdiff to apply to a lone-patchEric Sunshine, Jul 22, 2018
  14. Duy NguyenJul 23, 2018
  15. Eric SunshineJul 23, 2018
  16. 08/14 range-diff: publish default creation factorEric Sunshine, Jul 22, 2018
  17. 09/14 range-diff: relieve callers of low-level configuration burdenEric Sunshine, Jul 22, 2018
  18. 10/14 format-patch: add --range-diff option to embed diff in cover letterEric Sunshine, Jul 22, 2018
  19. Duy NguyenJul 23, 2018
  20. Eric SunshineJul 23, 2018
  21. Junio C HamanoJul 25, 2018
  22. Eric SunshineJul 25, 2018
  23. Junio C HamanoJul 25, 2018
  24. Duy NguyenJul 25, 2018
  25. 07/14 range-diff: respect diff_option.file rather than assuming 'stdout'Eric Sunshine, Jul 22, 2018
  26. Stefan BellerJul 23, 2018
  27. Eric SunshineJul 23, 2018
  28. Junio C HamanoJul 25, 2018
  29. 12/14 format-patch: teach --range-diff to respect -v/--reroll-countEric Sunshine, Jul 22, 2018
  30. 14/14 format-patch: allow --range-diff to apply to a lone-patchEric Sunshine, Jul 22, 2018
  31. Junio C HamanoJul 25, 2018
  32. Eric SunshineSep 7, 2018
  33. 13/14 format-patch: add --creation-factor tweak for --range-diffEric Sunshine, Jul 22, 2018
  34. 11/14 format-patch: extend --range-diff to accept revision rangeEric Sunshine, Jul 22, 2018
  35. Junio C HamanoJul 25, 2018
  36. Eric SunshineSep 7, 2018
  37. Duy NguyenJul 23, 2018
  38. Eric SunshineJul 23, 2018

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.