Junio C Hamano <gitster@xxxxxxxxx> writes: > A block of lines that appear as the last paragraph in a commit > message is a trailer block if and only if certain number or > percentage of lines are non-garbage lines according to the above > definition. > ... > I wonder if we can share a new helper function to do the detection > (and classification) of a trailer block and parsing the logical > lines out of a commit log message. The function signature could be > as simple as taking a single <const char *> (or a strbuf) that holds > a commit log message, and splitting it out into something like: > > struct { > const char *whole; > const char *end_of_message_proper; > struct { > const char *token; > const char *contents; > } *trailer; > int alloc_trailers, nr_trailers; > }; > > where > ... An addendum. We may also want to be prepared to accept an input that has some garbage lines _after_ the trailer block, if we can clearly identify them as such. For example, we could change the definition of "the last paragraph" as "the block of lines that do not have any empty (or blank) line, that appear either at the end of the input, or immediately before three-dash lines", to allow commit title explanation of the change Signed-off-by: Some Body <some@xxxxxxx> [some other things] Acked-by: Some Other Person <some@xxxxxxxx> --- additional comment which (unfortunately) is a rather common pattern for people who plan to send the commit over e-mail. If we add a new field "const char *beginning_of_tail_garbage" next to "end_of_message_proper" that points at the blank line before the three-dash line in the above example, the parser should be able to break such an input into a parsed form, allow the trailer[] array to be manipulated and reproduce a commit log message.