]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff: move diff.wsErrorHighlight to "basic" config
authorJeff King <peff@peff.net>
Fri, 31 Jan 2020 09:57:49 +0000 (04:57 -0500)
committerJunio C Hamano <gitster@pobox.com>
Fri, 31 Jan 2020 20:01:19 +0000 (12:01 -0800)
We parse diff.wsErrorHighlight in git_diff_ui_config(), meaning that it
doesn't take effect for plumbing commands, only for porcelains like
git-diff itself. This is mildly annoying as it means scripts like
add--interactive, which produce a user-visible diff with color, don't
respect the option.

We could teach that script to parse the config and pass it along as
--ws-error-highlight to the diff plumbing. But there's a simpler
solution.

It should be reasonably safe for plumbing to respect this option, as it
only kicks in when color is otherwise enabled. And anybody parsing
colorized output must already deal with the fact that color.diff.* may
change the exact output they see; those options have been part of
git_diff_basic_config() since its inception in 9a1805a872 (add a "basic"
diff config callback, 2008-01-04).

So we can just move it to the "basic" config, which fixes
add--interactive, along with any other script in the same boat, with a
very low risk of hurting any plumbing users.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c
t/t3701-add-interactive.sh

diff --git a/diff.c b/diff.c
index 8e2914c0312ce7004c6b6ce3ab4b84b846630d65..5e4471f15f9b09e8575574941248b47a79bcd610 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -414,14 +414,6 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
                return 0;
        }
 
-       if (!strcmp(var, "diff.wserrorhighlight")) {
-               int val = parse_ws_error_highlight(value);
-               if (val < 0)
-                       return -1;
-               ws_error_highlight_default = val;
-               return 0;
-       }
-
        if (git_color_config(var, value, cb) < 0)
                return -1;
 
@@ -450,6 +442,14 @@ int git_diff_basic_config(const char *var, const char *value, void *cb)
                return color_parse(value, diff_colors[slot]);
        }
 
+       if (!strcmp(var, "diff.wserrorhighlight")) {
+               int val = parse_ws_error_highlight(value);
+               if (val < 0)
+                       return -1;
+               ws_error_highlight_default = val;
+               return 0;
+       }
+
        /* like GNU diff's --suppress-blank-empty option  */
        if (!strcmp(var, "diff.suppressblankempty") ||
                        /* for backwards compatibility */
index 12ee321707a33bd8455fb30ea24c57d002c13b68..5337ccc6713fe9a4e53530a5783ff702381b947e 100755 (executable)
@@ -544,6 +544,19 @@ test_expect_success 'diffs can be colorized' '
        grep "$(printf "\\033")" output
 '
 
+test_expect_success 'colorized diffs respect diff.wsErrorHighlight' '
+       git reset --hard &&
+
+       echo "old " >test &&
+       git add test &&
+       echo "new " >test &&
+
+       printf y >y &&
+       force_color git -c diff.wsErrorHighlight=all add -p >output.raw 2>&1 <y &&
+       test_decode_color <output.raw >output &&
+       grep "old<" output
+'
+
 test_expect_success 'diffFilter filters diff' '
        git reset --hard &&