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 26, 2020, 15:18 UTC
Message-ID
<CA+CkUQ_M=q9bkxjM9b+5DRkRBoFRnzhnsCUB-gX9GEeW6H5SVw@mail.gmail.com>
In-Reply-To
<CAP8UFD03Am94_84FvRPxEdt_AG74864eQ4TimggKtUYWjJYqCg@mail.gmail.com>
Hi,

On Wed, Aug 26, 2020 at 11:48 AM Christian Couder <christian.couder@gmail.com> wrote:

Show 32 quoted lines
>
> Hi,
>
> On Tue, Aug 25, 2020 at 1:32 AM Hariom verma <hariom18599@gmail.com> wrote:
>
> > On Mon, Aug 24, 2020 at 9:19 AM Eric Sunshine <sunshine@sunshineco.com> wrote:
>
> > > 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.
>
> I am not sure about the "subarg" part of the name. In the for-each-ref
> doc, names inside %(...) are called "field names", and parts after ":"
> are called "options". So it might be better to have "field_option"
> instead of "subarg" in the name.
>
> I think we could also get rid of the "match_and_" part of the
> suggestion, in the same way as skip_prefix() is not called
> match_and_skip_prefix(). Readers can just expect that if there is no
> match the function will return 0.
>
> So maybe "extract_field_option()".
Makes sense to me.
Show 57 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.
>
> Yeah, it seems to me that such a splitting would require a complete
> rewrite of the current code, so I am not sure it's an interesting way
> forward for now. And anyway adding extract_field_option() goes in the
> right direction of abstracting the parsing and making the code
> simpler, more efficient and likely more correct.
>
> > Sorry, If I got your concerned wrong.
> >
> > > 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.
>
> I also prefer a slightly more optimal one even if it's a bit less compact.
+1

Thanks, Hariom

Previous: Christian CouderNext: Hariom Verma via GitGitGadget
Message 21 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.