aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2025-09-22 15:06:22 +0200
committerJunio C Hamano <gitster@pobox.com>2025-09-22 09:32:57 -0700
commite4dabf4fd62470f03b5aa3f1ad615cd7121cb5c5 (patch)
tree45763f1faa8dd4fed17043e52453a47ffc765003
parentbuiltin/config: special-case retrieving colors without a key (diff)
downloadgit-e4dabf4fd62470f03b5aa3f1ad615cd7121cb5c5.tar.gz
git-e4dabf4fd62470f03b5aa3f1ad615cd7121cb5c5.zip
builtin/config: do not spawn pager when printing color codes
With `git config get --type=color` the user asks us to parse a specific configuration key and turn the value into an ANSI color escape sequence. The printed string can then for example be used as part of shell scripts to reuse the same colors as Git. Right now though we set up the auto-pager, which means that the string may be written to the pager instead of directly to the terminal. This behaviour is problematic for two reasons: - Color codes are meant for direct terminal output; writing them into a pager does not seem like a sensible thing to do without additional text. - It is inconsistent with `git config --get-color`, which never uses a pager, despite the fact that we claim `git config get --type=color` to be a drop-in replacement in git-config(1). Fix this by disabling the pager when outputting color sequences. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to '')
-rw-r--r--builtin/config.c3
-rwxr-xr-xt/t1300-config.sh9
2 files changed, 11 insertions, 1 deletions
diff --git a/builtin/config.c b/builtin/config.c
index cfd89a4186..c8776ad651 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -919,7 +919,8 @@ static int cmd_config_get(int argc, const char **argv, const char *prefix,
location_options_init(&location_opts, prefix);
display_options_init(&display_opts);
- setup_auto_pager("config", 1);
+ if (display_opts.type != TYPE_COLOR)
+ setup_auto_pager("config", 1);
if (url)
ret = get_urlmatch(&location_opts, &display_opts, argv[0], url);
diff --git a/t/t1300-config.sh b/t/t1300-config.sh
index 3cf5d17aba..358d636379 100755
--- a/t/t1300-config.sh
+++ b/t/t1300-config.sh
@@ -9,6 +9,7 @@ GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
. ./test-lib.sh
+. "$TEST_DIRECTORY"/lib-terminal.sh
for mode in legacy subcommands
do
@@ -1099,6 +1100,14 @@ test_expect_success 'get --type=color with default value only' '
test_cmp actual.raw actual-subcommand.raw
'
+test_expect_success TTY 'get --type=color does not use a pager' '
+ test_config core.pager "echo foobar" &&
+ test_terminal git config get --type=color --default="red" "" >actual.raw &&
+ test_decode_color <actual.raw >actual &&
+ echo "<RED>" >expect &&
+ test_cmp expect actual
+'
+
test_expect_success 'set --type=color' '
cat >expect <<\EOF &&
[foo]