Re: [PATCH/RFC 05/10] ref-filter: introduce color_atom_parser()
On Wed, Nov 11, 2015 at 2:44 PM, Karthik Nayak <karthik.188@gmail.com> wrote:
> Introduce color_atom_parser() which will parse a "color" atom and
> store its color in the "use_atom" structure for further usage in
Show 37 quoted lines
> 'populate_value()'.
>
> Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
> ---
> diff --git a/ref-filter.c b/ref-filter.c
> @@ -29,6 +29,9 @@ typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
> static struct used_atom {
> const char *str;
> cmp_type type;
> + union {
> + const char *color;
> + } u;
> } *used_atom;
> @@ -53,6 +56,13 @@ static int match_atom_name(const char *name, const char *atom_name, const char *
> +void color_atom_parser(struct used_atom *atom)
> +{
> + match_atom_name(atom->str, "color", &atom->u.color);
> + if (!atom->u.color)
> + die(_("expected format: %%(color:<color>)"));
> +}
> +
> @@ -175,6 +185,9 @@ int parse_ref_filter_atom(const char *atom, const char *ep)
> REALLOC_ARRAY(used_atom, used_atom_cnt);
> used_atom[at].str = xmemdupz(atom, ep - atom);
> used_atom[at].type = valid_atom[i].cmp_type;
> + memset(&used_atom[at].u, 0, sizeof(used_atom[at].u));
> + if (valid_atom[i].parser)
> + valid_atom[i].parser(&used_atom[at]);
> if (*atom == '*')
> need_tagged = 1;
> if (!strcmp(used_atom[at].str, "symref"))
> @@ -833,11 +846,10 @@ 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)) {
> + } else if (starts_with(name, "color")) {Hmm, so this will also match "colorize". Is that desirable?
Show 6 quoted lines
> char color[COLOR_MAXLEN] = "";
> + const char *valp = atom->u.color;
>
> - if (!valp)
> - die(_("expected format: %%(color:<color>)"));
> if (color_parse(valp, color) < 0)Rather than declaring variable 'valp', why not just say:
if (color_parse(atom->u.color, color) < 0)
?
> die(_("unable to parse format"));
> v->s = xstrdup(color);
> --
> 2.6.2