From: Jacob Keller <jacob.keller@xxxxxxxxx> Recent patches have expanded on the trailers.c code and we have the builtin commant git-interpret-trailers which can be used to add or modify trailer lines. However, there is no easy way to simply display the trailers of a commit message. Add support for %bT format modifier which will use the trailer_info_get() calls to read trailers in an identical way as git interpret-trailers does. Add documentation and tests for the same. Signed-off-by: Jacob Keller <jacob.keller@xxxxxxxxx> --- Documentation/pretty-formats.txt | 1 + pretty.c | 18 ++++++++++++++++++ t/t4205-log-pretty-formats.sh | 26 ++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt index 3bcee2ddb124..9ee68a4cb64a 100644 --- a/Documentation/pretty-formats.txt +++ b/Documentation/pretty-formats.txt @@ -138,6 +138,7 @@ The placeholders are: - '%s': subject - '%f': sanitized subject line, suitable for a filename - '%b': body +- '%bT': trailers of body as interpreted by linkgit:git-interpret-trailers[1] - '%B': raw body (unwrapped subject and body) ifndef::git-rev-list[] - '%N': commit notes diff --git a/pretty.c b/pretty.c index 37b2c3b1f995..ea8764334865 100644 --- a/pretty.c +++ b/pretty.c @@ -10,6 +10,7 @@ #include "color.h" #include "reflog-walk.h" #include "gpg-interface.h" +#include "trailer.h" static char *user_format; static struct cmt_fmt_map { @@ -889,6 +890,16 @@ const char *format_subject(struct strbuf *sb, const char *msg, return msg; } +static void format_trailers(struct strbuf *sb, const char *msg) +{ + struct trailer_info info; + + trailer_info_get(&info, msg); + strbuf_add(sb, info.trailer_start, + info.trailer_end - info.trailer_start); + trailer_info_release(&info); +} + static void parse_commit_message(struct format_commit_context *c) { const char *msg = c->message + c->message_off; @@ -1289,6 +1300,13 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */ format_sanitized_subject(sb, msg + c->subject_off); return 1; case 'b': /* body */ + switch (placeholder[1]) { + case 'T': + format_trailers(sb, msg + c->subject_off); + return 2; + default: + break; + } strbuf_addstr(sb, msg + c->body_off); return 1; } diff --git a/t/t4205-log-pretty-formats.sh b/t/t4205-log-pretty-formats.sh index f5435fd250ba..7a35941ddcbd 100755 --- a/t/t4205-log-pretty-formats.sh +++ b/t/t4205-log-pretty-formats.sh @@ -535,4 +535,30 @@ test_expect_success 'clean log decoration' ' test_cmp expected actual1 ' +cat >trailers <<EOF +Signed-off-by: A U Thor <author@xxxxxxxxxxx> +Acked-by: A U Thor <author@xxxxxxxxxxx> +[ v2 updated patch description ] +Signed-off-by: A U Thor <author@xxxxxxxxxxx> +EOF + +test_expect_success 'pretty format %bT shows trailers' ' + echo "Some contents" >trailerfile && + git add trailerfile && + git commit -F - <<-EOF && + trailers: this commit message has trailers + + This commit is a test commit with trailers at the end. We parse this + message and display the trailers using %bT + + $(cat trailers) + EOF + git log --no-walk --pretty="%bT" >actual && + cat >expect <<-EOF && + $(cat trailers) + + EOF + test_cmp expect actual +' + test_done -- 2.11.0.rc2.152.g4d04e67