Code

Merge branch 'jk/format-patch-multiline-header'
authorJunio C Hamano <gitster@pobox.com>
Wed, 4 May 2011 22:51:27 +0000 (15:51 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 4 May 2011 22:51:27 +0000 (15:51 -0700)
* jk/format-patch-multiline-header:
  format-patch: wrap email addresses after long names

pretty.c
t/t4014-format-patch.sh

index e1d8a8f414bf052a59fbe78d022e611f44ed8361..ba95de92cd66f9ba24d84e706b013d2679ef554a 100644 (file)
--- a/pretty.c
+++ b/pretty.c
@@ -287,6 +287,7 @@ void pp_user_info(const char *what, enum cmit_fmt fmt, struct strbuf *sb,
        if (fmt == CMIT_FMT_EMAIL) {
                char *name_tail = strchr(line, '<');
                int display_name_length;
+               int final_line;
                if (!name_tail)
                        return;
                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,
                display_name_length = name_tail - line;
                strbuf_addstr(sb, "From: ");
                add_rfc2047(sb, line, display_name_length, encoding);
+               for (final_line = 0; final_line < sb->len; final_line++)
+                       if (sb->buf[sb->len - final_line - 1] == '\n')
+                               break;
+               if (namelen - display_name_length + final_line > 78) {
+                       strbuf_addch(sb, '\n');
+                       if (!isspace(name_tail[0]))
+                               strbuf_addch(sb, ' ');
+               }
                strbuf_add(sb, name_tail, namelen - display_name_length);
                strbuf_addch(sb, '\n');
        } else {
index 37a4109c979d4ae27c0b625fab70eeee0d9a3dde..a7060b75be60fd5d16128274e15344c6333de76f 100755 (executable)
@@ -793,4 +793,19 @@ test_expect_success 'format-patch wraps extremely long headers (rfc2047)' '
        test_cmp expect subject
 '
 
+M8="foo_bar_"
+M64=$M8$M8$M8$M8$M8$M8$M8$M8
+cat >expect <<EOF
+From: $M64
+ <foobar@foo.bar>
+EOF
+test_expect_success 'format-patch wraps non-quotable headers' '
+       rm -rf patches/ &&
+       echo content >>file &&
+       git add file &&
+       git commit -mfoo --author "$M64 <foobar@foo.bar>" &&
+       git format-patch --stdout -1 >patch &&
+       sed -n "/^From: /p; /^ /p; /^$/q" <patch >from &&
+       test_cmp expect from
+'
 test_done