[PATCH 12/13] config: store want_color() result in a separate bool
- From
Jeff King <peff@peff.net>
- Date
- Sep 16, 2025, 20:26 UTC
- Message-ID
- <20250916202637.GL612873@coredump.intra.peff.net>
- In-Reply-To
- <20250916201036.GA612463@coredump.intra.peff.net>
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 <peff@peff.net> --- builtin/config.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
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)
-- 2.51.0.527.g34bc42dacd