Browse Source

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>
maint
Johannes Schindelin 6 years ago committed by Junio C Hamano
parent
commit
275267937b
  1. 32
      Documentation/git-range-diff.txt
  2. 10
      builtin/range-diff.c
  3. 2
      contrib/completion/git-completion.bash

32
Documentation/git-range-diff.txt

@ -9,7 +9,7 @@ SYNOPSIS @@ -9,7 +9,7 @@ SYNOPSIS
--------
[verse]
'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> )

DESCRIPTION
@ -31,11 +31,14 @@ all of their ancestors have been shown. @@ -31,11 +31,14 @@ all of their ancestors have been shown.

OPTIONS
-------
--dual-color::
When the commit diffs differ, recreate the original diffs'
coloring, and add outer -/+ diff markers with the *background*
being red/green to make it easier to see e.g. when there was a
change in what exact lines were added.
--no-dual-color::
When the commit diffs differ, `git range-diff` recreates the
original diffs' coloring, and adds outer -/+ diff markers with
the *background* being red/green to make it easier to see e.g.
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>::
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 @@ -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
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
colors the entire lines red or green. The line that added "What is
unexpected" in the old commit, for example, is completely red, even if
the intent of the old commit was to add something.
A naive color-coded diff of diffs is actually a bit hard to read,
though, as it colors the entire lines red or green. The line that added
"What is unexpected" in the old commit, for example, is completely red,
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
of diffs will retain the original diff colors, and prefix the lines with
-/+ markers that have their *background* red or green, to make it more
obvious that they describe how the diff itself changed.
To help with that, `range` uses the `--dual-color` mode by default. In
this mode, the diff of diffs will retain the original diff colors, and
prefix the lines with -/+ markers that have their *background* red or
green, to make it more obvious that they describe how the diff itself
changed.


Algorithm

10
builtin/range-diff.c

@ -20,11 +20,11 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix) @@ -20,11 +20,11 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
{
int creation_factor = 60;
struct diff_options diffopt = { NULL };
int dual_color = 0;
int simple_color = -1;
struct option options[] = {
OPT_INTEGER(0, "creation-factor", &creation_factor,
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")),
OPT_END()
};
@ -63,8 +63,10 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix) @@ -63,8 +63,10 @@ int cmd_range_diff(int argc, const char **argv, const char *prefix)
options + ARRAY_SIZE(options) - 1, /* OPT_END */
builtin_range_diff_usage, 0);

if (dual_color) {
diffopt.use_color = 1;
if (simple_color < 1) {
if (!simple_color)
/* force color when --dual-color was used */
diffopt.use_color = 1;
diffopt.flags.dual_color_diffed_diffs = 1;
}


2
contrib/completion/git-completion.bash

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

Loading…
Cancel
Save