format-patch: do not wrap non-rfc2047 headers too early
Do not wrap the second and later lines of non-rfc2047-encoded headers substantially before the 78 character limit. Instead of passing the remaining length of the first line as wrapping width, use the correct maximum length and tell strbuf_add_wrapped_bytes() how many characters of the first line are already used. Signed-off-by: Jan H. Schönherr <schnhrr@cs.tu-berlin.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Jan H. Schönherr committed
Oct 18, 2012 at 16:43 UTC
7a76e68a177720da65e7d9cfa49d702a55e2d9de
2 files changed
+35
-27
pretty.c
+1
-1
@@ -286,7 +286,7 @@ static void add_rfc2047(struct strbuf *sb, const char *line, int len,
286
if ((i + 1 < len) && (ch == '=' && line[i+1] == '?'))
287
goto needquote;
288
}
289
- strbuf_add_wrapped_bytes(sb, line, len, 0, 1, max_length - line_len);
289
+ strbuf_add_wrapped_bytes(sb, line, len, -line_len, 1, max_length);
290
return;
291
292
needquote:
t/t4014-format-patch.sh
+34
-26
@@ -752,16 +752,14 @@ M64=$M8$M8$M8$M8$M8$M8$M8$M8
752
M512=$M64$M64$M64$M64$M64$M64$M64$M64
753
cat >expect <<'EOF'
754
Subject: [PATCH] foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo
755
- bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
756
- foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo
757
- bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
758
- foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo
759
- bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
760
- foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo
761
- bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
762
- foo bar foo bar foo bar foo bar
755
+ bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
756
+ foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo
757
+ bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
758
+ foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo
759
+ bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
760
+ foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar foo bar
761
EOF
764
-test_expect_success 'format-patch wraps extremely long headers (ascii)' '
762
+test_expect_success 'format-patch wraps extremely long subject (ascii)' '
763
echo content >>file &&
764
git add file &&
765
git commit -m "$M512" &&
@@ -807,28 +805,12 @@ test_expect_success 'format-patch wraps extremely long headers (rfc2047)' '
805
test_cmp expect subject
806
'
807
810
-M8="foo_bar_"
811
-M64=$M8$M8$M8$M8$M8$M8$M8$M8
812
-cat >expect <<EOF
813
-From: $M64
814
- <foobar@foo.bar>
815
-EOF
816
-test_expect_success 'format-patch wraps non-quotable headers' '
817
- rm -rf patches/ &&
818
- echo content >>file &&
819
- git add file &&
820
- git commit -mfoo --author "$M64 <foobar@foo.bar>" &&
821
- git format-patch --stdout -1 >patch &&
822
- sed -n "/^From: /p; /^ /p; /^$/q" <patch >from &&
823
- test_cmp expect from
824
-'
825
-
808
check_author() {
809
echo content >>file &&
810
git add file &&
811
GIT_AUTHOR_NAME=$1 git commit -m author-check &&
812
git format-patch --stdout -1 >patch &&
831
- grep ^From: patch >actual &&
813
+ sed -n "/^From: /p; /^ /p; /^$/q" <patch >actual &&
814
test_cmp expect actual
815
}
816
@@ -853,6 +835,32 @@ test_expect_success 'rfc2047-encoded headers also double-quote 822 specials' '
835
check_author "Föo B. Bar"
836
'
837
838
+cat >expect <<EOF
839
+From: foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_
840
+ <author@example.com>
841
+EOF
842
+test_expect_success 'format-patch wraps moderately long from-header (ascii)' '
843
+ check_author "foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_foo_bar_"
844
+'
845
+
846
+cat >expect <<'EOF'
847
+From: Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar
848
+ Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo
849
+ Bar Foo Bar Foo Bar Foo Bar <author@example.com>
850
+EOF
851
+test_expect_success 'format-patch wraps extremely long from-header (ascii)' '
852
+ check_author "Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar"
853
+'
854
+
855
+cat >expect <<'EOF'
856
+From: "Foo.Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar
857
+ Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo
858
+ Bar Foo Bar Foo Bar Foo Bar" <author@example.com>
859
+EOF
860
+test_expect_success 'format-patch wraps extremely long from-header (rfc822)' '
861
+ check_author "Foo.Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar"
862
+'
863
+
864
cat >expect <<'EOF'
865
Subject: header with . in it
866
EOF