git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 2/2] ref-filter: 'contents:trailers' show error if `:` is missing

From
Hariom verma <hariom18599@gmail.com>
Date
Aug 24, 2020, 23:32 UTC
Message-ID
<CA+CkUQ_eRqOB8Ushg-BcEmjRxEZSs7tmPnZcb8GUTwz3R55Xhg@mail.gmail.com>
In-Reply-To
<CAPig+cScdV1ORSbqDuUiOEvCd6TYgkR=3GK8OCUu4yuoKVy5Pg@mail.gmail.com>
Hi,
On Mon, Aug 24, 2020 at 9:19 AM Eric Sunshine <sunshine@sunshineco.com> wrote:
Show 39 quoted lines
>
> On Sun, Aug 23, 2020 at 8:56 PM Hariom verma <hariom18599@gmail.com> wrote:
> > On Sat, Aug 22, 2020 at 12:47 AM Junio C Hamano <gitster@pobox.com> wrote:
> > > Eric Sunshine <sunshine@sunshineco.com> writes:
> > > > ...an alternative would have been something like:
> > > >
> > > >   else if (!strcmp(arg, "trailers")) {
> > > >     if (trailers_atom_parser(format, atom, NULL, err))
> > > >       return -1;
> > > >   } else if (skip_prefix(arg, "trailers:", &arg)) {
> > > >     if (trailers_atom_parser(format, atom, arg, err))
> > > >       return -1;
> > > >   }
> > > >
> > > > which is quite simple to reason about (though has the cost of a tiny
> > > > bit of duplication).
> > >
> > > Yeah, that looks quite simple and straight-forward.
> >
> > Recently, I sent a patch series "Improvements to ref-filter"[1]. A
> > patch in this patch series introduced "sanitize" modifier to "subject"
> > atom. i.e "%(subject:sanitize)".
> >
> > What if in the future we also want "%(contents:subject:sanitize)" to work?
> > We can use this helper any number of times, whenever there is a need.
> >
> > Sorry, I missed saying this earlier. But I don't prefer duplicating
> > the code here.
>
> Pushing back on a reviewer suggestion is fine. Explaining the reason
> for your position -- as you do here -- helps reviewers understand why
> you feel the way you do. My review suggestion about making it easier
> to reason about the code while avoiding a brand new function, at the
> cost of a minor amount of duplication, was made in the context of this
> one-off case in which the function increased cognitive load and was
> used just once (not knowing that you envisioned future callers). If
> you expect the new function to be re-used by upcoming changes, then
> that may be a good reason to keep it. Stating so in the commit message
> will help reviewers see beyond the immediate patch or patch series.
Yeah. I should have mentioned this in the commit message.
Show 10 quoted lines
> Aside from a couple minor style violations[1,2], I don't particularly
> oppose the helper function, though I have a quibble with the name
> check_format_field(), which I don't find helpful, and which (at least
> for me) increases the cognitive load. The increased cognitive load, I
> think, comes not only from the function name not spelling out what the
> function actually does, but also because the function is dual-purpose:
> it's both checking that the argument matches a particular token
> ("trailers", in this case) and extracting the sub-argument. Perhaps
> naming it match_and_extract_subarg() or something similar would help,
> though that's a mouthful.

I will fix those violations. Also, "match_and_extract_subarg()" looks good to me.

Show 12 quoted lines
> But the observation about the function being dual-purpose (thus
> potentially confusing) brings up other questions. For instance, is it
> too special-purpose? If you foresee more callers in the future with
> multiple-token arguments such as `%(content:subject:sanitize)`, should
> the function provide more assistance by splitting out each of the
> sub-arguments rather than stopping at the first? Taking that even
> further, a generalized helper for "splitting" arguments like that
> might be useful at the top-level of contents_atom_parser() too, rather
> than only for specific arguments, such as "trailers". Of course, this
> may all be way too ambitious for this little bug fix series or even
> for whatever upcoming changes you're planning, thus not worth
> pursuing.

Splitting sub-arguments is done at "<atomname>_atom_parser()". If you mean pre-splitting every argument... something like: ['contents', 'subject', 'sanitize'] for `%(content:subject:sanitize)` in `contents_atom_parser()` ? I'm not able to see how it can be useful.

Sorry, If I got your concerned wrong.
Show 22 quoted lines
> As for the helper's implementation, I might have written it like this:
>
>     static int check_format_field(...)
>     {
>         const char *opt
>         if (!strcmp(arg, field))
>             *option = NULL;
>         else if (skip_prefix(arg, field, opt) && *opt == ':')
>             *option = opt + 1;
>         else
>             return 0;
>         return 1;
>     }
>
> which is more compact and closer to what I suggested earlier for
> avoiding the helper function in the first place. But, of course,
> programming is quite subjective, and you may find your implementation
> easier to reason about. Plus, your version has the benefit of being
> slightly more optimal since it avoids an extra string scan, although
> that probably is mostly immaterial considering that
> contents_atom_parser() itself contains a long chain of potentially
> sub-optimal strcmp() and skip_prefix() calls.

"programming is quite subjective" Yeah, I couldn't agree more.

The change you suggested looks good too. But I'm little inclined to my keeping my changes. I'm curious, what others have to say on this.

Thanks, Hariom

Previous: Eric SunshineNext: Christian Couder
Message 18 of 31 in “Fix trailers atom bug and improved tests”
  1. 0/2 Fix trailers atom bug and improved testsHariom Verma via GitGitGadget, Aug 19, 2020
  2. 1/2 t6300: unify %(trailers) and %(contents:trailers) testsHariom Verma via GitGitGadget, Aug 19, 2020
  3. Junio C HamanoAug 19, 2020
  4. Hariom vermaAug 21, 2020
  5. 2/2 ref-filter: 'contents:trailers' show error if `:` is missingHariom Verma via GitGitGadget, Aug 19, 2020
  6. Junio C HamanoAug 19, 2020
  7. Junio C HamanoAug 19, 2020
  8. Eric SunshineAug 19, 2020
  9. Junio C HamanoAug 19, 2020
  10. Hariom vermaAug 20, 2020
  11. 0/2 Fix trailers atom bug and improved testsHariom Verma via GitGitGadget, Aug 21, 2020
  12. 1/2 t6300: unify %(trailers) and %(contents:trailers) testsHariom Verma via GitGitGadget, Aug 21, 2020
  13. 2/2 ref-filter: 'contents:trailers' show error if `:` is missingHariom Verma via GitGitGadget, Aug 21, 2020
  14. Eric SunshineAug 21, 2020
  15. Junio C HamanoAug 21, 2020
  16. Hariom vermaAug 23, 2020
  17. Eric SunshineAug 24, 2020
  18. Hariom vermaAug 24, 2020
  19. Christian CouderAug 26, 2020
  20. Christian CouderAug 26, 2020
  21. Hariom vermaAug 26, 2020
  22. 0/4 [GSoC] Fix trailers atom bug and improved testsHariom Verma via GitGitGadget, Aug 21, 2020
  23. 1/4 t6300: unify %(trailers) and %(contents:trailers) testsHariom Verma via GitGitGadget, Aug 21, 2020
  24. 2/4 ref-filter: 'contents:trailers' show error if `:` is missingHariom Verma via GitGitGadget, Aug 21, 2020
  25. Eric SunshineAug 21, 2020
  26. Hariom vermaAug 21, 2020
  27. Junio C HamanoAug 21, 2020
  28. 4/4 ref-filter: using pretty.c logic for trailersHariom Verma via GitGitGadget, Aug 21, 2020
  29. 3/4 pretty.c: refactor trailer logic to `format_set_trailers_options()`Hariom Verma via GitGitGadget, Aug 21, 2020
  30. Junio C HamanoAug 21, 2020
  31. Hariom vermaAug 22, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.