builtin/config: do not die in get_color()

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>
This commit is contained in:
Patrick Steinhardt
2025-09-22 15:06:20 +02:00
committed by Junio C Hamano
parent 7f89ad8c8c
commit 6e6ed3eaba

View File

@@ -547,24 +547,31 @@ static int git_get_color_config(const char *var, const char *value,
return 0; 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) const char *var, const char *def_color)
{ {
struct get_color_config_data data = { struct get_color_config_data data = {
.get_color_slot = var, .get_color_slot = var,
.parsed_color[0] = '\0', .parsed_color[0] = '\0',
}; };
int ret;
config_with_options(git_get_color_config, &data, config_with_options(git_get_color_config, &data,
&opts->source, the_repository, &opts->source, the_repository,
&opts->options); &opts->options);
if (!data.get_color_found && def_color) { if (!data.get_color_found && def_color) {
if (color_parse(def_color, data.parsed_color) < 0) if (color_parse(def_color, data.parsed_color) < 0) {
die(_("unable to parse default color value")); ret = error(_("unable to parse default color value"));
goto out;
}
} }
ret = 0;
out:
fputs(data.parsed_color, stdout); fputs(data.parsed_color, stdout);
return ret;
} }
struct get_colorbool_config_data { 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) { else if (actions == ACTION_GET_COLOR) {
check_argc(argc, 1, 2); 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) { else if (actions == ACTION_GET_COLORBOOL) {
check_argc(argc, 1, 2); check_argc(argc, 1, 2);