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>
main
Jeff King 2025-09-16 16:26:37 -04:00 committed by Junio C Hamano
parent 9d241b0113
commit 69a7e8d32f
1 changed files with 4 additions and 3 deletions

View File

@ -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)