Skip to content

Commit

Permalink
format-patch: wrap email addresses after long names
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Apr 14, 2011
1 parent c22e7de commit 990f6e3
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
9 changes: 9 additions & 0 deletions pretty.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,13 +287,22 @@ 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]))
name_tail--;
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 {
Expand Down
15 changes: 15 additions & 0 deletions t/t4014-format-patch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 990f6e3

Please sign in to comment.