This matches the internal representation in libgit.a, so it will make it much easier to use Git's mailmap code.
The change in ui-atom.c isn't strictly necessary since the code copes with email addresses both with and without angle brackets, but it's a nice simplification since we know that the email address will always be provided in the correct form. Signed-off-by: John Keeping <[email protected]> --- filter.c | 10 +++++++++- parsing.c | 6 +----- ui-atom.c | 13 +------------ ui-commit.c | 6 ++++-- 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/filter.c b/filter.c index 88098ba..ba9000a 100644 --- a/filter.c +++ b/filter.c @@ -457,5 +457,13 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype) void cgit_open_email_filter(const char *email, const char *origin) { - cgit_open_filter(ctx.repo->email_filter, email, origin); + struct strbuf sb = STRBUF_INIT; + + /* Don't bother allocating any memory if we don't have a filter. */ + if (!ctx.repo->email_filter) + return; + + strbuf_addf(&sb, "<%s>", email); + cgit_open_filter(ctx.repo->email_filter, sb.buf, origin); + strbuf_release(&sb); } diff --git a/parsing.c b/parsing.c index 9dacb16..352338d 100644 --- a/parsing.c +++ b/parsing.c @@ -72,14 +72,10 @@ static char *substr(const char *head, const char *tail) static void parse_user(const char *t, char **name, char **email, unsigned long *date, int *tz) { struct ident_split ident; - unsigned email_len; if (!split_ident_line(&ident, t, strchrnul(t, '\n') - t)) { *name = substr(ident.name_begin, ident.name_end); - - email_len = ident.mail_end - ident.mail_begin; - *email = xmalloc(strlen("<") + email_len + strlen(">") + 1); - sprintf(*email, "<%.*s>", email_len, ident.mail_begin); + *email = substr(ident.mail_begin, ident.mail_end); if (ident.date_begin) *date = strtoul(ident.date_begin, NULL, 10); diff --git a/ui-atom.c b/ui-atom.c index 41838d3..7c17d6a 100644 --- a/ui-atom.c +++ b/ui-atom.c @@ -15,7 +15,6 @@ static void add_entry(struct commit *commit, const char *host) { char delim = '&'; char *hex; - char *mail, *t, *t2; struct commitinfo *info; info = cgit_parse_commit(commit); @@ -35,19 +34,9 @@ static void add_entry(struct commit *commit, const char *host) html("</name>\n"); } if (info->author_email && !ctx.cfg.noplainemail) { - mail = xstrdup(info->author_email); - t = strchr(mail, '<'); - if (t) - t++; - else - t = mail; - t2 = strchr(t, '>'); - if (t2) - *t2 = '\0'; html("<email>"); - html_txt(t); + html_txt(info->author_email); html("</email>\n"); - free(mail); } html("</author>\n"); html("<published>"); diff --git a/ui-commit.c b/ui-commit.c index 95958e0..061a596 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -50,8 +50,9 @@ void cgit_print_commit(char *hex, const char *prefix) cgit_open_email_filter(info->author_email, "commit"); html_txt(info->author); if (!ctx.cfg.noplainemail) { - html(" "); + html(" <"); html_txt(info->author_email); + html(">"); } cgit_close_filter(ctx.repo->email_filter); html("</td><td class='right'>"); @@ -62,8 +63,9 @@ void cgit_print_commit(char *hex, const char *prefix) cgit_open_email_filter(info->committer_email, "commit"); html_txt(info->committer); if (!ctx.cfg.noplainemail) { - html(" "); + html(" <"); html_txt(info->committer_email); + html(">"); } cgit_close_filter(ctx.repo->email_filter); html("</td><td class='right'>"); -- 2.10.0.rc0.142.g1e9f63b _______________________________________________ CGit mailing list [email protected] http://lists.zx2c4.com/mailman/listinfo/cgit
