From e6fcb549b190352ceee3cd6875c3eba8854e209a Mon Sep 17 00:00:00 2001 From: Johannes Gilger Date: Sat, 19 Sep 2009 11:58:24 +0200 Subject: [PATCH] [NEEDSWORK: tests] git-log --format: Add %B tag with %B(x) option Since one can simply use spaces to indent any other --pretty field we should have an option to do that with the body too. Also the %B flag strips the trailing newlines, to enable more compact display. Signed-off-by: Johannes Gilger Signed-off-by: Junio C Hamano --- Documentation/pretty-formats.txt | 2 ++ pretty.c | 26 +++++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt index 2a845b1e57..87d1779a5b 100644 --- a/Documentation/pretty-formats.txt +++ b/Documentation/pretty-formats.txt @@ -123,6 +123,8 @@ The placeholders are: - '%s': subject - '%f': sanitized subject line, suitable for a filename - '%b': body +- '%B': body without trailing newline +- '%B(n)': body indented by n spaces - '%Cred': switch color to red - '%Cgreen': switch color to green - '%Cblue': switch color to blue diff --git a/pretty.c b/pretty.c index f5983f8baa..86004c2f17 100644 --- a/pretty.c +++ b/pretty.c @@ -603,15 +603,18 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder, const char *msg = commit->buffer; struct commit_list *p; int h1, h2; + const char *body = msg + c->body_off; + const char *end = NULL; + + /* check if we have arguments to the placeholder */ + if (placeholder[1] == '(') + end = strchr(placeholder + 2, ')'); /* these are independent of the commit */ switch (placeholder[0]) { case 'C': - if (placeholder[1] == '(') { - const char *end = strchr(placeholder + 2, ')'); + if (end) { char color[COLOR_MAXLEN]; - if (!end) - return 0; color_parse_mem(placeholder + 2, end - (placeholder + 2), "--pretty format", color); @@ -733,7 +736,20 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder, format_sanitized_subject(sb, msg + c->subject_off); return 1; case 'b': /* body */ - strbuf_addstr(sb, msg + c->body_off); + strbuf_addstr(sb, body); + return 1; + case 'B': /* body without trailing newline */ + if (end) { + char *endp = NULL; + int indent = strtol(placeholder + 2, &endp, 10); + if (placeholder + 2 == endp || *endp != ')' || indent < 0) + return 0; + pp_remainder(CMIT_FMT_MEDIUM, &body, sb, indent); + strbuf_rtrim(sb); + return end - placeholder + 1; + } + strbuf_addstr(sb, body); + strbuf_rtrim(sb); return 1; } return 0; /* unknown placeholder */ -- 2.32.0.93.g670b81a890