# HG changeset patch # User Mads Kiilerich # Date 1322012651 -3600 # Node ID a82b6038ff08e5a46b86c8a997bf831af06ca72c # Parent ca572e94d8e7f9b125197a8a5ac542c9ad83b440 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 -r ca572e94d8e7 -r a82b6038ff08 mercurial/mail.py --- a/mercurial/mail.py Wed Nov 23 02:36:33 2011 +0100 +++ b/mercurial/mail.py Wed Nov 23 02:44:11 2011 +0100 @@ -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 -r ca572e94d8e7 -r a82b6038ff08 tests/test-notify.t --- a/tests/test-notify.t Wed Nov 23 02:36:33 2011 +0100 +++ b/tests/test-notify.t Wed Nov 23 02:44:11 2011 +0100 @@ -422,7 +422,7 @@ From test@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