pretty: add %(trailers) format for displaying trailers of a commit message
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 %(trailers) format modifier which will use the trailer_info_get() calls to read trailers in an identical way as git interpret-trailers does. Use a long format option instead of a short name so that future work can more easily unify ref-filter and pretty formats. Add documentation and tests for the same. Signed-off-by: Jacob Keller <jacob.keller@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
967dfd4d56
commit
d9f31fbfe9
@ -199,6 +199,8 @@ endif::git-rev-list[]
|
|||||||
than given and there are spaces on its left, use those spaces
|
than given and there are spaces on its left, use those spaces
|
||||||
- '%><(<N>)', '%><|(<N>)': similar to '% <(<N>)', '%<|(<N>)'
|
- '%><(<N>)', '%><|(<N>)': similar to '% <(<N>)', '%<|(<N>)'
|
||||||
respectively, but padding both sides (i.e. the text is centered)
|
respectively, but padding both sides (i.e. the text is centered)
|
||||||
|
-%(trailers): display the trailers of the body as interpreted by
|
||||||
|
linkgit:git-interpret-trailers[1]
|
||||||
|
|
||||||
NOTE: Some placeholders may depend on other options given to the
|
NOTE: Some placeholders may depend on other options given to the
|
||||||
revision traversal engine. For example, the `%g*` reflog options will
|
revision traversal engine. For example, the `%g*` reflog options will
|
||||||
|
17
pretty.c
17
pretty.c
@ -10,6 +10,7 @@
|
|||||||
#include "color.h"
|
#include "color.h"
|
||||||
#include "reflog-walk.h"
|
#include "reflog-walk.h"
|
||||||
#include "gpg-interface.h"
|
#include "gpg-interface.h"
|
||||||
|
#include "trailer.h"
|
||||||
|
|
||||||
static char *user_format;
|
static char *user_format;
|
||||||
static struct cmt_fmt_map {
|
static struct cmt_fmt_map {
|
||||||
@ -889,6 +890,16 @@ const char *format_subject(struct strbuf *sb, const char *msg,
|
|||||||
return 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)
|
static void parse_commit_message(struct format_commit_context *c)
|
||||||
{
|
{
|
||||||
const char *msg = c->message + c->message_off;
|
const char *msg = c->message + c->message_off;
|
||||||
@ -1292,6 +1303,12 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
|
|||||||
strbuf_addstr(sb, msg + c->body_off);
|
strbuf_addstr(sb, msg + c->body_off);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (starts_with(placeholder, "(trailers)")) {
|
||||||
|
format_trailers(sb, msg + c->subject_off);
|
||||||
|
return strlen("(trailers)");
|
||||||
|
}
|
||||||
|
|
||||||
return 0; /* unknown placeholder */
|
return 0; /* unknown placeholder */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,4 +535,30 @@ test_expect_success 'clean log decoration' '
|
|||||||
test_cmp expected actual1
|
test_cmp expected actual1
|
||||||
'
|
'
|
||||||
|
|
||||||
|
cat >trailers <<EOF
|
||||||
|
Signed-off-by: A U Thor <author@example.com>
|
||||||
|
Acked-by: A U Thor <author@example.com>
|
||||||
|
[ v2 updated patch description ]
|
||||||
|
Signed-off-by: A U Thor <author@example.com>
|
||||||
|
EOF
|
||||||
|
|
||||||
|
test_expect_success 'pretty format %(trailers) 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="%(trailers)" >actual &&
|
||||||
|
cat >expect <<-EOF &&
|
||||||
|
$(cat trailers)
|
||||||
|
|
||||||
|
EOF
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user