Re: [PATCH/RFC 05/10] ref-filter: introduce color_atom_parser()
- From
Karthik Nayak <karthik.188@gmail.com>
- Date
- Dec 3, 2015, 13:35 UTC
- Message-ID
- <CAOLa=ZQY3PMtfemVAsbHydtguQG9pc2uVTiJ6Qh+jLf6mY4dFw@mail.gmail.com>
- In-Reply-To
- <CAPig+cRXgLqmUf1ZK2QnHbHM6-1Ya=iTx6Jq9YdnkO8aOsq+tQ@mail.gmail.com>
On Wed, Dec 2, 2015 at 4:57 AM, Eric Sunshine <sunshine@sunshineco.com> wrote:
Show 6 quoted lines
> 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 > > s/use_atom/used_atom/ >
will change.
Show 40 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?
>Well the error checking is done when we parse the atom in color_atom_parser() so here we don't need to worry about something like this.
Show 12 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)
>
> ?Yes, will change, thanks.
-- Regards, Karthik Nayak