Some repositories contain commit messages that are insanely long. And not always is it an option to rewrite the commits with rewrapped commit messages; just think of cvsimports or some such. Now here is a remedy. With "--pretty=format:%w(8,6,70)" you will get the commit messages reformatted to width 70 where the first line has indent 8 and the subsequent lines have indent 6. The following command will output something similar to plain "git log --color", except that the commit bodies will be rewrapped to fit inside 80 columns: git log --pretty=format:'%C(yellow)commit %H%C(reset) Author: %an <%ae> Date: %ad %w(4,4,80)' Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- Documentation/pretty-formats.txt | 1 + pretty.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 0 deletions(-) diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt index 2a845b1..d727995 100644 --- a/Documentation/pretty-formats.txt +++ b/Documentation/pretty-formats.txt @@ -123,6 +123,7 @@ The placeholders are: - '%s': subject - '%f': sanitized subject line, suitable for a filename - '%b': body +- '%w(indent,indent2,width)': rewrapped subject and body - '%Cred': switch color to red - '%Cgreen': switch color to green - '%Cblue': switch color to blue diff --git a/pretty.c b/pretty.c index f5983f8..639469e 100644 --- a/pretty.c +++ b/pretty.c @@ -595,6 +595,30 @@ static void format_decoration(struct strbuf *sb, const struct commit *commit) strbuf_addch(sb, ')'); } +static int rewrap_text(struct strbuf *sb, const char *params, const char *text) +{ + int indent = 4, indent2 = 4, width = 80, pacmanned = 1; + + if (params[0] == '(') { + char *p; + + indent = strtoul(params + 1, &p, 0); + if (*p == ',') { + indent2 = strtoul(p + 1, &p, 0); + if (*p == ',') + width = strtoul(p + 1, &p, 0); + } + if (*p != ')') { + error ("Invalid parameters: %.*s", + (int)(p - params), params); + return 0; + } + pacmanned = p + 1 - params; + } + strbuf_add_wrapped_text(sb, text, indent, indent2, width); + return pacmanned; +} + static size_t format_commit_item(struct strbuf *sb, const char *placeholder, void *context) { @@ -735,6 +759,9 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder, case 'b': /* body */ strbuf_addstr(sb, msg + c->body_off); return 1; + case 'w': /* re-wrapped body */ + return rewrap_text(sb, placeholder + 1, + msg + c->subject_off) + 1; } return 0; /* unknown placeholder */ } -- 1.6.4.297.gcb4cc -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html