summaryrefslogtreecommitdiff
path: root/pretty.c
diff options
context:
space:
mode:
Diffstat (limited to 'pretty.c')
-rw-r--r--pretty.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/pretty.c b/pretty.c
index e4ed14effe..305e903192 100644
--- a/pretty.c
+++ b/pretty.c
@@ -20,6 +20,7 @@ static struct cmt_fmt_map {
int is_tformat;
int expand_tabs_in_log;
int is_alias;
+ enum date_mode_type default_date_mode_type;
const char *user_format;
} *commit_formats;
static size_t builtin_formats_len;
@@ -97,7 +98,9 @@ static void setup_commit_formats(void)
{ "mboxrd", CMIT_FMT_MBOXRD, 0, 0 },
{ "fuller", CMIT_FMT_FULLER, 0, 8 },
{ "full", CMIT_FMT_FULL, 0, 8 },
- { "oneline", CMIT_FMT_ONELINE, 1, 0 }
+ { "oneline", CMIT_FMT_ONELINE, 1, 0 },
+ { "reference", CMIT_FMT_USERFORMAT, 1, 0,
+ 0, DATE_SHORT, "%C(auto)%h (%s, %ad)" },
/*
* Please update $__git_log_pretty_formats in
* git-completion.bash when you add new formats.
@@ -181,6 +184,8 @@ void get_commit_format(const char *arg, struct rev_info *rev)
rev->commit_format = commit_format->format;
rev->use_terminator = commit_format->is_tformat;
rev->expand_tabs_in_log_default = commit_format->expand_tabs_in_log;
+ if (!rev->date_mode_explicit && commit_format->default_date_mode_type)
+ rev->date_mode.type = commit_format->default_date_mode_type;
if (commit_format->format == CMIT_FMT_USERFORMAT) {
save_user_format(rev, commit_format->user_format,
commit_format->is_tformat);
@@ -696,7 +701,7 @@ static size_t format_person_part(struct strbuf *sb, char part,
mail = s.mail_begin;
maillen = s.mail_end - s.mail_begin;
- if (part == 'N' || part == 'E') /* mailmap lookup */
+ if (part == 'N' || part == 'E' || part == 'L') /* mailmap lookup */
mailmap_name(&mail, &maillen, &name, &namelen);
if (part == 'n' || part == 'N') { /* name */
strbuf_add(sb, name, namelen);
@@ -706,6 +711,13 @@ static size_t format_person_part(struct strbuf *sb, char part,
strbuf_add(sb, mail, maillen);
return placeholder_len;
}
+ if (part == 'l' || part == 'L') { /* local-part */
+ const char *at = memchr(mail, '@', maillen);
+ if (at)
+ maillen = at - mail;
+ strbuf_add(sb, mail, maillen);
+ return placeholder_len;
+ }
if (!s.date_begin)
goto skip;
@@ -731,6 +743,9 @@ static size_t format_person_part(struct strbuf *sb, char part,
case 'I': /* date, ISO 8601 strict */
strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(ISO8601_STRICT)));
return placeholder_len;
+ case 's':
+ strbuf_addstr(sb, show_ident_date(&s, DATE_MODE(SHORT)));
+ return placeholder_len;
}
skip:
@@ -1239,11 +1254,9 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
strbuf_addstr(sb, get_revision_mark(NULL, commit));
return 1;
case 'd':
- load_ref_decorations(NULL, DECORATE_SHORT_REFS);
format_decorations(sb, commit, c->auto_color);
return 1;
case 'D':
- load_ref_decorations(NULL, DECORATE_SHORT_REFS);
format_decorations_extended(sb, commit, c->auto_color, "", ", ", "");
return 1;
case 'S': /* tag/branch like --source */
@@ -1612,14 +1625,14 @@ void repo_format_commit_message(struct repository *r,
const char *format, struct strbuf *sb,
const struct pretty_print_context *pretty_ctx)
{
- struct format_commit_context context;
+ struct format_commit_context context = {
+ .commit = commit,
+ .pretty_ctx = pretty_ctx,
+ .wrap_start = sb->len
+ };
const char *output_enc = pretty_ctx->output_encoding;
const char *utf8 = "UTF-8";
- memset(&context, 0, sizeof(context));
- context.commit = commit;
- context.pretty_ctx = pretty_ctx;
- context.wrap_start = sb->len;
/*
* convert a commit message to UTF-8 first
* as far as 'format_commit_item' assumes it in UTF-8