diff options
author | Karthik Nayak <karthik.188@gmail.com> | 2016-02-17 23:36:13 +0530 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-02-17 14:06:45 -0800 |
commit | fd935cc7e8e2fdf7ad837dc74509c75877a489ba (patch) | |
tree | 48ba2cd2ef9cb36f0a25804aed92a89034530e4b /ref-filter.c | |
parent | ref-filter: introduce parsing functions for each valid atom (diff) | |
download | tgif-fd935cc7e8e2fdf7ad837dc74509c75877a489ba.tar.xz |
ref-filter: introduce color_atom_parser()
Introduce color_atom_parser() which will parse a "color" atom and
store its color in the "used_atom" structure for further usage in
populate_value().
Helped-by: Ramsay Jones <ramsay@ramsayjones.plus.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
Reviewed-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'ref-filter.c')
-rw-r--r-- | ref-filter.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/ref-filter.c b/ref-filter.c index 8a34ba11c7..c90d2f4069 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -29,10 +29,21 @@ typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type; static struct used_atom { const char *name; cmp_type type; + union { + char color[COLOR_MAXLEN]; + } u; } *used_atom; static int used_atom_cnt, need_tagged, need_symref; static int need_color_reset_at_eol; +static void color_atom_parser(struct used_atom *atom, const char *color_value) +{ + if (!color_value) + die(_("expected format: %%(color:<color>)")); + if (color_parse(color_value, atom->u.color) < 0) + die(_("unrecognized color: %%(color:%s)"), color_value); +} + static struct { const char *name; cmp_type cmp_type; @@ -70,7 +81,7 @@ static struct { { "symref" }, { "flag" }, { "HEAD" }, - { "color" }, + { "color", FIELD_STR, color_atom_parser }, { "align" }, { "end" }, }; @@ -158,6 +169,7 @@ int parse_ref_filter_atom(const char *atom, const char *ep) used_atom[at].type = valid_atom[i].cmp_type; if (arg) arg = used_atom[at].name + (arg - atom) + 1; + memset(&used_atom[at].u, 0, sizeof(used_atom[at].u)); if (valid_atom[i].parser) valid_atom[i].parser(&used_atom[at], arg); if (*atom == '*') @@ -816,6 +828,7 @@ static void populate_value(struct ref_array_item *ref) /* Fill in specials first */ for (i = 0; i < used_atom_cnt; i++) { + struct used_atom *atom = &used_atom[i]; const char *name = used_atom[i].name; struct atom_value *v = &ref->value[i]; int deref = 0; @@ -856,14 +869,8 @@ static void populate_value(struct ref_array_item *ref) refname = branch_get_push(branch, NULL); if (!refname) continue; - } else if (match_atom_name(name, "color", &valp)) { - char color[COLOR_MAXLEN] = ""; - - if (!valp) - die(_("expected format: %%(color:<color>)")); - if (color_parse(valp, color) < 0) - die(_("unable to parse format")); - v->s = xstrdup(color); + } else if (starts_with(name, "color:")) { + v->s = atom->u.color; continue; } else if (!strcmp(name, "flag")) { char buf[256], *cp = buf; |