diff options
author | Kirill Smelkov <kirr@landau.phys.spbu.ru> | 2009-02-01 20:45:05 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-01 12:11:15 -0800 |
commit | 08e6710f76165f79cfa3cde9b10bb051fb0d0dc9 (patch) | |
tree | 836b76d3c69abe0f662a7024e213fe7369e81fa2 /builtin-mailinfo.c | |
parent | c0f6f67b3d6c8afb89847b6b7bc187d7bed260eb (diff) | |
download | git-08e6710f76165f79cfa3cde9b10bb051fb0d0dc9.tar.gz |
mailinfo: cleanup extra spaces for complex 'From:'
currently for cases like
From: A U Thor <a.u.thor@example.com> (Comment)
mailinfo extracts the following 'Author:' field:
Author: A U Thor (Comment)
^^
which has two extra spaces left in there after removed email part.
I think this is wrong so here is a fix.
Signed-off-by: Kirill Smelkov <kirr@landau.phys.spbu.ru>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-mailinfo.c')
-rw-r--r-- | builtin-mailinfo.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c index d4dc23a363..2789ccdf7d 100644 --- a/builtin-mailinfo.c +++ b/builtin-mailinfo.c @@ -29,6 +29,9 @@ static struct strbuf **p_hdr_data, **s_hdr_data; #define MAX_HDR_PARSED 10 #define MAX_BOUNDARIES 5 +static void cleanup_space(struct strbuf *sb); + + static void get_sane_name(struct strbuf *out, struct strbuf *name, struct strbuf *email) { struct strbuf *src = name; @@ -109,11 +112,19 @@ static void handle_from(const struct strbuf *from) strbuf_add(&email, at, el); strbuf_remove(&f, at - f.buf, el + (at[el] ? 1 : 0)); - /* The remainder is name. It could be "John Doe <john.doe@xz>" - * or "john.doe@xz (John Doe)", but we have removed the - * email part, so trim from both ends, possibly removing - * the () pair at the end. + /* The remainder is name. It could be + * + * - "John Doe <john.doe@xz>" (a), or + * - "john.doe@xz (John Doe)" (b), or + * - "John (zzz) Doe <john.doe@xz> (Comment)" (c) + * + * but we have removed the email part, so + * + * - remove extra spaces which could stay after email (case 'c'), and + * - trim from both ends, possibly removing the () pair at the end + * (cases 'a' and 'b'). */ + cleanup_space(&f); strbuf_trim(&f); if (f.buf[0] == '(' && f.len && f.buf[f.len - 1] == ')') { strbuf_remove(&f, 0, 1); |