summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Eric Sunshine <sunshine@sunshineco.com>2018-07-22 05:57:16 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2018-08-14 14:27:05 -0700
commit8631bf1cdd7296684deebab2708761bfc8085fc2 (patch)
tree2aaa3d26b0a0f847db6b518c65a755ebda0fe63f
parentformat-patch: teach --range-diff to respect -v/--reroll-count (diff)
downloadtgif-8631bf1cdd7296684deebab2708761bfc8085fc2.tar.xz
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 <sunshine@sunshineco.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--Documentation/git-format-patch.txt8
-rw-r--r--builtin/log.c10
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 0dc17fe325..05965a57ca 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1498,6 +1498,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,
@@ -1576,6 +1577,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()
};
@@ -1808,6 +1811,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"));
@@ -1816,7 +1824,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:"));