git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Eric Sunshine <sunshine@sunshineco.com>
To: Karthik Nayak <karthik.188@gmail.com>
Cc: Git List <git@vger.kernel.org>, Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 11/11] ref-filter: introduce objectname_atom_parser()
Date: Fri, 25 Dec 2015 13:09:46 -0500	[thread overview]
Message-ID: <CAPig+cRb2rWX53dkrbEU5+QUf7z69J7X-P-JUsCLuRYZ4ny-Ag@mail.gmail.com> (raw)
In-Reply-To: <CAOLa=ZSV9NmAcC+yguacWqcwLDnmBZd-arwzk+WnjtM2J1eC_Q@mail.gmail.com>

On Fri, Dec 25, 2015 at 8:44 AM, Karthik Nayak <karthik.188@gmail.com> wrote:
> On Fri, Dec 18, 2015 at 11:54 AM, Eric Sunshine <sunshine@sunshineco.com> wrote:
>> On Wed, Dec 16, 2015 at 10:30 AM, Karthik Nayak <karthik.188@gmail.com> wrote:
>>> +static void objectname_atom_parser(struct used_atom *atom)
>>> +{
>>> +       const char * buf;
>>> +
>>> +       if (match_atom_name(atom->str, "objectname", &buf))
>>> +               atom->u.objectname = O_FULL;
>>> +       if (!buf)
>>> +               return;
>>
>> make_atom_name("objectname") will return true only for "objectname" or
>> "objectname:", and will return false for anything else, such as
>> "objectnamely" or "schmorf". Furthermore, the only way
>> objectname_atom_parser() can be called is when %(objectname) or
>> %(objectname:...) is seen, thus match_atom_name() *must* return true
>> here, which means the above conditional is misleading, suggesting that
>> it could somehow return false.
>>
>> And, if match_atom_name() did return false here, then that indicates a
>> programming error: objectname_atom_parser() somehow got called for
>> something other than %(objectname) or %(objectname:...). This implies
>> that the code should instead be structured like this:
>>
>>     if (!match_atom_name(..., "objectname", &buf)
>>         die("BUG: parsing non-'objectname'")
>>     if (!buf)
>>         atom->u.objectname = O_FULL;
>>     else if (!strcmp(buf, "short"))
>>         atom->u.objectname = O_SHORT;
>>     else
>>         die(_("unrecognized %%(objectname) argument: %s"), buf);
>>
>> However, this can be simplified further by recognizing that, following
>> this patch series, match_atom_name() is *only* called by these new
>> parse functions[1], which means that, as a convenience,
>> match_atom_name() itself could become a void rather than boolean
>> function and die() if the expected atom name is not found. Thus, the
>> code would become:
>>
>>     match_atom_name(...);
>>     if (!buf)
>>         ...
>>     else if (!strcmp(...))
>>         ...
>>     ...
>>
>> By the way, the above commentary isn't specific to this patch and
>> %(objectname), but is in fact also relevant for all of the preceding
>> patches which introduce parse functions calling match_atom_name().
>
> Ah! Thats some good observation, makes sense, match_atom_name()
> is only called after the atom name, so making it return a indication of
> success or failure doesn't make sense.
>
> I think this change would go nicely with the introduction of 'enum atom_type'
> which you mentioned[0] in the previous series.

I'm not sure to which change you refer as going nicely with the 'enum
atom_type'.

The observation above is about misleading logic in this series which
makes the code confusing. At the very least, the present series should
clean up the logic to reflect the first example above.

Changing match_atom_name() from boolean to void, as in the second
example above, is a nice little cleanup, but less important and
needn't be in this series (though it would just be one minor patch at
the end of the series).

  reply	other threads:[~2015-12-25 18:10 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-16 15:29 [PATCH v2 00/11] ref-filter: use parsing functions Karthik Nayak
2015-12-16 15:29 ` [PATCH v2 01/11] strbuf: introduce strbuf_split_str_without_term() Karthik Nayak
2015-12-16 20:35   ` Eric Sunshine
2015-12-17  8:24     ` Karthik Nayak
2015-12-16 15:29 ` [PATCH v2 02/11] ref-filter: use strbuf_split_str_omit_term() Karthik Nayak
2015-12-16 15:29 ` [PATCH v2 03/11] ref-filter: introduce struct used_atom Karthik Nayak
2015-12-16 20:57   ` Eric Sunshine
2015-12-19  4:42     ` Karthik Nayak
2015-12-16 15:29 ` [PATCH v2 04/11] ref-fitler: bump match_atom() name to the top Karthik Nayak
2015-12-16 15:29 ` [PATCH v2 05/11] ref-filter: skip deref specifier in match_atom_name() Karthik Nayak
2015-12-16 21:11   ` Eric Sunshine
2015-12-19  5:07     ` Karthik Nayak
2015-12-16 15:29 ` [PATCH v2 06/11] ref-filter: introduce color_atom_parser() Karthik Nayak
2015-12-16 21:21   ` Eric Sunshine
2015-12-19  6:00     ` Karthik Nayak
2015-12-16 15:29 ` [PATCH v2 07/11] ref-filter: introduce align_atom_parser() Karthik Nayak
2015-12-16 21:54   ` Eric Sunshine
2015-12-19 11:12     ` Karthik Nayak
2015-12-19 11:35       ` Karthik Nayak
2015-12-18  5:50   ` Eric Sunshine
2015-12-16 15:29 ` [PATCH v2 08/11] ref-filter: introduce prefixes for the align atom Karthik Nayak
2015-12-17  8:59   ` Eric Sunshine
2015-12-31 13:19     ` Karthik Nayak
2015-12-16 15:30 ` [PATCH v2 09/11] ref-filter: introduce remote_ref_atom_parser() Karthik Nayak
2015-12-17  9:22   ` Eric Sunshine
2015-12-24  7:42     ` Karthik Nayak
2015-12-16 15:30 ` [PATCH v2 10/11] ref-filter: introduce contents_atom_parser() Karthik Nayak
2015-12-17  9:39   ` Eric Sunshine
2015-12-24  8:27     ` Karthik Nayak
2015-12-16 15:30 ` [PATCH v2 11/11] ref-filter: introduce objectname_atom_parser() Karthik Nayak
2015-12-18  6:24   ` Eric Sunshine
2015-12-25 13:44     ` Karthik Nayak
2015-12-25 18:09       ` Eric Sunshine [this message]
2015-12-25 18:24         ` Karthik Nayak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAPig+cRb2rWX53dkrbEU5+QUf7z69J7X-P-JUsCLuRYZ4ny-Ag@mail.gmail.com \
    --to=sunshine@sunshineco.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=karthik.188@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).