@@ -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)
@@ -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,
@@ -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))