D3954: mail: cope with Py3 unicode antics on email addresses
Yuya Nishihara
yuya at tcha.org
Sat Aug 11 21:54:27 EDT 2018
> def _addressencode(ui, name, addr, charsets=None):
> name = headencode(ui, name, charsets)
> try:
> - acc, dom = addr.split('@')
> + acc, dom = addr.split(r'@')
I think `addr` here should be a byte string since `dom` is decoded to unicode,
and `addr` is embedded in abort message.
> acc = acc.encode('ascii')
> dom = dom.decode(encoding.encoding).encode('idna')
> addr = '%s@%s' % (acc, dom)
> @@ -311,27 +311,31 @@
> addr = addr.encode('ascii')
> except UnicodeDecodeError:
> raise error.Abort(_('invalid local address: %s') % addr)
> - return email.utils.formataddr((name, addr))
> + return pycompat.bytesurl(
> + email.utils.formataddr((name, encoding.strfromlocal(addr))))
> result = []
> - for name, addr in email.utils.getaddresses(addrs):
> + for name, addr in email.utils.getaddresses(
> + [encoding.strfromlocal(a) for a in addrs]):
> if name or addr:
> result.append(_addressencode(ui, name, addr, charsets))
> - return result
> + return [pycompat.bytesurl(r) for r in result]
_addressencode() retunrs bytes.
More information about the Mercurial-devel
mailing list