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): |