mercurial/mail.py
changeset 43628 ddb5d097d561
parent 43627 af3e341dbf03
child 43773 7b14d649af1b
equal deleted inserted replaced
43627:af3e341dbf03 43628: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):