comparison mercurial/mail.py @ 43575:67b4439c09b2

mail: let headencode() return a native string This is to avoid conversion to/from str on py3.
author Denis Laxalde <denis@laxalde.org>
date Sat, 09 Nov 2019 12:45:14 +0100
parents 9f70512ae2cf
children 14b96072797d
comparison
equal deleted inserted replaced
43574:02802fa87b74 43575:67b4439c09b2
363 def headencode(ui, s, charsets=None, display=False): 363 def headencode(ui, s, charsets=None, display=False):
364 '''Returns RFC-2047 compliant header from given string.''' 364 '''Returns RFC-2047 compliant header from given string.'''
365 if not display: 365 if not display:
366 # split into words? 366 # split into words?
367 s, cs = _encode(ui, s, charsets) 367 s, cs = _encode(ui, s, charsets)
368 return encoding.strtolocal(email.header.Header(s, cs).encode()) 368 return email.header.Header(s, cs).encode()
369 return s 369 return encoding.strfromlocal(s)
370 370
371 371
372 def _addressencode(ui, name, addr, charsets=None): 372 def _addressencode(ui, name, addr, charsets=None):
373 assert isinstance(addr, bytes) 373 assert isinstance(addr, bytes)
374 name = encoding.strfromlocal(headencode(ui, name, charsets)) 374 name = headencode(ui, name, charsets)
375 try: 375 try:
376 acc, dom = addr.split(b'@') 376 acc, dom = addr.split(b'@')
377 acc.decode('ascii') 377 acc.decode('ascii')
378 dom = dom.decode(pycompat.sysstr(encoding.encoding)).encode('idna') 378 dom = dom.decode(pycompat.sysstr(encoding.encoding)).encode('idna')
379 addr = b'%s@%s' % (acc, dom) 379 addr = b'%s@%s' % (acc, dom)