comparison mercurial/mail.py @ 43672:ddb5d097d561

mail: move strtolocal call in _addressencode()
author Denis Laxalde <denis.laxalde@logilab.fr>
date Wed, 13 Nov 2019 16:46:28 +0100
parents af3e341dbf03
children 7b14d649af1b
comparison
equal deleted inserted replaced
43671:af3e341dbf03 43672:ddb5d097d561
393 return email.header.Header(s, cs).encode() 393 return email.header.Header(s, cs).encode()
394 return encoding.strfromlocal(s) 394 return encoding.strfromlocal(s)
395 395
396 396
397 def _addressencode(ui, name, addr, charsets=None): 397 def _addressencode(ui, name, addr, charsets=None):
398 # type: (Any, str, bytes, List[str]) -> str 398 # type: (Any, str, str, List[str]) -> str
399 assert isinstance(addr, bytes) 399 addr = encoding.strtolocal(addr)
400 name = headencode(ui, name, charsets) 400 name = headencode(ui, name, charsets)
401 try: 401 try:
402 acc, dom = addr.split(b'@') 402 acc, dom = addr.split(b'@')
403 acc.decode('ascii') 403 acc.decode('ascii')
404 dom = dom.decode(pycompat.sysstr(encoding.encoding)).encode('idna') 404 dom = dom.decode(pycompat.sysstr(encoding.encoding)).encode('idna')
418 # type: (Any, bytes, List[str], bool) -> str 418 # type: (Any, bytes, List[str], bool) -> str
419 '''Turns address into RFC-2047 compliant header.''' 419 '''Turns address into RFC-2047 compliant header.'''
420 if display or not address: 420 if display or not address:
421 return encoding.strfromlocal(address or b'') 421 return encoding.strfromlocal(address or b'')
422 name, addr = email.utils.parseaddr(encoding.strfromlocal(address)) 422 name, addr = email.utils.parseaddr(encoding.strfromlocal(address))
423 return _addressencode(ui, name, encoding.strtolocal(addr), charsets) 423 return _addressencode(ui, name, addr, charsets)
424 424
425 425
426 def addrlistencode(ui, addrs, charsets=None, display=False): 426 def addrlistencode(ui, addrs, charsets=None, display=False):
427 # type: (Any, List[bytes], List[str], bool) -> List[str] 427 # type: (Any, List[bytes], List[str], bool) -> List[str]
428 '''Turns a list of addresses into a list of RFC-2047 compliant headers. 428 '''Turns a list of addresses into a list of RFC-2047 compliant headers.
436 return [a.strip() for a in straddrs if a.strip()] 436 return [a.strip() for a in straddrs if a.strip()]
437 437
438 result = [] 438 result = []
439 for name, addr in email.utils.getaddresses(straddrs): 439 for name, addr in email.utils.getaddresses(straddrs):
440 if name or addr: 440 if name or addr:
441 r = _addressencode(ui, name, encoding.strtolocal(addr), charsets) 441 r = _addressencode(ui, name, addr, charsets)
442 result.append(r) 442 result.append(r)
443 return result 443 return result
444 444
445 445
446 def mimeencode(ui, s, charsets=None, display=False): 446 def mimeencode(ui, s, charsets=None, display=False):