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

[PATCH v6 0/9] Enrich Trailer API

From
LGLinus Arver via GitGitGadget <gitgitgadget@gmail.com>
Date
Mar 1, 2024, 00:14 UTC
Message-ID
<pull.1632.v6.git.1709252086.gitgitgadget@gmail.com>
In-Reply-To
<pull.1632.v5.git.1708124950.gitgitgadget@gmail.com>

This patch series is the first 9 patches of a larger cleanup/bugfix series (henceforth "larger series") I've been working on. The main goal of this series is to begin the process of "libifying" the trailer API. By "API" I mean the interface exposed in trailer.h. The larger series brings a number of additional cleanups (exposing and fixing some bugs along the way), and builds on top of this series.

When the larger series is merged, we will be in a good state to additionally pursue the following goals:

 1. "API reuse inside Git": make the API expressive enough to eliminate any
    need by other parts of Git to use the interpret-trailers builtin as a
    subprocess (instead they could just use the API directly);
 2. "API stability": add unit tests to codify the expected behavior of API
    functions; and
 3. "API documentation": create developer-focused documentation to explain
    how to use the API effectively, noting any API limitations or
    anti-patterns.

In the future after libification is "complete", users external to Git will be able to use the same trailer processing API used by the interpret-trailers builtin. For example, a web server may want to parse trailers the same way that Git would parse them, without having to call interpret-trailers as a subprocess. This use case was the original motivation behind my work in this area.

With the libification-focused goals out of the way, let's turn to this patch series in more detail.

In summary this series breaks up "process_trailers()" into smaller pieces, exposing many of the parts relevant to trailer-related processing in trailer.h. This will force us to eventually introduce unit tests for these API functions, but that is a good thing for API stability. We also perform some preparatory refactors in order to help us unify the trailer formatting machinery toward the end of this series.

Notable changes in v6 =====================

 * Mainly wording changes to commit messages. Thanks to Christian for the
   suggestions.

Notable changes in v5 =====================

 * Removed patches 10+ from this series. Thanks to Christian for the
   suggestion.
 * Reworded the log message of patch 09 to reflect the above arrangement, as
   suggested by Christian.

Notable changes in v4 =====================

 * Patches 3, 4, 5, and 8 have been broken up into smaller steps. There are
   28 instead of 10 patches now, but these 28 should be much easier to
   review than the (previously condensed) 10.
 * NEW Patch 1: "trailer: free trailer_info after all related usage" fixes
   awkward use-after-free coding style
 * NEW Patch 2: "shortlog: add test for de-duplicating folded trailers"
   increases test coverage related to trailer iterators and "unfold_value()"
 * NEW Patch 27: "trailer_set_*(): put out parameter at the end" is a small
   refactor to reorder parameters.
 * Patches 5-16: These smaller patches make up Patch 3 from v3.
 * Patches 17-18: These smaller patches make up Patch 4 from v3.
 * Patches 19-20: These smaller patches make up Patch 5 from v3.
 * Patches 23-26: These smaller patches make up Patch 8 from v3.
 * Anonymize unambiguous parameters in <trailer.h>.

Notable changes in v3 =====================

 * Squashed Patch 4 into Patch 3 ("trailer: unify trailer formatting
   machinery"), to avoid breaking the build ("-Werror=unused-function"
   violations)
 * NEW (Patch 10): Introduce "trailer template" terminology for readability
   (no behavioral change)
 * (API function) Rename default_separators() to
   trailer_default_separators()
 * (API function) Rename new_trailers_clear() to free_trailer_templates()
 * trailer.h: for single-parameter functions, anonymize the parameter name
   to reduce verbosity

Notable changes in v2 =====================

 * (cover letter) Discuss goals of the larger series in more detail,
   especially the pimpl idiom
 * (cover letter) List bug fixes pending in the larger series that depend on
   this series
 * Reorder function parameters to have trailer options at the beginning (and
   out parameters toward the end)
 * "sequencer: use the trailer iterator": prefer C string instead of strbuf
   for new "raw" field
 * Patch 1 (was Patch 2) also renames ensure_configured() to
   trailer_config_init() (forgot to rename this one previously)
Linus Arver (9):
  trailer: free trailer_info _after_ all related usage
  shortlog: add test for de-duplicating folded trailers
  trailer: rename functions to use 'trailer'
  trailer: move interpret_trailers() to interpret-trailers.c
  trailer: reorder format_trailers_from_commit() parameters
  trailer_info_get(): reorder parameters
  format_trailers(): use strbuf instead of FILE
  format_trailer_info(): move "fast path" to caller
  format_trailers_from_commit(): indirectly call trailer_info_get()
 builtin/interpret-trailers.c | 101 ++++++++++++++++++-
 pretty.c                     |   2 +-
 ref-filter.c                 |   2 +-
 sequencer.c                  |   2 +-
 t/t4201-shortlog.sh          |  32 +++++++
 trailer.c                    | 181 +++++++++--------------------------
 trailer.h                    |  31 ++++--
 7 files changed, 204 insertions(+), 147 deletions(-)
base-commit: a54a84b333adbecf7bc4483c0e36ed5878cac17b
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1632%2Flistx%2Ftrailer-api-refactor-part-1-v6
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1632/listx/trailer-api-refactor-part-1-v6
Pull-Request: https://github.com/gitgitgadget/git/pull/1632
Range-diff vs v5:
  1:  652df25f30e =  1:  652df25f30e trailer: free trailer_info _after_ all related usage
  2:  fdccaca2ba0 =  2:  fdccaca2ba0 shortlog: add test for de-duplicating folded trailers
  3:  4372af244f0 !  3:  7b1d739cddb trailer: prepare to expose functions as part of API
     @@ Metadata
      Author: Linus Arver <linusa@google.com>
      
       ## Commit message ##
     -    trailer: prepare to expose functions as part of API
     +    trailer: rename functions to use 'trailer'
      
     -    In the next patch, we will move "process_trailers" from trailer.c to
     -    builtin/interpret-trailers.c. That move will necessitate the growth of
     -    the trailer.h API, forcing us to expose some additional functions in
     +    Rename process_trailers() to interpret_trailers(), because it matches
     +    the name for the builtin command of the same name
     +    (git-interpret-trailers), which is the sole user of process_trailers().
     +
     +    In a following commit, we will move "interpret_trailers" from trailer.c
     +    to builtin/interpret-trailers.c. That move will necessitate the growth
     +    of the trailer.h API, forcing us to expose some additional functions in
          trailer.h.
      
          Rename relevant functions so that they include the term "trailer" in
     @@ Commit message
          them by their "trailer" moniker, just like all the other functions
          already exposed by trailer.h.
      
     -    Take the opportunity to start putting trailer processing options (opts)
     -    as the first parameter. This will be the pattern going forward in this
     -    series.
     +    Rename `struct list_head *head` to `struct list_head *trailers` because
     +    "head" conveys no additional information beyond the "list_head" type.
     +
     +    Reorder parameters for format_trailers_from_commit() to prefer
     +
     +        const struct process_trailer_options *opts
     +
     +    as the first parameter, because these options are intimately tied to
     +    formatting trailers. Parameters like `FILE *outfile` should be last
     +    because they are a kind of 'out' parameter, so put such parameters at
     +    the end. This will be the pattern going forward in this series.
      
          Helped-by: Junio C Hamano <gitster@pobox.com>
     +    Helped-by: Christian Couder <chriscool@tuxfamily.org>
          Signed-off-by: Linus Arver <linusa@google.com>
      
       ## builtin/interpret-trailers.c ##
  4:  4073b8eb510 =  4:  7ac4da3019a trailer: move interpret_trailers() to interpret-trailers.c
  5:  b2a0f7829a1 !  5:  47c994ce025 trailer: start preparing for formatting unification
     @@ Metadata
      Author: Linus Arver <linusa@google.com>
      
       ## Commit message ##
     -    trailer: start preparing for formatting unification
     +    trailer: reorder format_trailers_from_commit() parameters
      
          Currently there are two functions for formatting trailers in
          <trailer.h>:
     @@ Commit message
          last, because it's an "out parameter" (something that the caller wants
          to use as the output of this function).
      
     +    Similarly, reorder parameters for format_trailer_info(), because later
     +    on we will unify the two together.
     +
          Signed-off-by: Linus Arver <linusa@google.com>
      
       ## pretty.c ##
  6:  c1760f80356 =  6:  7a565580167 trailer_info_get(): reorder parameters
  7:  9dc912b5bc5 =  7:  46c7f4c0e81 format_trailers(): use strbuf instead of FILE
  8:  b97c06d8bc3 =  8:  26b1f19d0e1 format_trailer_info(): move "fast path" to caller
  9:  7c656b3f775 !  9:  0e884d870c8 format_trailers_from_commit(): indirectly call trailer_info_get()
     @@ Commit message
      
          This is another preparatory refactor to unify the trailer formatters.
      
     -    Instead of calling trailer_info_get() directly, call parse_trailers()
     -    which already calls trailer_info_get(). This change is a NOP because
     -    format_trailer_info() only looks at the "trailers" string array, not the
     -    trailer_item objects which parse_trailers() populates.
     +    For background, note that the "trailers" string array is the
     +    `char **trailers` member in `struct trailer_info` and that the
     +    trailer_item objects are the elements of the `struct list_head *head`
     +    linked list.
     +
     +    Currently trailer_info_get() only populates `char **trailers`. And
     +    parse_trailers() first calls trailer_info_get() so that it can use the
     +    `char **trailers` to populate a list of `struct trailer_item` objects
     +
     +    Instead of calling trailer_info_get() directly from
     +    format_trailers_from_commit(), make it call parse_trailers() instead
     +    because parse_trailers() already calls trailer_info_get().
     +
     +    This change is a NOP because format_trailer_info() (which
     +    format_trailers_from_commit() wraps around) only looks at the "trailers"
     +    string array, not the trailer_item objects which parse_trailers()
     +    populates. For now we do need to create a dummy
     +
     +        LIST_HEAD(trailer_objects);
     +
     +    because parse_trailers() expects it in its signature.
      
          In a future patch, we'll change format_trailer_info() to use the parsed
     -    trailer_item objects instead of the string array.
     +    trailer_item objects (trailer_objects) instead of the `char **trailers`
     +    array.
      
          Signed-off-by: Linus Arver <linusa@google.com>
      
     @@ trailer.c: void format_trailers_from_commit(const struct process_trailer_options
       				 const char *msg,
       				 struct strbuf *out)
       {
     -+	LIST_HEAD(trailers);
     ++	LIST_HEAD(trailer_objects);
       	struct trailer_info info;
       
      -	trailer_info_get(opts, msg, &info);
     -+	parse_trailers(opts, &info, msg, &trailers);
     ++	parse_trailers(opts, &info, msg, &trailer_objects);
      +
       	/* If we want the whole block untouched, we can take the fast path. */
       	if (!opts->only_trailers && !opts->unfold && !opts->filter &&
     @@ trailer.c: void format_trailers_from_commit(const struct process_trailer_options
       	} else
       		format_trailer_info(opts, &info, out);
       
     -+	free_trailers(&trailers);
     ++	free_trailers(&trailer_objects);
       	trailer_info_release(&info);
       }
       
-- 
gitgitgadget
Previous: Christian CouderNext: Linus Arver via GitGitGadget
Message 187 of 202 in “Enrich Trailer API”
  1. 00/10 Enrich Trailer APILinus Arver via GitGitGadget, Jan 10, 2024
  2. 01/10 trailer: move process_trailers() to interpret-trailers.cLinus Arver via GitGitGadget, Jan 10, 2024
  3. Junio C HamanoJan 18, 2024
  4. Linus ArverJan 19, 2024
  5. 02/10 trailer: include "trailer" term in API functionsLinus Arver via GitGitGadget, Jan 10, 2024
  6. Junio C HamanoJan 18, 2024
  7. Linus ArverJan 19, 2024
  8. Junio C HamanoJan 19, 2024
  9. 03/10 trailer: unify trailer formatting machineryLinus Arver via GitGitGadget, Jan 10, 2024
  10. Junio C HamanoJan 18, 2024
  11. Linus ArverJan 19, 2024
  12. 04/10 trailer: delete obsolete formatting functionsLinus Arver via GitGitGadget, Jan 10, 2024
  13. Junio C HamanoJan 19, 2024
  14. 05/10 sequencer: use the trailer iteratorLinus Arver via GitGitGadget, Jan 10, 2024
  15. Junio C HamanoJan 19, 2024
  16. Linus ArverJan 20, 2024
  17. Linus ArverJan 22, 2024
  18. 06/10 trailer: make trailer_info struct privateLinus Arver via GitGitGadget, Jan 10, 2024
  19. Junio C HamanoJan 19, 2024
  20. Josh SteadmonJan 25, 2024
  21. Junio C HamanoJan 25, 2024
  22. 07/10 trailer: spread usage of "trailer_block" languageLinus Arver via GitGitGadget, Jan 10, 2024
  23. Junio C HamanoJan 19, 2024
  24. Linus ArverJan 20, 2024
  25. 08/10 trailer: prepare to move parse_trailers_from_command_line_args() to builtinLinus Arver via GitGitGadget, Jan 10, 2024
  26. Josh SteadmonJan 25, 2024
  27. Linus ArverJan 26, 2024
  28. 09/10 trailer: move arg handling to interpret-trailers.cLinus Arver via GitGitGadget, Jan 10, 2024
  29. Junio C HamanoJan 19, 2024
  30. Linus ArverJan 20, 2024
  31. 10/10 trailer: delete obsolete argument handling code from APILinus Arver via GitGitGadget, Jan 10, 2024
  32. Junio C HamanoJan 10, 2024
  33. Linus ArverJan 13, 2024
  34. Linus ArverJan 14, 2024
  35. Josh SteadmonJan 25, 2024
  36. 00/10 Enrich Trailer APILinus Arver via GitGitGadget, Jan 26, 2024
  37. 01/10 trailer: prepare to expose functions as part of APILinus Arver via GitGitGadget, Jan 26, 2024
  38. Josh SteadmonJan 30, 2024
  39. Linus ArverJan 30, 2024
  40. 02/10 trailer: move interpret_trailers() to interpret-trailers.cLinus Arver via GitGitGadget, Jan 26, 2024
  41. 03/10 trailer: unify trailer formatting machineryLinus Arver via GitGitGadget, Jan 26, 2024
  42. Josh SteadmonJan 30, 2024
  43. Linus ArverJan 30, 2024
  44. 04/10 trailer: delete obsolete formatting functionsLinus Arver via GitGitGadget, Jan 26, 2024
  45. 05/10 sequencer: use the trailer iteratorLinus Arver via GitGitGadget, Jan 26, 2024
  46. 06/10 trailer: make trailer_info struct privateLinus Arver via GitGitGadget, Jan 26, 2024
  47. 07/10 trailer: spread usage of "trailer_block" languageLinus Arver via GitGitGadget, Jan 26, 2024
  48. 08/10 trailer: prepare to move parse_trailers_from_command_line_args() to builtinLinus Arver via GitGitGadget, Jan 26, 2024
  49. 09/10 trailer: move arg handling to interpret-trailers.cLinus Arver via GitGitGadget, Jan 26, 2024
  50. Linus ArverJan 28, 2024
  51. Linus ArverJan 28, 2024
  52. 10/10 trailer: delete obsolete argument handling code from APILinus Arver via GitGitGadget, Jan 26, 2024
  53. 00/10 Enrich Trailer APILinus Arver via GitGitGadget, Jan 31, 2024
  54. 01/10 trailer: prepare to expose functions as part of APILinus Arver via GitGitGadget, Jan 31, 2024
  55. 02/10 trailer: move interpret_trailers() to interpret-trailers.cLinus Arver via GitGitGadget, Jan 31, 2024
  56. Junio C HamanoJan 31, 2024
  57. Linus ArverJan 31, 2024
  58. 03/10 trailer: unify trailer formatting machineryLinus Arver via GitGitGadget, Jan 31, 2024
  59. Josh SteadmonJan 31, 2024
  60. Linus ArverJan 31, 2024
  61. Junio C HamanoFeb 1, 2024
  62. Linus ArverFeb 1, 2024
  63. Junio C HamanoJan 31, 2024
  64. Junio C HamanoJan 31, 2024
  65. Linus ArverFeb 1, 2024
  66. Junio C HamanoFeb 1, 2024
  67. Junio C HamanoFeb 1, 2024
  68. Linus ArverFeb 1, 2024
  69. Junio C HamanoFeb 1, 2024
  70. Linus ArverFeb 2, 2024
  71. Junio C HamanoFeb 2, 2024
  72. Linus ArverJan 31, 2024
  73. 04/10 sequencer: use the trailer iteratorLinus Arver via GitGitGadget, Jan 31, 2024
  74. Junio C HamanoFeb 1, 2024
  75. Linus ArverFeb 1, 2024
  76. Linus ArverFeb 3, 2024
  77. 05/10 trailer: make trailer_info struct privateLinus Arver via GitGitGadget, Jan 31, 2024
  78. Junio C HamanoFeb 1, 2024
  79. Linus ArverFeb 3, 2024
  80. Junio C HamanoFeb 3, 2024
  81. 06/10 trailer: spread usage of "trailer_block" languageLinus Arver via GitGitGadget, Jan 31, 2024
  82. Junio C HamanoFeb 1, 2024
  83. Linus ArverFeb 3, 2024
  84. 07/10 trailer: prepare to move parse_trailers_from_command_line_args() to builtinLinus Arver via GitGitGadget, Jan 31, 2024
  85. Junio C HamanoFeb 1, 2024
  86. 08/10 trailer: move arg handling to interpret-trailers.cLinus Arver via GitGitGadget, Jan 31, 2024
  87. Junio C HamanoFeb 1, 2024
  88. Linus ArverFeb 3, 2024
  89. Linus ArverFeb 6, 2024
  90. 09/10 trailer: delete obsolete argument handling code from APILinus Arver via GitGitGadget, Jan 31, 2024
  91. Junio C HamanoFeb 1, 2024
  92. Linus ArverFeb 3, 2024
  93. 10/10 trailer: introduce "template" term for readabilityLinus Arver via GitGitGadget, Jan 31, 2024
  94. 00/28 Enrich Trailer APILinus Arver via GitGitGadget, Feb 6, 2024
  95. 01/28 trailer: free trailer_info _after_ all related usageLinus Arver via GitGitGadget, Feb 6, 2024
  96. 02/28 shortlog: add test for de-duplicating folded trailersLinus Arver via GitGitGadget, Feb 6, 2024
  97. 03/28 trailer: prepare to expose functions as part of APILinus Arver via GitGitGadget, Feb 6, 2024
  98. 04/28 trailer: move interpret_trailers() to interpret-trailers.cLinus Arver via GitGitGadget, Feb 6, 2024
  99. 05/28 trailer: start preparing for formatting unificationLinus Arver via GitGitGadget, Feb 6, 2024
  100. 06/28 trailer_info_get(): reorder parametersLinus Arver via GitGitGadget, Feb 6, 2024
  101. 07/28 format_trailers(): use strbuf instead of FILELinus Arver via GitGitGadget, Feb 6, 2024
  102. 08/28 format_trailer_info(): move "fast path" to callerLinus Arver via GitGitGadget, Feb 6, 2024
  103. 09/28 format_trailers_from_commit(): indirectly call trailer_info_get()Linus Arver via GitGitGadget, Feb 6, 2024
  104. 10/28 format_trailer_info(): use trailer_item objectsLinus Arver via GitGitGadget, Feb 6, 2024
  105. Junio C HamanoFeb 9, 2024
  106. Linus ArverFeb 13, 2024
  107. 11/28 format_trailer_info(): drop redundant unfold_value()Linus Arver via GitGitGadget, Feb 6, 2024
  108. Junio C HamanoFeb 9, 2024
  109. 12/28 format_trailer_info(): append newline for non-trailer linesLinus Arver via GitGitGadget, Feb 6, 2024
  110. Junio C HamanoFeb 9, 2024
  111. Christian CouderFeb 12, 2024
  112. Linus ArverFeb 13, 2024
  113. 13/28 trailer: begin formatting unificationLinus Arver via GitGitGadget, Feb 6, 2024
  114. 14/28 format_trailer_info(): teach it about opts->trim_emptyLinus Arver via GitGitGadget, Feb 6, 2024
  115. Christian CouderFeb 12, 2024
  116. Linus ArverFeb 13, 2024
  117. Christian CouderFeb 13, 2024
  118. 15/28 format_trailer_info(): avoid double-printing the separatorLinus Arver via GitGitGadget, Feb 6, 2024
  119. Christian CouderFeb 12, 2024
  120. Linus ArverFeb 13, 2024
  121. Christian CouderFeb 13, 2024
  122. Linus ArverFeb 13, 2024
  123. Linus ArverMar 15, 2024
  124. Kristoffer HaugsbakkFeb 13, 2024
  125. 16/28 trailer: finish formatting unificationLinus Arver via GitGitGadget, Feb 6, 2024
  126. Junio C HamanoFeb 9, 2024
  127. Christian CouderFeb 12, 2024
  128. Linus ArverFeb 13, 2024
  129. 17/28 trailer: teach iterator about non-trailer linesLinus Arver via GitGitGadget, Feb 6, 2024
  130. 18/28 sequencer: use the trailer iteratorLinus Arver via GitGitGadget, Feb 6, 2024
  131. 19/28 trailer: make trailer_info struct privateLinus Arver via GitGitGadget, Feb 6, 2024
  132. Junio C HamanoFeb 9, 2024
  133. Linus ArverFeb 13, 2024
  134. Christian CouderFeb 12, 2024
  135. Linus ArverFeb 13, 2024
  136. 20/28 trailer: retire trailer_info_get() from APILinus Arver via GitGitGadget, Feb 6, 2024
  137. 21/28 trailer: spread usage of "trailer_block" languageLinus Arver via GitGitGadget, Feb 6, 2024
  138. Christian CouderFeb 12, 2024
  139. Linus ArverFeb 13, 2024
  140. 22/28 trailer: prepare to delete "parse_trailers_from_command_line_args()"Linus Arver via GitGitGadget, Feb 6, 2024
  141. Christian CouderFeb 12, 2024
  142. Linus ArverFeb 13, 2024
  143. 23/28 trailer: add new helper functions to APILinus Arver via GitGitGadget, Feb 6, 2024
  144. Christian CouderFeb 12, 2024
  145. Linus ArverFeb 13, 2024
  146. 24/28 trailer_add_arg_item(): drop new_trailer_item usageLinus Arver via GitGitGadget, Feb 6, 2024
  147. 25/28 trailer: deprecate "new_trailer_item" struct from APILinus Arver via GitGitGadget, Feb 6, 2024
  148. 26/28 trailer: unify "--trailer ..." arg handlingLinus Arver via GitGitGadget, Feb 6, 2024
  149. Christian CouderFeb 12, 2024
  150. Linus ArverFeb 13, 2024
  151. 27/28 trailer_set_*(): put out parameter at the endLinus Arver via GitGitGadget, Feb 6, 2024
  152. Christian CouderFeb 12, 2024
  153. Linus ArverFeb 13, 2024
  154. 28/28 trailer: introduce "template" term for readabilityLinus Arver via GitGitGadget, Feb 6, 2024
  155. Christian CouderFeb 12, 2024
  156. Linus ArverFeb 13, 2024
  157. Christian CouderFeb 12, 2024
  158. Junio C HamanoFeb 13, 2024
  159. Christian CouderFeb 13, 2024
  160. Junio C HamanoFeb 13, 2024
  161. Christian CouderFeb 13, 2024
  162. Linus ArverFeb 16, 2024
  163. Linus ArverFeb 13, 2024
  164. Junio C HamanoFeb 13, 2024
  165. Kristoffer HaugsbakkFeb 13, 2024
  166. Christian CouderFeb 13, 2024
  167. Linus ArverFeb 16, 2024
  168. 0/9 Enrich Trailer APILinus Arver via GitGitGadget, Feb 16, 2024
  169. 1/9 trailer: free trailer_info _after_ all related usageLinus Arver via GitGitGadget, Feb 16, 2024
  170. 2/9 shortlog: add test for de-duplicating folded trailersLinus Arver via GitGitGadget, Feb 16, 2024
  171. 3/9 trailer: prepare to expose functions as part of APILinus Arver via GitGitGadget, Feb 16, 2024
  172. Christian CouderFeb 19, 2024
  173. Linus ArverFeb 29, 2024
  174. Junio C HamanoFeb 29, 2024
  175. Linus ArverFeb 29, 2024
  176. 4/9 trailer: move interpret_trailers() to interpret-trailers.cLinus Arver via GitGitGadget, Feb 16, 2024
  177. 5/9 trailer: start preparing for formatting unificationLinus Arver via GitGitGadget, Feb 16, 2024
  178. Christian CouderFeb 19, 2024
  179. Linus ArverFeb 29, 2024
  180. 6/9 trailer_info_get(): reorder parametersLinus Arver via GitGitGadget, Feb 16, 2024
  181. 7/9 format_trailers(): use strbuf instead of FILELinus Arver via GitGitGadget, Feb 16, 2024
  182. 8/9 format_trailer_info(): move "fast path" to callerLinus Arver via GitGitGadget, Feb 16, 2024
  183. 9/9 format_trailers_from_commit(): indirectly call trailer_info_get()Linus Arver via GitGitGadget, Feb 16, 2024
  184. Christian CouderFeb 19, 2024
  185. Linus ArverFeb 29, 2024
  186. Christian CouderFeb 19, 2024
  187. 0/9 Enrich Trailer APILinus Arver via GitGitGadget, Mar 1, 2024
  188. 1/9 trailer: free trailer_info _after_ all related usageLinus Arver via GitGitGadget, Mar 1, 2024
  189. 2/9 shortlog: add test for de-duplicating folded trailersLinus Arver via GitGitGadget, Mar 1, 2024
  190. 3/9 trailer: rename functions to use 'trailer'Linus Arver via GitGitGadget, Mar 1, 2024
  191. 4/9 trailer: move interpret_trailers() to interpret-trailers.cLinus Arver via GitGitGadget, Mar 1, 2024
  192. 5/9 trailer: reorder format_trailers_from_commit() parametersLinus Arver via GitGitGadget, Mar 1, 2024
  193. 6/9 trailer_info_get(): reorder parametersLinus Arver via GitGitGadget, Mar 1, 2024
  194. 7/9 format_trailers(): use strbuf instead of FILELinus Arver via GitGitGadget, Mar 1, 2024
  195. 8/9 format_trailer_info(): move "fast path" to callerLinus Arver via GitGitGadget, Mar 1, 2024
  196. 9/9 format_trailers_from_commit(): indirectly call trailer_info_get()Linus Arver via GitGitGadget, Mar 1, 2024
  197. Junio C HamanoMar 5, 2024
  198. Josh SteadmonMar 5, 2024
  199. Junio C HamanoMar 5, 2024
  200. Christian CouderMar 6, 2024
  201. Junio C HamanoMar 6, 2024
  202. Junio C HamanoMar 6, 2024

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.