encoding: add converter between native str and byte string

This kind of encoding conversion is unavoidable on Python 3.
This commit is contained in:
Yuya Nishihara 2017-03-13 09:12:56 -07:00
parent dcade16cf7
commit af7f25fdb3
4 changed files with 13 additions and 7 deletions

View File

@ -204,6 +204,16 @@ def unifromlocal(s):
"""Convert a byte string of local encoding to a unicode string"""
return fromlocal(s).decode('utf-8')
# converter functions between native str and byte string. use these if the
# character encoding is not aware (e.g. exception message) or is known to
# be locale dependent (e.g. date formatting.)
if pycompat.ispy3:
strtolocal = unitolocal
strfromlocal = unifromlocal
else:
strtolocal = str
strfromlocal = str
if not _nativeenviron:
# now encoding and helper functions are available, recreate the environ
# dict to be exported to other modules

View File

@ -108,9 +108,7 @@ def _importext(name, path=None, reportfunc=None):
def _forbytes(inst):
"""Portably format an import error into a form suitable for
%-formatting into bytestrings."""
if pycompat.ispy3:
return encoding.unitolocal(str(inst))
return inst
return encoding.strtolocal(str(inst))
def _reportimporterror(ui, err, failed, next):
# note: this ui.debug happens before --debug is processed,

View File

@ -2653,9 +2653,7 @@ class url(object):
>>> print url(r'file:///D:\data\hg')
file:///D:\data\hg
"""
if pycompat.ispy3:
return encoding.unifromlocal(self.__bytes__())
return self.__bytes__()
return encoding.strfromlocal(self.__bytes__())
def __bytes__(self):
if self._localpath:

View File

@ -22,7 +22,7 @@ New errors are not allowed. Warnings are strongly discouraged.
mercurial/encoding.py:61:
> for k, v in os.environ.items())
use encoding.environ instead (py3)
mercurial/encoding.py:211:
mercurial/encoding.py:221:
> for k, v in os.environ.items())
use encoding.environ instead (py3)
Skipping mercurial/httpclient/__init__.py it has no-che?k-code (glob)