Skip to content

Commit

Permalink
pretty: use mailmap to display username and email
Browse files Browse the repository at this point in the history
Use the mailmap information to display the rewritten
username and email address in all log commands.

Signed-off-by: Antoine Pelisse <apelisse@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Antoine Pelisse authored and Junio C Hamano committed Jan 10, 2013
1 parent 0e2913b commit dffd325
Showing 1 changed file with 37 additions and 21 deletions.
58 changes: 37 additions & 21 deletions pretty.c
Original file line number Diff line number Diff line change
Expand Up @@ -387,9 +387,13 @@ void pp_user_info(const struct pretty_print_context *pp,
const char *what, struct strbuf *sb,
const char *line, const char *encoding)
{
struct strbuf name;
struct strbuf mail;
struct ident_split ident;
int linelen, namelen;
int linelen;
char *line_end, *date;
const char *mailbuf, *namebuf;
size_t namelen, maillen;
int max_length = 78; /* per rfc2822 */
unsigned long time;
int tz;
Expand All @@ -408,42 +412,54 @@ 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;

mailbuf = ident.mail_begin;
maillen = ident.mail_end - ident.mail_begin;
namebuf = ident.name_begin;
namelen = ident.name_end - ident.name_begin;

if (pp->mailmap)
map_user(pp->mailmap, &mailbuf, &maillen, &namebuf, &namelen);

strbuf_init(&mail, 0);
strbuf_init(&name, 0);

strbuf_add(&mail, mailbuf, maillen);
strbuf_add(&name, namebuf, namelen);

namelen = name.len + mail.len + 3; /* ' ' + '<' + '>' */
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;

strbuf_addstr(sb, "From: ");
if (needs_rfc2047_encoding(line, display_name_length, RFC2047_ADDRESS)) {
add_rfc2047(sb, line, display_name_length,
encoding, RFC2047_ADDRESS);
if (needs_rfc2047_encoding(name.buf, name.len, RFC2047_ADDRESS)) {
add_rfc2047(sb, name.buf, name.len,
encoding, RFC2047_ADDRESS);
max_length = 76; /* per rfc2047 */
} else if (needs_rfc822_quoting(line, display_name_length)) {
} else if (needs_rfc822_quoting(name.buf, name.len)) {
struct strbuf quoted = STRBUF_INIT;
add_rfc822_quoted(&quoted, line, display_name_length);
add_rfc822_quoted(&quoted, name.buf, name.len);
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, name.buf, name.len,
-6, 1, max_length);
}
if (namelen - display_name_length + last_line_length(sb) > max_length) {
if (namelen - name.len + 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, '\n');

strbuf_addf(sb, " <%s>\n", mail.buf);
} 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);
" ", name.buf, mail.buf);
}

strbuf_release(&mail);
strbuf_release(&name);

switch (pp->fmt) {
case CMIT_FMT_MEDIUM:
strbuf_addf(sb, "Date: %s\n", show_date(time, tz, pp->date_mode));
Expand Down

0 comments on commit dffd325

Please sign in to comment.