Mercurial > hg
changeset 36045:04984f2e50ae
py3: use email parser that operates on bytes
email.parser.Parser() operates on str in both Python 2 and 3.
Python 3.2 introduced the email.parser.BytesParser(), which works
like Parser except it accepts bytes.
We implement the pycompat helper as a function so we lazily
import the "email" module.
Differential Revision: https://phab.mercurial-scm.org/D2147
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 11 Feb 2018 14:17:23 -0800 |
parents | 3b4d14beac3d |
children | a5cf79755eff |
files | mercurial/patch.py mercurial/pycompat.py |
diffstat | 2 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/patch.py Sun Feb 11 13:32:18 2018 -0800 +++ b/mercurial/patch.py Sun Feb 11 14:17:23 2018 -0800 @@ -12,7 +12,6 @@ import copy import difflib import email -import email.parser as emailparser import errno import hashlib import os @@ -109,7 +108,7 @@ cur.append(line) c = chunk(cur) - m = emailparser.Parser().parse(c) + m = pycompat.emailparser().parse(c) if not m.is_multipart(): yield msgfp(m) else: @@ -218,7 +217,7 @@ fd, tmpname = tempfile.mkstemp(prefix='hg-patch-') tmpfp = os.fdopen(fd, pycompat.sysstr('w')) try: - msg = emailparser.Parser().parse(fileobj) + msg = pycompat.emailparser().parse(fileobj) subject = msg['Subject'] and mail.headdecode(msg['Subject']) data['user'] = msg['From'] and mail.headdecode(msg['From'])
--- a/mercurial/pycompat.py Sun Feb 11 13:32:18 2018 -0800 +++ b/mercurial/pycompat.py Sun Feb 11 14:17:23 2018 -0800 @@ -267,6 +267,10 @@ ret = shlex.split(s.decode('latin-1')) return [a.encode('latin-1') for a in ret] + def emailparser(*args, **kwargs): + import email.parser + return email.parser.BytesParser(*args, **kwargs) + else: import cStringIO @@ -327,6 +331,10 @@ ziplist = zip rawinput = raw_input + def emailparser(*args, **kwargs): + import email.parser + return email.parser.Parser(*args, **kwargs) + isjython = sysplatform.startswith('java') isdarwin = sysplatform == 'darwin'