Parsing trailers out of a commit message is _mostly_ easy, but there area a lot of funny corner cases (e.g., heuristics for how many non-trailers must be present before a final paragraph isn't a trailer block anymore). The code in trailer.c already knows about these corner cases, but there's no way to access it from the command line.
This series teaches interpret-trailers to parse and output just the trailers. So now you can do: $ git log --format=%B -1 8d44797cc91231cd44955279040dc4a1ee0a797f | git interpret-trailers --parse Signed-off-by: Hartmut Henkel <hen...@vh-s.de> Helped-by: Stefan Beller <sbel...@google.com> Signed-off-by: Ralf Thielow <ralf.thie...@gmail.com> Acked-by: Matthias Rüster <matthias.rues...@gmail.com> I considered a few different approaches before deciding on what's here: 1. The output format is actually the normal "key: value" trailers. I considered something more structured like JSON. But the "key: value" format is quite easy to parse, once it has been normalized (finding the trailers, unfolding whitespace continuation, etc). 2. This series introduces several orthogonal options which can be used together to achieve my goal, when there could just be a "parse" mode. Since interpret-trailers is plumbing, I reasoned that the individual options might still be useful apart from each other (for instance, you could re-normalize existing trailers while writing your new ones from a commit hook). I did add a "--parse" for convenience and to help point users in the right direction. For the same reason (and so we could build on other orthogonal features like --in-place and --trim-empty), I decided against having a separate command like "git parse-trailers". [1/5]: trailer: put process_trailers() options into a struct [2/5]: interpret-trailers: add an option to show only the trailers [3/5]: interpret-trailers: add an option to show only existing trailers [4/5]: interpret-trailers: add an option to normalize output [5/5]: interpret-trailers: add --parse convenience option Documentation/git-interpret-trailers.txt | 17 ++++++++ builtin/interpret-trailers.c | 34 ++++++++++++--- t/t7513-interpret-trailers.sh | 73 ++++++++++++++++++++++++++++++++ trailer.c | 65 ++++++++++++++++++++++------ trailer.h | 12 +++++- 5 files changed, 180 insertions(+), 21 deletions(-) -Peff