Skip to content

Commit 10d99bf

Browse files
sunshinecogitster
authored andcommitted
format-patch: add --creation-factor tweak for --range-diff
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 0932aba commit 10d99bf

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

Documentation/git-format-patch.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ SYNOPSIS
2424
[--to=<email>] [--cc=<email>]
2525
[--[no-]cover-letter] [--quiet] [--notes[=<ref>]]
2626
[--interdiff=<previous>]
27-
[--range-diff=<previous>]
27+
[--range-diff=<previous> [--creation-factor=<percent>]]
2828
[--progress]
2929
[<common diff options>]
3030
[ <since> | <revision range> ]
@@ -250,6 +250,12 @@ feeding the result to `git send-email`.
250250
disjoint (for example `git format-patch --cover-letter
251251
--range-diff=feature/v1~3..feature/v1 -3 feature/v2`).
252252

253+
--creation-factor=<percent>::
254+
Used with `--range-diff`, tweak the heuristic which matches up commits
255+
between the previous and current series of patches by adjusting the
256+
creation/deletion cost fudge factor. See linkgit:git-range-diff[1])
257+
for details.
258+
253259
--notes[=<ref>]::
254260
Append the notes (see linkgit:git-notes[1]) for the commit
255261
after the three-dash line.

builtin/log.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1497,6 +1497,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
14971497
struct strbuf rdiff1 = STRBUF_INIT;
14981498
struct strbuf rdiff2 = STRBUF_INIT;
14991499
struct strbuf rdiff_title = STRBUF_INIT;
1500+
int creation_factor = -1;
15001501

15011502
const struct option builtin_format_patch_options[] = {
15021503
{ OPTION_CALLBACK, 'n', "numbered", &numbered, NULL,
@@ -1575,6 +1576,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
15751576
parse_opt_object_name),
15761577
OPT_STRING(0, "range-diff", &rdiff_prev, N_("refspec"),
15771578
N_("show changes against <refspec> in cover letter")),
1579+
OPT_INTEGER(0, "creation-factor", &creation_factor,
1580+
N_("percentage by which creation is weighted")),
15781581
OPT_END()
15791582
};
15801583

@@ -1807,6 +1810,11 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
18071810
_("Interdiff against v%d:"));
18081811
}
18091812

1813+
if (creation_factor < 0)
1814+
creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT;
1815+
else if (!rdiff_prev)
1816+
die(_("--creation-factor requires --range-diff"));
1817+
18101818
if (rdiff_prev) {
18111819
if (!cover_letter)
18121820
die(_("--range-diff requires --cover-letter"));
@@ -1815,7 +1823,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
18151823
origin, list[0]);
18161824
rev.rdiff1 = rdiff1.buf;
18171825
rev.rdiff2 = rdiff2.buf;
1818-
rev.creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT;
1826+
rev.creation_factor = creation_factor;
18191827
rev.rdiff_title = diff_title(&rdiff_title, reroll_count,
18201828
_("Range-diff:"),
18211829
_("Range-diff against v%d:"));

0 commit comments

Comments
 (0)