diff -r 43f9b8c0574b -r 9b3be572ff0c mercurial/mail.py --- a/mercurial/mail.py Sat Jan 26 10:22:09 2019 -0800 +++ b/mercurial/mail.py Sat Jan 26 10:40:37 2019 -0800 @@ -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