[PATCH 4 of 4] mail: use quoted-printable for mime encoding to avoid too long lines (issue3075)

Mads Kiilerich mads at kiilerich.com
Tue Nov 22 19:48:48 CST 2011


# HG changeset patch
# User Mads Kiilerich <mads at kiilerich.com>
# Date 1322012651 -3600
# Node ID 1ab28808eb91396131ba3c5f6e5f05553a0f930c
# Parent  dc30733372a715e03d3c6e968a1bd824d0041c68
mail: use quoted-printable for mime encoding to avoid too long lines (issue3075)

Quoted-printable was already used for the more critical patch mails, so it
should be fine for everything else as well.

diff --git a/mercurial/mail.py b/mercurial/mail.py
--- a/mercurial/mail.py
+++ b/mercurial/mail.py
@@ -131,14 +131,9 @@
                                'but not in PATH') % method)
 
 def mimetextpatch(s, subtype='plain', display=False):
-    '''If patch in utf-8 transfer-encode it.'''
-
-    enc = None
-    for line in s.splitlines():
-        if len(line) > 950:
-            s = quopri.encodestring(s)
-            enc = "quoted-printable"
-            break
+    '''Return MIME message suitable for a patch.
+    Charset will be detected as utf-8 or (possibly fake) us-ascii.
+    Transfer encodings will be used if necessary.'''
 
     cs = 'us-ascii'
     if not display:
@@ -152,7 +147,20 @@
                 # We'll go with us-ascii as a fallback.
                 pass
 
-    msg = email.MIMEText.MIMEText(s, subtype, cs)
+    return mimetextqp(s, subtype, cs)
+
+def mimetextqp(body, subtype, charset):
+    '''Return MIME message.
+    Qouted-printable transfer encoding will be used if necessary.
+    '''
+    enc = None
+    for line in body.splitlines():
+        if len(line) > 950:
+            body = quopri.encodestring(body)
+            enc = "quoted-printable"
+            break
+
+    msg = email.MIMEText.MIMEText(body, subtype, charset)
     if enc:
         del msg['Content-Transfer-Encoding']
         msg['Content-Transfer-Encoding'] = enc
@@ -244,4 +252,4 @@
     cs = 'us-ascii'
     if not display:
         s, cs = _encode(ui, s, charsets)
-    return email.MIMEText.MIMEText(s, 'plain', cs)
+    return mimetextqp(s, 'plain', cs)
diff --git a/tests/test-notify.t b/tests/test-notify.t
--- a/tests/test-notify.t
+++ b/tests/test-notify.t
@@ -422,7 +422,7 @@
   From test at test.com ... ... .. ..:..:.. .... (re)
   Content-Type: text/plain; charset="us-ascii"
   MIME-Version: 1.0
-  Content-Transfer-Encoding: 7bit
+  Content-Transfer-Encoding: quoted-printable
   X-Test: foo
   Date: * (glob)
   Subject: long line
@@ -447,5 +447,18 @@
    a
    a
    a
-  +nononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononononono
+  +nonononononononononononononononononononononononononononononononononononono=
+  nononononononononononononononononononononononononononononononononononononon=
+  ononononononononononononononononononononononononononononononononononononono=
+  nononononononononononononononononononononononononononononononononononononon=
+  ononononononononononononononononononononononononononononononononononononono=
+  nononononononononononononononononononononononononononononononononononononon=
+  ononononononononononononononononononononononononononononononononononononono=
+  nononononononononononononononononononononononononononononononononononononon=
+  ononononononononononononononononononononononononononononononononononononono=
+  nononononononononononononononononononononononononononononononononononononon=
+  ononononononononononononononononononononononononononononononononononononono=
+  nononononononononononononononononononononononononononononononononononononon=
+  ononononononononononononononononononononononononononononononononononononono=
+  nonononononononononononono
   


More information about the Mercurial-devel mailing list