range-diff: make --dual-color the default mode

After using this command extensively for the last two months, this
developer came to the conclusion that even if the dual color mode still
leaves a lot of room for confusion about what was actually changed, the
non-dual color mode is substantially worse in that regard.

Therefore, we really want to make the dual color mode the default.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin 2018-08-13 04:33:30 -07:00 committed by Junio C Hamano
parent d1f87a2d9c
commit 275267937b
3 changed files with 25 additions and 19 deletions

View file

@ -9,7 +9,7 @@ SYNOPSIS
-------- --------
[verse] [verse]
'git range-diff' [--color=[<when>]] [--no-color] [<diff-options>] 'git range-diff' [--color=[<when>]] [--no-color] [<diff-options>]
[--dual-color] [--creation-factor=<factor>] [--no-dual-color] [--creation-factor=<factor>]
( <range1> <range2> | <rev1>...<rev2> | <base> <rev1> <rev2> ) ( <range1> <range2> | <rev1>...<rev2> | <base> <rev1> <rev2> )
DESCRIPTION DESCRIPTION
@ -31,11 +31,14 @@ all of their ancestors have been shown.
OPTIONS OPTIONS
------- -------
--dual-color:: --no-dual-color::
When the commit diffs differ, recreate the original diffs' When the commit diffs differ, `git range-diff` recreates the
coloring, and add outer -/+ diff markers with the *background* original diffs' coloring, and adds outer -/+ diff markers with
being red/green to make it easier to see e.g. when there was a the *background* being red/green to make it easier to see e.g.
change in what exact lines were added. when there was a change in what exact lines were added. This is
known to `range-diff` as "dual coloring". Use `--no-dual-color`
to revert to color all lines according to the outer diff markers
(and completely ignore the inner diff when it comes to color).
--creation-factor=<percent>:: --creation-factor=<percent>::
Set the creation/deletion cost fudge factor to `<percent>`. Set the creation/deletion cost fudge factor to `<percent>`.
@ -118,15 +121,16 @@ line (with a perfect match) is yellow like the commit header of `git
show`'s output, and the third line colors the old commit red, the new show`'s output, and the third line colors the old commit red, the new
one green and the rest like `git show`'s commit header. one green and the rest like `git show`'s commit header.
The color-coded diff is actually a bit hard to read, though, as it A naive color-coded diff of diffs is actually a bit hard to read,
colors the entire lines red or green. The line that added "What is though, as it colors the entire lines red or green. The line that added
unexpected" in the old commit, for example, is completely red, even if "What is unexpected" in the old commit, for example, is completely red,
the intent of the old commit was to add something. even if the intent of the old commit was to add something.
To help with that, use the `--dual-color` mode. In this mode, the diff To help with that, `range` uses the `--dual-color` mode by default. In
of diffs will retain the original diff colors, and prefix the lines with this mode, the diff of diffs will retain the original diff colors, and
-/+ markers that have their *background* red or green, to make it more prefix the lines with -/+ markers that have their *background* red or
obvious that they describe how the diff itself changed. green, to make it more obvious that they describe how the diff itself
changed.
Algorithm Algorithm

View file

@ -20,11 +20,11 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
{ {
int creation_factor = 60; int creation_factor = 60;
struct diff_options diffopt = { NULL }; struct diff_options diffopt = { NULL };
int dual_color = 0; int simple_color = -1;
struct option options[] = { struct option options[] = {
OPT_INTEGER(0, "creation-factor", &creation_factor, OPT_INTEGER(0, "creation-factor", &creation_factor,
N_("Percentage by which creation is weighted")), N_("Percentage by which creation is weighted")),
OPT_BOOL(0, "dual-color", &dual_color, OPT_BOOL(0, "no-dual-color", &simple_color,
N_("color both diff and diff-between-diffs")), N_("color both diff and diff-between-diffs")),
OPT_END() OPT_END()
}; };
@ -63,8 +63,10 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
options + ARRAY_SIZE(options) - 1, /* OPT_END */ options + ARRAY_SIZE(options) - 1, /* OPT_END */
builtin_range_diff_usage, 0); builtin_range_diff_usage, 0);
if (dual_color) { if (simple_color < 1) {
diffopt.use_color = 1; if (!simple_color)
/* force color when --dual-color was used */
diffopt.use_color = 1;
diffopt.flags.dual_color_diffed_diffs = 1; diffopt.flags.dual_color_diffed_diffs = 1;
} }

View file

@ -1981,7 +1981,7 @@ _git_range_diff ()
case "$cur" in case "$cur" in
--*) --*)
__gitcomp " __gitcomp "
--creation-factor= --dual-color --creation-factor= --no-dual-color
$__git_diff_common_options $__git_diff_common_options
" "
return return