# HG changeset patch # User Gregory Szorc # Date 2019-01-26 18:40:37 # Node ID 9b3be572ff0c20129e22557685a5ed89e7ce1a59 # Parent 43f9b8c0574b5726e9c57620d3771981b5644a12 mail: document behavior of Python 3 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. Differential Revision: https://phab.mercurial-scm.org/D5714 diff --git a/mercurial/mail.py b/mercurial/mail.py --- a/mercurial/mail.py +++ b/mercurial/mail.py @@ -243,6 +243,13 @@ def mimetextqp(body, subtype, charset): 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