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

Re: [PATCH 7/7] shortlog: implement `--group=trailer` in terms of `--group=<format>`

From
Jeff King <peff@peff.net>
Date
Oct 11, 2022, 01:50 UTC
Message-ID
<Y0TL8unKev9TPytJ@coredump.intra.peff.net>
In-Reply-To
<02adc297e7661cbc25302b9f5659d2356b8b5008.1665448437.git.me@ttaylorr.com>
On Mon, Oct 10, 2022 at 08:34:21PM -0400, Taylor Blau wrote:
Show 11 quoted lines
> In the same spirit as the previous commit, reimplement
> `--group=trailer:<key>` as a special case of `--group=<format>`, too.
> 
> Unsurprisingly, this reimplementation is a little bit more complicated
> than the previous two. The complexity stems from having to enumerate
> each of the trailers one-by-one, as well as delegating control to
> `parse_ident()` to handle whether or not to show an individual's email.
> 
> To enumerate each trailer in a commit, we set the separator used in the
> pretty format to be a NUL byte. This hack allows us to treat the strbuf
> from `format_commit_message()` as an array of strings.

Hmph. So that's _probably_ OK, but I have to wonder if this is going too far. The resulting code is not that much shorter, and IMHO is actually a little more complicated, because of this hack and the extra util bit.

I also would be curious if there is any speed difference between the two.

I spent a fair bit of time optimizing the regular author/committer paths (and I think if we restore the skip-the-dedup logic I mentioned earlier for those, they should be equivalent, as they already use format_commit_message()). But the internals of the trailer code are already so slow I doubt it makes much of a difference either way here.

The one thing that could hurt is that multiple trailers now require multiple format calls, which may load the commit object for each one. I think _probably_ not because we'd hopefully have it cached in the commit slab via the save_commit_buffer mechanism. Though I guess if we used the commit graph in the first place, we would need to load it. We'd also likely reencode, but that's a noop on utf8 commits, so it's probably not worth worrying about.

-Peff
PS That last paragraph gives me the suspicion that there's some
   low-hanging optimization fruit here: we want save_commit_buffer on in
   general, but after we visit each commit, we probably should call
   free_commit_buffer() on it to get rid of it, like we do for git-log.
   Probably shortlog is keeping all of the commit messages in memory at
   once (though of course not if the commit-graph is in use).
   If the commit-graph _is_ in use, there's probably the opposite
   optimization we could be doing: we should make sure to load it once,
   then do all of the formats, and then unuse it.
   Those don't have to be part of your series, but might be worth
   looking into while you're in the area.
Previous: Taylor BlauNext: Jeff King
Message 31 of 72 in “shortlog: introduce `--group=<format>`”
  1. 0/7 shortlog: introduce `--group=<format>`Taylor Blau, Oct 11, 2022
  2. 1/7 Documentation: extract date-options.txtTaylor Blau, Oct 11, 2022
  3. Jeff KingOct 11, 2022
  4. Taylor BlauOct 11, 2022
  5. 2/7 shortlog: accept `--date`-related optionsTaylor Blau, Oct 11, 2022
  6. Jeff KingOct 11, 2022
  7. Taylor BlauOct 11, 2022
  8. 3/7 shortlog: extract `--group` fragment for translationTaylor Blau, Oct 11, 2022
  9. Ævar Arnfjörð BjarmasonOct 11, 2022
  10. Jeff KingOct 11, 2022
  11. 4/7 shortlog: support arbitrary commit format `--group`sTaylor Blau, Oct 11, 2022
  12. Jeff KingOct 11, 2022
  13. Taylor BlauOct 11, 2022
  14. Taylor BlauOct 11, 2022
  15. Jeff KingOct 11, 2022
  16. Jeff KingOct 11, 2022
  17. Taylor BlauOct 21, 2022
  18. Jeff KingOct 21, 2022
  19. Taylor BlauOct 21, 2022
  20. 5/7 shortlog: implement `--group=author` in terms of `--group=<format>`Taylor Blau, Oct 11, 2022
  21. Jeff KingOct 11, 2022
  22. Taylor BlauOct 11, 2022
  23. Jeff KingOct 11, 2022
  24. Taylor BlauOct 21, 2022
  25. Taylor BlauOct 21, 2022
  26. Jeff KingOct 21, 2022
  27. Taylor BlauOct 21, 2022
  28. Ævar Arnfjörð BjarmasonOct 11, 2022
  29. Ævar Arnfjörð BjarmasonOct 11, 2022
  30. 7/7 shortlog: implement `--group=trailer` in terms of `--group=<format>`Taylor Blau, Oct 11, 2022
  31. Jeff KingOct 11, 2022
  32. Jeff KingOct 11, 2022
  33. Taylor BlauOct 21, 2022
  34. 6/7 shortlog: implement `--group=committer` in terms of `--group=<format>`Taylor Blau, Oct 11, 2022
  35. Jeff KingOct 11, 2022
  36. 0/6 shortlog: introduce `--group=<format>`Taylor Blau, Oct 21, 2022
  37. 1/6 shortlog: accept `--date`-related optionsTaylor Blau, Oct 21, 2022
  38. Jeff KingOct 21, 2022
  39. Taylor BlauOct 21, 2022
  40. 2/6 shortlog: make trailer insertion a noop when appropriateTaylor Blau, Oct 21, 2022
  41. Jeff KingOct 21, 2022
  42. Taylor BlauOct 21, 2022
  43. 3/6 shortlog: extract `--group` fragment for translationTaylor Blau, Oct 21, 2022
  44. Jeff KingOct 21, 2022
  45. 4/6 shortlog: support arbitrary commit format `--group`sTaylor Blau, Oct 21, 2022
  46. Jeff KingOct 21, 2022
  47. Taylor BlauOct 21, 2022
  48. 5/6 shortlog: implement `--group=author` in terms of `--group=<format>`Taylor Blau, Oct 21, 2022
  49. Jeff KingOct 21, 2022
  50. 6/6 shortlog: implement `--group=committer` in terms of `--group=<format>`Taylor Blau, Oct 21, 2022
  51. Jeff KingOct 21, 2022
  52. Jeff KingOct 21, 2022
  53. 0/7 shortlog: introduce `--group=<format>`Taylor Blau, Oct 21, 2022
  54. 1/7 shortlog: accept `--date`-related optionsTaylor Blau, Oct 21, 2022
  55. 2/7 shortlog: make trailer insertion a noop when appropriateTaylor Blau, Oct 21, 2022
  56. 4/7 shortlog: support arbitrary commit format `--group`sTaylor Blau, Oct 21, 2022
  57. Jeff KingOct 22, 2022
  58. 5/7 shortlog: extract `shortlog_finish_setup()`Taylor Blau, Oct 21, 2022
  59. 6/7 shortlog: implement `--group=author` in terms of `--group=<format>`Taylor Blau, Oct 21, 2022
  60. 3/7 shortlog: extract `--group` fragment for translationTaylor Blau, Oct 21, 2022
  61. 7/7 shortlog: implement `--group=committer` in terms of `--group=<format>`Taylor Blau, Oct 21, 2022
  62. Jeff KingOct 22, 2022
  63. 0/7 shortlog: introduce `--group=<format>`Taylor Blau, Oct 24, 2022
  64. 7/7 shortlog: implement `--group=committer` in terms of `--group=<format>`Taylor Blau, Oct 24, 2022
  65. 5/7 shortlog: extract `shortlog_finish_setup()`Taylor Blau, Oct 24, 2022
  66. 4/7 shortlog: support arbitrary commit format `--group`sTaylor Blau, Oct 24, 2022
  67. 3/7 shortlog: extract `--group` fragment for translationTaylor Blau, Oct 24, 2022
  68. 1/7 shortlog: accept `--date`-related optionsTaylor Blau, Oct 24, 2022
  69. 6/7 shortlog: implement `--group=author` in terms of `--group=<format>`Taylor Blau, Oct 24, 2022
  70. 2/7 shortlog: make trailer insertion a noop when appropriateTaylor Blau, Oct 24, 2022
  71. Junio C HamanoOct 24, 2022
  72. Jeff KingOct 24, 2022

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.