Display author (name, email, date) and committer (name, email, date) after creating a new commit to ensure that the user is alerted in the event that they are set in an undesirable manner. This patch seeks to accomplish the following goal: all data included in the commit which are sha1-protected (and therefore immutable) are either taken from the working tree or else displayed to the user for sanity checking purposes. Since the author/committer information is immutable and not taken from the working tree, achieving the goal above requires printing out the author/committer. The short window of time after committing a patch and before propagating it is the last opportunity to modify the data (by deleting and recreating the commit). This patch is not necessarily meant for inclusion verbatim; it's more of a starting point for discussion. --- commit.h | 2 ++ log-tree.c | 15 +++++++++++++++ pretty.c | 23 ++++++++++++++++++----- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/commit.h b/commit.h index e5332ef..e4222b0 100644 --- a/commit.h +++ b/commit.h @@ -59,6 +59,8 @@ enum cmit_fmt { CMIT_FMT_ONELINE, CMIT_FMT_EMAIL, CMIT_FMT_USERFORMAT, + CMIT_FMT_COMMITTER_AND_DATE, + CMIT_FMT_AUTHOR_AND_DATE, CMIT_FMT_UNSPECIFIED, }; diff --git a/log-tree.c b/log-tree.c index 0fdf159..7b399b8 100644 --- a/log-tree.c +++ b/log-tree.c @@ -160,6 +160,20 @@ static void append_signoff(struct strbuf *sb, const char *signoff) strbuf_addch(sb, '\n'); } +static void append_metadata(struct strbuf *sb, + struct commit *commit, + const struct pretty_print_context *ctx) +{ + + strbuf_addch(sb, '\n'); + strbuf_addstr(sb, " Author: "); + pretty_print_commit(CMIT_FMT_AUTHOR_AND_DATE, commit, sb, ctx); + + strbuf_addch(sb, '\n'); + strbuf_addstr(sb, " Committer: "); + pretty_print_commit(CMIT_FMT_COMMITTER_AND_DATE, commit, sb, ctx); +} + static unsigned int digits_in_number(unsigned int number) { unsigned int i = 10, result = 1; @@ -414,6 +428,7 @@ void show_log(struct rev_info *opt) ctx.reflog_info = opt->reflog_info; pretty_print_commit(opt->commit_format, commit, &msgbuf, &ctx); + append_metadata(&msgbuf, commit, &ctx); if (opt->add_signoff) append_signoff(&msgbuf, opt->add_signoff); if (opt->show_log_size) { diff --git a/pretty.c b/pretty.c index 8f5bd1a..2458509 100644 --- a/pretty.c +++ b/pretty.c @@ -1028,16 +1028,26 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit, int need_8bit_cte = context->need_8bit_cte; if (fmt == CMIT_FMT_USERFORMAT) { - format_commit_message(commit, user_format, sb, context); + format_commit_message(commit, user_format, sb, context); return; } + if (fmt == CMIT_FMT_COMMITTER_AND_DATE) { + format_commit_message(commit, "%cn <%ce> %cd", sb, context); + return; + } + if (fmt == CMIT_FMT_AUTHOR_AND_DATE) { + format_commit_message(commit, "%an <%ae> %ad", sb, context); + return; + } reencoded = reencode_commit_message(commit, &encoding); if (reencoded) { msg = reencoded; } - if (fmt == CMIT_FMT_ONELINE || fmt == CMIT_FMT_EMAIL) + + if (fmt == CMIT_FMT_ONELINE || fmt == CMIT_FMT_EMAIL || + fmt == CMIT_FMT_COMMITTER_AND_DATE || CMIT_FMT_AUTHOR_AND_DATE) indent = 0; /* @@ -1078,12 +1088,14 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit, context->after_subject, encoding, need_8bit_cte); beginning_of_body = sb->len; - if (fmt != CMIT_FMT_ONELINE) + if (fmt != CMIT_FMT_ONELINE && + fmt != CMIT_FMT_COMMITTER_AND_DATE && fmt != CMIT_FMT_AUTHOR_AND_DATE) pp_remainder(fmt, &msg, sb, indent); strbuf_rtrim(sb); /* Make sure there is an EOLN for the non-oneline case */ - if (fmt != CMIT_FMT_ONELINE) + if (fmt != CMIT_FMT_ONELINE && + fmt != CMIT_FMT_COMMITTER_AND_DATE && fmt != CMIT_FMT_AUTHOR_AND_DATE) strbuf_addch(sb, '\n'); /* @@ -1094,7 +1106,8 @@ void pretty_print_commit(enum cmit_fmt fmt, const struct commit *commit, if (fmt == CMIT_FMT_EMAIL && sb->len <= beginning_of_body) strbuf_addch(sb, '\n'); - if (fmt != CMIT_FMT_ONELINE) + if (fmt != CMIT_FMT_ONELINE && + fmt != CMIT_FMT_COMMITTER_AND_DATE && fmt != CMIT_FMT_AUTHOR_AND_DATE) get_commit_notes(commit, sb, encoding, NOTES_SHOW_HEADER | NOTES_INDENT); -- 1.6.4.4 -- 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