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)