@matheusbsbs / matheus-bagliano / commits / 990f6e30eb
Fork 0

format-patch: wrap email addresses after long names

We already wrap names in "from" headers, which tend to be the long part of an address. But it's also possible for a long name to not be wrapped, but to make us want to wrap the email address. For example (imagine for the sake of readability we want to wrap at 50 characters instead of 78): From: this is my really long git name <foo@example.com> The name does not overflow the line, but the name and email together do. So we would rather see: From: this is my really long git name <git@example.com> Because we wrap the name separately during add_rfc2047, we neglected this case. Instead, we should see how long the final line of the wrapped name ended up, and decide whether or not to wrap based on that. We can't break the address into multiple parts, so we either leave it with the name, or put it by itself on a line. Test by Erik Faye-Lund. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Apr 14, 2011 at 18:18 UTC 990f6e30eb00adeb8cad75c3be34c0fc9ff6abb0
2 files changed +24
pretty.c
+9
@@ -287,6 +287,7 @@ void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
287 if (fmt == CMIT_FMT_EMAIL) {
288 char *name_tail = strchr(line, '<');
289 int display_name_length;
290 + int final_line;
291 if (!name_tail)
292 return;
293 while (line < name_tail && isspace(name_tail[-1]))
@@ -294,6 +295,14 @@ void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
295 display_name_length = name_tail - line;
296 strbuf_addstr(sb, "From: ");
297 add_rfc2047(sb, line, display_name_length, encoding);
298 + for (final_line = 0; final_line < sb->len; final_line++)
299 + if (sb->buf[sb->len - final_line - 1] == '\n')
300 + break;
301 + if (namelen - display_name_length + final_line > 78) {
302 + strbuf_addch(sb, '\n');
303 + if (!isspace(name_tail[0]))
304 + strbuf_addch(sb, ' ');
305 + }
306 strbuf_add(sb, name_tail, namelen - display_name_length);
307 strbuf_addch(sb, '\n');
308 } else {
t/t4014-format-patch.sh
+15
@@ -793,4 +793,19 @@ test_expect_success 'format-patch wraps extremely long headers (rfc2047)' '
793 test_cmp expect subject
794 '
795
796 +M8="foo_bar_"
797 +M64=$M8$M8$M8$M8$M8$M8$M8$M8
798 +cat >expect <<EOF
799 +From: $M64
800 + <foobar@foo.bar>
801 +EOF
802 +test_expect_success 'format-patch wraps non-quotable headers' '
803 + rm -rf patches/ &&
804 + echo content >>file &&
805 + git add file &&
806 + git commit -mfoo --author "$M64 <foobar@foo.bar>" &&
807 + git format-patch --stdout -1 >patch &&
808 + sed -n "/^From: /p; /^ /p; /^$/q" <patch >from &&
809 + test_cmp expect from
810 +'
811 test_done