]> git.ipfire.org Git - thirdparty/git.git/blobdiff - pretty.c
Merge tag 'l10n-2.25.0-rnd1' of git://github.com/git-l10n/git-po
[thirdparty/git.git] / pretty.c
index e4ed14effe1aabdef50155b932a96e6648ff4707..305e903192a7ae4fb125090436130f434bd46e7c 100644 (file)
--- 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