]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/config: do not die in `get_color()`
authorPatrick Steinhardt <ps@pks.im>
Mon, 22 Sep 2025 13:06:20 +0000 (15:06 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 22 Sep 2025 16:32:57 +0000 (09:32 -0700)
When trying to parse an invalid color via `get_color()` we die. We're
about to introduce another caller in a subsequent commit though that has
its own error handling, so dying is a bit drastic there. Furthermore,
the only caller that we already have right now already knows to handle
errors in other branches that don't call `get_color()`.

Convert the function to instead return an error code to improve its
flexibility.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/config.c

index f70d6354772259abf4d070e9c45379ee4d274cf3..65e79c76735e4493afc16815ce680062375dd285 100644 (file)
@@ -547,24 +547,31 @@ static int git_get_color_config(const char *var, const char *value,
        return 0;
 }
 
-static void get_color(const struct config_location_options *opts,
+static int get_color(const struct config_location_options *opts,
                      const char *var, const char *def_color)
 {
        struct get_color_config_data data = {
                .get_color_slot = var,
                .parsed_color[0] = '\0',
        };
+       int ret;
 
        config_with_options(git_get_color_config, &data,
                            &opts->source, the_repository,
                            &opts->options);
 
        if (!data.get_color_found && def_color) {
-               if (color_parse(def_color, data.parsed_color) < 0)
-                       die(_("unable to parse default color value"));
+               if (color_parse(def_color, data.parsed_color) < 0) {
+                       ret = error(_("unable to parse default color value"));
+                       goto out;
+               }
        }
 
+       ret = 0;
+
+out:
        fputs(data.parsed_color, stdout);
+       return ret;
 }
 
 struct get_colorbool_config_data {
@@ -1390,7 +1397,7 @@ static int cmd_config_actions(int argc, const char **argv, const char *prefix)
        }
        else if (actions == ACTION_GET_COLOR) {
                check_argc(argc, 1, 2);
-               get_color(&location_opts, argv[0], argv[1]);
+               ret = get_color(&location_opts, argv[0], argv[1]);
        }
        else if (actions == ACTION_GET_COLORBOOL) {
                check_argc(argc, 1, 2);