summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2025-09-16 16:26:37 -0400
committerJunio C Hamano <gitster@pobox.com>2025-09-16 18:00:26 -0700
commit69a7e8d32f37ca9cefc6b82fe848415d1d4200d9 (patch)
treec39c93cd4f4fc4486c96385c62003c79d599a432
parent9d241b01132c17a44adda2d762b37adf3625bdd7 (diff)
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>
-rw-r--r--builtin/config.c7
1 files 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)