]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: store want_color() result in a separate bool
authorJeff King <peff@peff.net>
Tue, 16 Sep 2025 20:26:37 +0000 (16:26 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 17 Sep 2025 01:00:26 +0000 (18:00 -0700)
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>
builtin/config.c

index 9e4e4eb2f18fbe6c394a9a166a1c0dee67193192..2348a99dd414fe2961e270e87ca5fe445635107b 100644 (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)