X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=log-tree.c;h=b67b8dd17af9643e00152d9bd768dca89e08b4ce;hb=06c084d28b150ac1e2ed0c6f3ce7db6ca42dfc67;hp=e86e16bcad94962a10b99cc90b0b542666b67c49;hpb=423a15c849487fda5dc5cdfc15658062cfdd11b0;p=git.git diff --git a/log-tree.c b/log-tree.c index e86e16bca..b67b8dd17 100644 --- a/log-tree.c +++ b/log-tree.c @@ -43,15 +43,16 @@ static int append_signoff(char *buf, int buf_sz, int at, const char *signoff) return at; } -void show_log(struct rev_info *opt, struct log_info *log, const char *sep) +void show_log(struct rev_info *opt, const char *sep) { static char this_header[16384]; + struct log_info *log = opt->loginfo; struct commit *commit = log->commit, *parent = log->parent; int abbrev = opt->diffopt.abbrev; int abbrev_commit = opt->abbrev_commit ? opt->abbrev : 40; const char *extra; int len; - char *subject = NULL, *after_subject = NULL; + const char *subject = NULL, *extra_headers = opt->extra_headers; opt->loginfo = NULL; if (!opt->verbose_header) { @@ -96,10 +97,16 @@ void show_log(struct rev_info *opt, struct log_info *log, const char *sep) subject = "Subject: "; printf("From %s Mon Sep 17 00:00:00 2001\n", sha1); + if (opt->message_id) + printf("Message-Id: <%s>\n", opt->message_id); + if (opt->ref_message_id) + printf("In-Reply-To: <%s>\nReferences: <%s>\n", + opt->ref_message_id, opt->ref_message_id); if (opt->mime_boundary) { static char subject_buffer[1024]; static char buffer[1024]; snprintf(subject_buffer, sizeof(subject_buffer) - 1, + "%s" "MIME-Version: 1.0\n" "Content-Type: multipart/mixed;\n" " boundary=\"%s%s\"\n" @@ -110,9 +117,10 @@ void show_log(struct rev_info *opt, struct log_info *log, const char *sep) "Content-Type: text/plain; " "charset=UTF-8; format=fixed\n" "Content-Transfer-Encoding: 8bit\n\n", + extra_headers ? extra_headers : "", mime_boundary_leader, opt->mime_boundary, mime_boundary_leader, opt->mime_boundary); - after_subject = subject_buffer; + extra_headers = subject_buffer; snprintf(buffer, sizeof(buffer) - 1, "--%s%s\n" @@ -126,7 +134,8 @@ void show_log(struct rev_info *opt, struct log_info *log, const char *sep) opt->diffopt.stat_sep = buffer; } } else { - printf("%s%s", + printf("%s%s%s", + diff_get_color(opt->diffopt.color_diff, DIFF_COMMIT), opt->commit_format == CMIT_FMT_ONELINE ? "" : "commit ", diff_unique_abbrev(commit->object.sha1, abbrev_commit)); if (opt->parents) @@ -135,13 +144,15 @@ void show_log(struct rev_info *opt, struct log_info *log, const char *sep) printf(" (from %s)", diff_unique_abbrev(parent->object.sha1, abbrev_commit)); + printf("%s", + diff_get_color(opt->diffopt.color_diff, DIFF_RESET)); putchar(opt->commit_format == CMIT_FMT_ONELINE ? ' ' : '\n'); } /* * And then the pretty-printed message itself */ - len = pretty_print_commit(opt->commit_format, commit, ~0u, this_header, sizeof(this_header), abbrev, subject, after_subject); + len = pretty_print_commit(opt->commit_format, commit, ~0u, this_header, sizeof(this_header), abbrev, subject, extra_headers); if (opt->add_signoff) len = append_signoff(this_header, sizeof(this_header), len, @@ -161,8 +172,22 @@ int log_tree_diff_flush(struct rev_info *opt) return 0; } - if (opt->loginfo && !opt->no_commit_id) - show_log(opt, opt->loginfo, opt->diffopt.with_stat ? "---\n" : "\n"); + if (opt->loginfo && !opt->no_commit_id) { + /* When showing a verbose header (i.e. log message), + * and not in --pretty=oneline format, we would want + * an extra newline between the end of log and the + * output for readability. + */ + show_log(opt, opt->diffopt.msg_sep); + if (opt->verbose_header && + opt->commit_format != CMIT_FMT_ONELINE) { + int pch = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH; + if ((pch & opt->diffopt.output_format) == pch) + printf("---%c", opt->diffopt.line_termination); + else + putchar(opt->diffopt.line_termination); + } + } diff_flush(&opt->diffopt); return 1; } @@ -259,7 +284,7 @@ int log_tree_commit(struct rev_info *opt, struct commit *commit) shown = log_tree_diff(opt, commit, &log); if (!shown && opt->loginfo && opt->always_show_header) { log.parent = NULL; - show_log(opt, opt->loginfo, ""); + show_log(opt, ""); shown = 1; } opt->loginfo = NULL;