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 <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Sep 16, 2025 at 16:26 UTC 69a7e8d32f37ca9cefc6b82fe848415d1d4200d9
1 file changed +4 -3
builtin/config.c
+4 -3
@@ -598,6 +598,7 @@ static int get_colorbool(const struct config_location_options *opts,
598 .get_diff_color_found = GIT_COLOR_UNKNOWN,
599 .get_color_ui_found = GIT_COLOR_UNKNOWN,
600 };
601 + bool result;
602
603 config_with_options(git_get_colorbool_config, &data,
604 &opts->source, the_repository,
@@ -614,13 +615,13 @@ static int get_colorbool(const struct config_location_options *opts,
615 /* default value if none found in config */
616 data.get_colorbool_found = GIT_COLOR_AUTO;
617
617 - data.get_colorbool_found = want_color(data.get_colorbool_found);
618 + result = want_color(data.get_colorbool_found);
619
620 if (print) {
620 - printf("%s\n", data.get_colorbool_found ? "true" : "false");
621 + printf("%s\n", result ? "true" : "false");
622 return 0;
623 } else
623 - return data.get_colorbool_found ? 0 : 1;
624 + return result ? 0 : 1;
625 }
626
627 static void check_write(const struct git_config_source *source)