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

Re: [PATCH v2 01/18] cat-file: split expand_atom into 2 functions

From
Jeff King <peff@peff.net>
Date
Jan 15, 2018, 22:09 UTC
Message-ID
<20180115220946.GF4778@sigill.intra.peff.net>
In-Reply-To
<20180115213335.GB4778@sigill.intra.peff.net>
On Mon, Jan 15, 2018 at 04:33:35PM -0500, Jeff King wrote:
Show 21 quoted lines
> That works, but I don't think it's where we want to end up in the long
> run. Because:
> 
>   1. We still have the set of formats duplicated between expand_atom()
>      and the "preparation" step. It's just that the preparation is now
>      in ref-filter.c. What happens if ref-filter.c learns new formatting
>      placeholders (or options for those placeholders) that cat-file.c
>      doesn't, or vice versa? The two have to be kept in sync.
> 
>   2. We're missing out on all of the other placeholders that ref-filter
>      knows about. Not all of them are meaningful (e.g., %(refname)
>      wouldn't make sense here), but part of our goal is to support the
>      same set of placeholders as much as possible. Some obvious ones
>      that ought to work for cat-file: %(objectname:short), %(if), and
>      things like %(subject) when the appropriate object type is used.
> 
> In other words, I think the endgame is that expand_atom() isn't there at
> all, and we're calling the equivalent of format_ref_item() for each
> object (except that in a unified formatting world, it probably doesn't
> have the word "ref" in it, since that's just one of the items a caller
> might pass in).

I read carefully up through about patch 6, and then skimmed through the rest. I think we really want to push this in the direction of more unification, as above. I know that the patches here may be a step on the way, but I had a hard time evaluating each patch to see if it was leading us in the right direction.

I think what would help for reviewing this is:
  1. Start with a cover letter that makes it clear what the end state of
     the series is, and why that's the right place to end up.
  2. Include a rough roadmap of the patches in the cover letter.
     Hopefully they should group into a few obvious steps (like "in
     patches 1-5, we're teaching ref-filter to support everything that
     cat-file can do, then in 6-10 we're preparing cat-file for the
     conversion, and then in 11 we do the conversion"). If it doesn't
     form a coherent narrative, then it may be worth stepping back and
     thinking about combining or reordering the patches in a different
     way, so that the progression becomes more plain.
     I think one of the things that makes the progression here hard to
     understand (for me, anyway) is that it's "inside out" of what I'd
     expect. There's a lot of code movement happening first, and then
     refactoring and simplifying after that. So between those two steps,
     there's a lot of interim ugliness (e.g., having to reach across
     module boundaries to look at expand_data). It's hard to tell when
     looking at each individual patch how necessary the ugliness is, and
     whether and when it's going to go away later in the series.

There's a lot of good work here, and you've figured out a lot about how the two systems function. I think we just need to rearrange things a bit to make sure each step is moving in the right direction.

-Peff
Previous: Jeff KingNext: Оля Тележная
Message 42 of 47 in “cat-file: split expand_atom into 2 functions”
  1. 01/18 cat-file: split expand_atom into 2 functionsOlga Telezhnaya, Jan 10, 2018
  2. 14/18 ref-filter: get rid of expand_atom_into_fieldsOlga Telezhnaya, Jan 10, 2018
  3. 15/18 ref-filter: add is_cat flagOlga Telezhnaya, Jan 10, 2018
  4. 16/18 ref_format: add split_on_whitespace flagOlga Telezhnaya, Jan 10, 2018
  5. 08/18 ref-filter: get rid of gotoOlga Telezhnaya, Jan 10, 2018
  6. 18/18 ref-filter: make cat_file_info independentOlga Telezhnaya, Jan 10, 2018
  7. 02/18 cat-file: reuse struct ref_formatOlga Telezhnaya, Jan 10, 2018
  8. Jeff KingJan 15, 2018
  9. Оля ТележнаяJan 16, 2018
  10. 07/18 cat-file: remove unused codeOlga Telezhnaya, Jan 10, 2018
  11. 10/18 cat-file: get rid of duplicate checkingOlga Telezhnaya, Jan 10, 2018
  12. 17/18 cat-file: move skip_object_info into ref-filterOlga Telezhnaya, Jan 10, 2018
  13. 05/18 cat-file: start migrating to ref-filterOlga Telezhnaya, Jan 10, 2018
  14. 09/18 cat-file: simplify expand_atom functionOlga Telezhnaya, Jan 10, 2018
  15. 13/18 cat-file: start reusing populate_valueOlga Telezhnaya, Jan 10, 2018
  16. 11/18 cat-file: start use ref_array_item structOlga Telezhnaya, Jan 10, 2018
  17. 06/18 ref-filter: reuse parse_ref_filter_atomOlga Telezhnaya, Jan 10, 2018
  18. 12/18 ref-filter: make populate_value globalOlga Telezhnaya, Jan 10, 2018
  19. 04/18 cat-file: move struct expand_data into ref-filterOlga Telezhnaya, Jan 10, 2018
  20. Jeff KingJan 15, 2018
  21. Оля ТележнаяJan 16, 2018
  22. Jeff KingJan 17, 2018
  23. Оля ТележнаяJan 18, 2018
  24. 03/18 ref-filter: make valid_atom as function parameterOlga Telezhnaya, Jan 10, 2018
  25. Jeff KingJan 15, 2018
  26. Оля ТележнаяJan 16, 2018
  27. Jeff KingJan 17, 2018
  28. Christian CouderJan 17, 2018
  29. Оля ТележнаяJan 18, 2018
  30. Оля ТележнаяJan 18, 2018
  31. Christian CouderJan 18, 2018
  32. Оля ТележнаяJan 19, 2018
  33. Christian CouderJan 19, 2018
  34. Christian CouderJan 19, 2018
  35. Оля ТележнаяJan 19, 2018
  36. Christian CouderJan 19, 2018
  37. Jeff KingJan 19, 2018
  38. Christian CouderJan 19, 2018
  39. Junio C HamanoJan 19, 2018
  40. Jeff KingJan 19, 2018
  41. Jeff KingJan 15, 2018
  42. Jeff KingJan 15, 2018
  43. Оля ТележнаяJan 16, 2018
  44. Jeff KingJan 17, 2018
  45. Christian CouderJan 17, 2018
  46. Оля ТележнаяJan 18, 2018
  47. Christian CouderJan 18, 2018

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.