Use the mailmap information to display the correct
username and email address in all log commands.

Signed-off-by: Antoine Pelisse <apeli...@gmail.com>
---
 pretty.c | 46 +++++++++++++++++++++++++++++++---------------
 1 file changed, 31 insertions(+), 15 deletions(-)

diff --git a/pretty.c b/pretty.c
index 6730add..e232aaa 100644
--- a/pretty.c
+++ b/pretty.c
@@ -387,6 +387,8 @@ void pp_user_info(const struct pretty_print_context *pp,
                  const char *what, struct strbuf *sb,
                  const char *line, const char *encoding)
 {
+       char person_name[1024];
+       char person_mail[1024];
        struct ident_split ident;
        int linelen, namelen;
        char *line_end, *date;
@@ -405,41 +407,55 @@ void pp_user_info(const struct pretty_print_context *pp,
        if (split_ident_line(&ident, line, linelen))
                return;
 
-       namelen = ident.mail_end - ident.name_begin + 1;
+       memcpy(person_mail, ident.mail_begin, ident.mail_end - 
ident.mail_begin);
+       person_mail[ident.mail_end - ident.mail_begin] = 0;
+
+       memcpy(person_name, ident.name_begin, ident.name_end - 
ident.name_begin);
+       person_name[ident.name_end - ident.name_begin] = 0;
+
+       if (pp->mailmap)
+               map_user(pp->mailmap, person_mail, sizeof(person_mail),
+                        person_name, sizeof(person_name));
+
+       namelen = strlen(person_name) + strlen(person_mail);
        time = strtoul(ident.date_begin, &date, 10);
        tz = strtol(date, NULL, 10);
 
        if (pp->fmt == CMIT_FMT_EMAIL) {
                int display_name_length;
 
-               display_name_length = ident.name_end - ident.name_begin;
+               display_name_length = strlen(person_name);
 
                strbuf_addstr(sb, "From: ");
-               if (needs_rfc2047_encoding(line, display_name_length, 
RFC2047_ADDRESS)) {
-                       add_rfc2047(sb, line, display_name_length,
+               if (needs_rfc2047_encoding(person_name, display_name_length, 
RFC2047_ADDRESS)) {
+                       add_rfc2047(sb, person_name, display_name_length,
                                                encoding, RFC2047_ADDRESS);
                        max_length = 76; /* per rfc2047 */
-               } else if (needs_rfc822_quoting(line, display_name_length)) {
+               } else if (needs_rfc822_quoting(person_name,
+                                               display_name_length)) {
                        struct strbuf quoted = STRBUF_INIT;
-                       add_rfc822_quoted(&quoted, line, display_name_length);
+                       add_rfc822_quoted(&quoted, person_name,
+                                         display_name_length);
                        strbuf_add_wrapped_bytes(sb, quoted.buf, quoted.len,
                                                        -6, 1, max_length);
                        strbuf_release(&quoted);
                } else {
-                       strbuf_add_wrapped_bytes(sb, line, display_name_length,
-                                                       -6, 1, max_length);
+                       strbuf_add_wrapped_bytes(sb, person_name,
+                                                display_name_length,
+                                                -6, 1, max_length);
                }
-               if (namelen - display_name_length + last_line_length(sb) > 
max_length) {
+               if (namelen - display_name_length + last_line_length(sb) > 
max_length)
                        strbuf_addch(sb, '\n');
-                       if (!isspace(ident.name_end[0]))
-                               strbuf_addch(sb, ' ');
-               }
-               strbuf_add(sb, ident.name_end, namelen - display_name_length);
+
+               strbuf_addch(sb, ' ');
+               strbuf_addch(sb, '<');
+               strbuf_add(sb, person_mail, strlen(person_mail));
+               strbuf_addch(sb, '>');
                strbuf_addch(sb, '\n');
        } else {
-               strbuf_addf(sb, "%s: %.*s%.*s\n", what,
+               strbuf_addf(sb, "%s: %.*s%s <%s>\n", what,
                              (pp->fmt == CMIT_FMT_FULLER) ? 4 : 0,
-                             "    ", namelen, line);
+                           "    ", person_name, person_mail);
        }
        switch (pp->fmt) {
        case CMIT_FMT_MEDIUM:
-- 
1.8.1.rc1.5.g7e0651a

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to