diff: allow --no-color-moved-ws
authorPhillip Wood <phillip.wood@dunelm.org.uk>
Fri, 23 Nov 2018 11:16:52 +0000 (11:16 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 10 Jan 2019 18:37:59 +0000 (10:37 -0800)
Allow --no-color-moved-ws and --color-moved-ws=no to cancel any previous
--color-moved-ws option.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/diff-options.txt
diff.c
index 57a2f4cb7afef208bac7523343496939e304da0e..e1744fa80d9af6f86aa3269e19b59cf107a1b530 100644 (file)
@@ -306,6 +306,8 @@ endif::git-diff[]
        These modes can be given as a comma separated list:
 +
 --
+no::
+       Do not ignore whitespace when performing move detection.
 ignore-space-at-eol::
        Ignore changes in whitespace at EOL.
 ignore-space-change::
@@ -322,6 +324,11 @@ allow-indentation-change::
        other modes.
 --
 
+--no-color-moved-ws::
+       Do not ignore whitespace when performing move detection. This can be
+       used to override configuration settings. It is the same as
+       `--color-moved-ws=no`.
+
 --word-diff[=<mode>]::
        Show a word diff, using the <mode> to delimit changed words.
        By default, words are delimited by whitespace; see
diff --git a/diff.c b/diff.c
index 7fc92dcd3d91c322e05e8f30c4fd6f17c1fab6a9..4ef0042bf7ef0c12f3426ccaae98bcf21459c8b0 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -304,7 +304,9 @@ static int parse_color_moved_ws(const char *arg)
                strbuf_addstr(&sb, i->string);
                strbuf_trim(&sb);
 
-               if (!strcmp(sb.buf, "ignore-space-change"))
+               if (!strcmp(sb.buf, "no"))
+                       ret = 0;
+               else if (!strcmp(sb.buf, "ignore-space-change"))
                        ret |= XDF_IGNORE_WHITESPACE_CHANGE;
                else if (!strcmp(sb.buf, "ignore-space-at-eol"))
                        ret |= XDF_IGNORE_WHITESPACE_AT_EOL;
@@ -5036,6 +5038,8 @@ int diff_opt_parse(struct diff_options *options,
                if (cm < 0)
                        die("bad --color-moved argument: %s", arg);
                options->color_moved = cm;
+       } else if (!strcmp(arg, "--no-color-moved-ws")) {
+               options->color_moved_ws_handling = 0;
        } else if (skip_prefix(arg, "--color-moved-ws=", &arg)) {
                options->color_moved_ws_handling = parse_color_moved_ws(arg);
        } else if (skip_to_optional_arg_default(arg, "--color-words", &options->word_regex, NULL)) {