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:
committed by
Junio C Hamano
parent
7f89ad8c8c
commit
6e6ed3eaba
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user