D5714: mail: document behavior of Python 3

indygreg (Gregory Szorc) phabricator at mercurial-scm.org
Sat Jan 26 19:43:57 UTC 2019


indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  test-notify.t (and possibly other tests) are failing on Python 3
  because email.message.Message is now aware of encodings and
  attempts to roundtrip values with the specified message encoding.
  
  Python 2 doesn't perform this roundtripping. We have tests with
  non-ascii data being serialized to a message that claims to use
  ascii encoding.
  
  I /think/ Mercurial's behavior may be buggy here. But I'm not
  sure.
  
  I'm documenting the behavior so the next person who looks into
  this doesn't start from scratch like I did.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D5714

AFFECTED FILES
  mercurial/mail.py

CHANGE DETAILS

diff --git a/mercurial/mail.py b/mercurial/mail.py
--- a/mercurial/mail.py
+++ b/mercurial/mail.py
@@ -243,6 +243,13 @@
             cs.body_encoding = email.charset.QP
             break
 
+    # On Python 2, this simply assigns a value. Python 3 inspects
+    # body and does different things depending on whether it has
+    # encode() or decode() attributes. We can get the old behavior
+    # if we pass a str and charset is None and we call set_charset().
+    # But we may get into  trouble later due to Python attempting to
+    # encode/decode using the registered charset (or attempting to
+    # use ascii in the absence of a charset).
     msg.set_payload(body, cs)
 
     return msg



To: indygreg, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list