From: John Cai <johncai86@xxxxxxxxx> * log-tree.c: pass in format, oneline, abbrev so format_decorations can print a newline with an indentation. * log-tree.h: adding parameters in header file * pretty.c: pass in arguments format, oneline to format_decorations call but these don't get used in this context Signed-off-by: John Cai <johncai86@xxxxxxxxx> --- log-tree.c | 20 ++++++++++++++++---- log-tree.h | 7 +++++-- pretty.c | 4 ++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/log-tree.c b/log-tree.c index 644893fd8cf..d2f1eeeebf5 100644 --- a/log-tree.c +++ b/log-tree.c @@ -285,6 +285,9 @@ static void show_name(struct strbuf *sb, const struct name_decoration *decoratio void format_decorations_extended(struct strbuf *sb, const struct commit *commit, int use_color, + int format, + int abbrev_len, + int newline, const char *prefix, const char *separator, const char *suffix) @@ -333,11 +336,16 @@ void format_decorations_extended(struct strbuf *sb, strbuf_addstr(sb, color_commit); strbuf_addstr(sb, suffix); strbuf_addstr(sb, color_reset); + if ((format == CMIT_FMT_ONELINE) && newline == 1) { + strbuf_addstr(sb, "\n"); + strbuf_addchars(sb, ' ', abbrev_len); + } } void show_decorations(struct rev_info *opt, struct commit *commit) { struct strbuf sb = STRBUF_INIT; + int newline = 0; if (opt->sources) { char **slot = revision_sources_peek(opt->sources, commit); @@ -347,7 +355,11 @@ void show_decorations(struct rev_info *opt, struct commit *commit) } if (!opt->show_decorations) return; - format_decorations(&sb, commit, opt->diffopt.use_color); + + if (opt->newlineafter == NEWLINEAFTER_DECORATIONS) + newline = 1; + + format_decorations(&sb, commit, opt->diffopt.use_color, opt->commit_format, opt->abbrev, newline); fputs(sb.buf, opt->diffopt.file); strbuf_release(&sb); } @@ -623,6 +635,7 @@ void show_log(struct rev_info *opt) int abbrev_commit = opt->abbrev_commit ? opt->abbrev : the_hash_algo->hexsz; const char *extra_headers = opt->extra_headers; struct pretty_print_context ctx = {0}; + char hex[GIT_MAX_HEXSZ + 1]; opt->loginfo = NULL; if (!opt->verbose_header) { @@ -692,9 +705,8 @@ void show_log(struct rev_info *opt) if (!opt->graph) put_revision_mark(opt, commit); - fputs(find_unique_abbrev(&commit->object.oid, - abbrev_commit), - opt->diffopt.file); + opt->abbrev = find_unique_abbrev_r(hex, &commit->object.oid, abbrev_commit); + fputs(hex, opt->diffopt.file); if (opt->print_parents) show_parents(commit, abbrev_commit, opt->diffopt.file); if (opt->children.name) diff --git a/log-tree.h b/log-tree.h index e7e4641cf83..a401e659d4c 100644 --- a/log-tree.h +++ b/log-tree.h @@ -19,11 +19,14 @@ int log_tree_commit(struct rev_info *, struct commit *); void show_log(struct rev_info *opt); void format_decorations_extended(struct strbuf *sb, const struct commit *commit, int use_color, + int format, + int abbrev_len, + int newline, const char *prefix, const char *separator, const char *suffix); -#define format_decorations(strbuf, commit, color) \ - format_decorations_extended((strbuf), (commit), (color), " (", ", ", ")") +#define format_decorations(strbuf, commit, color, format, abbrev_len, newline) \ + format_decorations_extended((strbuf), (commit), (color), (format), (abbrev_len), (newline), " (", ", ", ")") void show_decorations(struct rev_info *opt, struct commit *commit); void log_write_email_headers(struct rev_info *opt, struct commit *commit, const char **extra_headers_p, diff --git a/pretty.c b/pretty.c index fe95107ae5a..98144deac5c 100644 --- a/pretty.c +++ b/pretty.c @@ -1385,10 +1385,10 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */ strbuf_addstr(sb, get_revision_mark(NULL, commit)); return 1; case 'd': - format_decorations(sb, commit, c->auto_color); + format_decorations(sb, commit, c->auto_color, c->pretty_ctx->fmt, 0, 0); return 1; case 'D': - format_decorations_extended(sb, commit, c->auto_color, "", ", ", ""); + format_decorations_extended(sb, commit, c->auto_color, c->pretty_ctx->fmt, 0, 0, "", ", ", ""); return 1; case 'S': /* tag/branch like --source */ if (!(c->pretty_ctx->rev && c->pretty_ctx->rev->sources)) -- gitgitgadget