Re: [PATCH v16 00/14] port tag.c to use ref-filter APIs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Sep 7, 2015 at 12:03 PM, Junio C Hamano <gitster@xxxxxxxxx> wrote:
> Karthik Nayak <karthik.188@xxxxxxxxx> writes:
>
>> diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
>> index d039f40..c5154bb 100644
>> --- a/Documentation/git-for-each-ref.txt
>> +++ b/Documentation/git-for-each-ref.txt
>> @@ -128,13 +128,14 @@ color::
>>       are described in `color.branch.*`.
>>
>>  align::
>> -     Left-, middle-, or right-align the content between %(align:..)
>> +     Left-, middle-, or right-align the content between %(align:...)
>>       and %(end). Followed by `:<width>,<position>`, where the
>>       `<position>` is either left, right or middle and `<width>` is
>>       the total length of the content with alignment. If the
>>       contents length is more than the width then no alignment is
>>       performed. If used with '--quote' everything in between
>> -     %(align:..)  and %(end) is quoted.
>> +     %(align:...) and %(end) is quoted, but if nested then only the
>> +     topmost level performs quoting.
>
> I am not sure if the description of quote belongs to "align".  Isn't
> the general rule at the endgame when there are more opening things
> that would buffer its effect up to the corresponding %(end):
>
>  - Some atoms like %(align) and %(if) always require a matching
>    %(end).  We call them "opening atoms" and sometimes denote them
>    as %($open).
>
>  - When a scripting language specific quoting is in effect, except
>    for opening atoms, replacement from every %(atom) is quoted when
>    and only when it appears at the top-level (that is, when it
>    appears outside %($open)...%(end)).
>
>  - When a scripting language specific quoting is in effect,
>    everything between a top-level opening atom and its matching
>    %(end) is evaluated according to the semantics of the opening
>    atom and its result is quoted.
>
> To put the third item above in a different way, a matching
> %($open)...  %(end) pair behaves as if it is a single normal atom,
> from the point of view of the quoting rule.  All top-level atoms are
> invidivually quoted, whether they are normal atoms or open/end pairs.
> And that rule is not limited to %(align).
>
> I am flexible with the terminology, but the point is that I think
> the quoting rules are better be specified _outside_ the description
> of a particular atom, but as a general rule.
>

I definitely agree, but like Matthieu said, corrently we have only
one such atom and it makes sense to note this behaviour under that.
When we get %(if) to work we could move this over to a more general
section?

>> diff --git a/builtin/tag.c b/builtin/tag.c
>> index 9fa1400..f55dfda 100644
>> --- a/builtin/tag.c
>> +++ b/builtin/tag.c
>> @@ -43,8 +43,8 @@ static int list_tags(struct ref_filter *filter, struct ref_sorting *sorting, con
>>
>>       if (!format) {
>>               if (filter->lines)
>> -                     format = to_free = xstrfmt("%%(align:15,left)%%(refname:short)%%(end) %%(contents:lines=%d)",
>> -                                                filter->lines);
>> +                     format = to_free = xstrfmt("%%(align:15,left)%%(refname:short)%%(end) "
>> +                                                "%%(contents:lines=%d)", filter->lines);
>
> This line still looks overlong.  Would it help to stop spelling this
> as a double "a = b = overlong expression" assignment?
>

I'm not sure, I get what you mean.

>>       /*
>>        * Perform quote formatting when the stack element is that of
>> -      * a modifier atom and right above the first stack element.
>> +      * a supporting atom. If nested then perform quote formatting
>> +      * only on the topmost supporting atom.
>>        */
>>       if (!state->stack->prev->prev) {
>>               quote_formatting(&s, current->output.buf, state->quote_style);
>> @@ -261,6 +262,22 @@ static void end_atom_handler(struct atom_value *atomv, struct ref_formatting_sta
>>       pop_stack_element(&state->stack);
>>  }
>>
>> +static int match_atom_name(const char *name, const char *atom_name, const char **val)
>> +{
>> +     const char *body;
>> +
>> +     if (!skip_prefix(name, atom_name, &body))
>> +             return 0; /* doesn't even begin with "atom_name" */
>> +     if (!body[0] || !body[1]) {
>> +             *val = NULL; /* %(atom_name) and no customization */
>> +             return 1;
>> +     }
>
> This if condition is puzzling.  !body[0] would mean the name was
> exactly atom_name, which is what you want to catch.
>
> But the other part does not make any sense to me.  what does
> (body[0] != '\0' && !body[1]) mean?  atom_name asked for was "align"
> and name was "aligna"?  That is not "%(align) and no customization".
>

The idea was to ensure that the atom doesn't end at the ':'.

>> +     if (body[0] != ':')
>> +             return 0; /* "atom_namefoo" is not "atom_name" or "atom_name:..." */
>
> This one makes sense to me.
>
>> +     *val = body + 1; /* "atomname:val" */
>
> Spell that "atom_name:val" perhaps?

Yeah will do.

-- 
Regards,
Karthik Nayak
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]