Add and use generic name->id mapping code for color slot parsing

Instead of hard coding the name-to-id mapping in C code, keep it in an
array and use a common function to do the parsing. This reduces code
and also allows us to list all possible color slots later.

This starts using C99 designated initializers more for convenience
(the first designated initializers have been introduced in builtin/clean.c
for some time without complaints)

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy
2018-05-26 15:55:21 +02:00
committed by Junio C Hamano
parent 17b3e51505
commit a73b3680c4
7 changed files with 82 additions and 112 deletions

View File

@ -42,6 +42,15 @@ enum color_clean {
CLEAN_COLOR_ERROR = 5
};
static const char *color_interactive_slots[] = {
[CLEAN_COLOR_ERROR] = "error",
[CLEAN_COLOR_HEADER] = "header",
[CLEAN_COLOR_HELP] = "help",
[CLEAN_COLOR_PLAIN] = "plain",
[CLEAN_COLOR_PROMPT] = "prompt",
[CLEAN_COLOR_RESET] = "reset",
};
static int clean_use_color = -1;
static char clean_colors[][COLOR_MAXLEN] = {
[CLEAN_COLOR_ERROR] = GIT_COLOR_BOLD_RED,
@ -82,23 +91,6 @@ struct menu_stuff {
void *stuff;
};
static int parse_clean_color_slot(const char *var)
{
if (!strcasecmp(var, "reset"))
return CLEAN_COLOR_RESET;
if (!strcasecmp(var, "plain"))
return CLEAN_COLOR_PLAIN;
if (!strcasecmp(var, "prompt"))
return CLEAN_COLOR_PROMPT;
if (!strcasecmp(var, "header"))
return CLEAN_COLOR_HEADER;
if (!strcasecmp(var, "help"))
return CLEAN_COLOR_HELP;
if (!strcasecmp(var, "error"))
return CLEAN_COLOR_ERROR;
return -1;
}
static int git_clean_config(const char *var, const char *value, void *cb)
{
const char *slot_name;
@ -113,7 +105,7 @@ static int git_clean_config(const char *var, const char *value, void *cb)
return 0;
}
if (skip_prefix(var, "color.interactive.", &slot_name)) {
int slot = parse_clean_color_slot(slot_name);
int slot = LOOKUP_CONFIG(color_interactive_slots, slot_name);
if (slot < 0)
return 0;
if (!value)