From: Jeff King Date: Tue, 16 Sep 2025 20:26:37 +0000 (-0400) Subject: config: store want_color() result in a separate bool X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=69a7e8d32f37ca9cefc6b82fe848415d1d4200d9;p=thirdparty%2Fgit.git config: store want_color() result in a separate bool The "git config --get-colorbool foo.bar" command not only digs in the config to find the value of foo.bar, it evaluates the result using want_color() to check the tty-ness of stdout. But it stores the bool result of want_color() in the same git_colorbool that we found in the config. This works in practice because the git_colorbool enum is a superset of the bool values. But it is an oddity from a type system perspective. Let's instead store the result in a separate bool and use that. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- diff --git a/builtin/config.c b/builtin/config.c index 9e4e4eb2f1..2348a99dd4 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -598,6 +598,7 @@ static int get_colorbool(const struct config_location_options *opts, .get_diff_color_found = GIT_COLOR_UNKNOWN, .get_color_ui_found = GIT_COLOR_UNKNOWN, }; + bool result; config_with_options(git_get_colorbool_config, &data, &opts->source, the_repository, @@ -614,13 +615,13 @@ static int get_colorbool(const struct config_location_options *opts, /* default value if none found in config */ data.get_colorbool_found = GIT_COLOR_AUTO; - data.get_colorbool_found = want_color(data.get_colorbool_found); + result = want_color(data.get_colorbool_found); if (print) { - printf("%s\n", data.get_colorbool_found ? "true" : "false"); + printf("%s\n", result ? "true" : "false"); return 0; } else - return data.get_colorbool_found ? 0 : 1; + return result ? 0 : 1; } static void check_write(const struct git_config_source *source)