From: Johannes Schindelin <johannes.schinde...@gmx.de>

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.schinde...@gmx.de>
---
 Documentation/git-range-diff.txt       | 32 +++++++++++++++-----------
 builtin/range-diff.c                   | 10 ++++----
 contrib/completion/git-completion.bash |  2 +-
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/Documentation/git-range-diff.txt b/Documentation/git-range-diff.txt
index bebb47d42..82c71c682 100644
--- a/Documentation/git-range-diff.txt
+++ b/Documentation/git-range-diff.txt
@@ -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.
 
 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
 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
diff --git a/builtin/range-diff.c b/builtin/range-diff.c
index da3ad3eba..ef3ba22e2 100644
--- a/builtin/range-diff.c
+++ b/builtin/range-diff.c
@@ -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()
        };
@@ -61,8 +61,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;
        }
 
diff --git a/contrib/completion/git-completion.bash 
b/contrib/completion/git-completion.bash
index 3d4ec3432..d63d2dffd 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -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
-- 
gitgitgadget

Reply via email to