]> git.ipfire.org Git - thirdparty/git.git/commitdiff
add: check color.ui for interactive add
authorDerrick Stolee <derrickstolee@github.com>
Tue, 6 Jun 2023 14:20:18 +0000 (14:20 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 12 Jun 2023 17:49:16 +0000 (10:49 -0700)
When 'git add -i' and 'git add -p' were converted to a builtin, they
introduced a color bug: the 'color.ui' config setting is ignored.

The included test demonstrates an example that is similar to the
previous test, which focuses on customizing colors. Here, we are
demonstrating that colors are not being used at all by comparing the raw
output and the color-decoded version of that output.

The fix is simple, to use git_color_default_config() as the fallback for
git_add_config(). A more robust change would instead encapsulate the
git_use_color_default global in methods that would check the config
setting if it has not been initialized yet. Some ideas are being
discussed on this front [1], but nothing has been finalized.

[1] https://lore.kernel.org/git/pull.1539.git.1685716420.gitgitgadget@gmail.com/

This test case naturally bisects down to 0527ccb1b55 (add -i: default to
the built-in implementation, 2021-11-30), but the fix makes it clear
that this would be broken even if we added the config to use the builtin
earlier than this.

Reported-by: Greg Alexander <gitgreg@galexander.org>
Signed-off-by: Derrick Stolee <derrickstolee@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/add.c
t/t3701-add-interactive.sh

index 61dd386d109b3756e90756b91d9405c71d1b4145..3e13983c463d7e59bd4906d588196aae0b5f387b 100644 (file)
@@ -362,7 +362,7 @@ static int add_config(const char *var, const char *value, void *cb)
                return 0;
        }
 
-       return git_default_config(var, value, cb);
+       return git_color_default_config(var, value, cb);
 }
 
 static const char embedded_advice[] = N_(
index 3a99837d9b15f78f2f8e034d4fdea9a0b88441ed..99192d76a3d18541e9769315b79ed40eb4c06823 100755 (executable)
@@ -738,6 +738,21 @@ test_expect_success 'colors can be overridden' '
        test_cmp expect actual
 '
 
+test_expect_success 'colors can be skipped with color.ui=false' '
+       git reset --hard &&
+       test_when_finished "git rm -f color-test" &&
+       test_write_lines context old more-context >color-test &&
+       git add color-test &&
+       test_write_lines context new more-context another-one >color-test &&
+
+       test_write_lines help quit >input &&
+       force_color git \
+               -c color.ui=false \
+               add -i >actual.raw <input &&
+       test_decode_color <actual.raw >actual &&
+       test_cmp actual.raw actual
+'
+
 test_expect_success 'colorized diffs respect diff.wsErrorHighlight' '
        git reset --hard &&