Mercurial > hg
changeset 31448:6419cd243017
encoding: add converter between native str and byte string
This kind of encoding conversion is unavoidable on Python 3.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Mon, 13 Mar 2017 09:12:56 -0700 |
parents | 067add650129 |
children | 756175623f2e |
files | mercurial/encoding.py mercurial/extensions.py mercurial/util.py tests/test-check-code.t |
diffstat | 4 files changed, 13 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/encoding.py Mon Mar 13 09:11:08 2017 -0700 +++ b/mercurial/encoding.py Mon Mar 13 09:12:56 2017 -0700 @@ -204,6 +204,16 @@ """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
--- a/mercurial/extensions.py Mon Mar 13 09:11:08 2017 -0700 +++ b/mercurial/extensions.py Mon Mar 13 09:12:56 2017 -0700 @@ -108,9 +108,7 @@ 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,
--- a/mercurial/util.py Mon Mar 13 09:11:08 2017 -0700 +++ b/mercurial/util.py Mon Mar 13 09:12:56 2017 -0700 @@ -2653,9 +2653,7 @@ >>> 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:
--- a/tests/test-check-code.t Mon Mar 13 09:11:08 2017 -0700 +++ b/tests/test-check-code.t Mon Mar 13 09:12:56 2017 -0700 @@ -22,7 +22,7 @@ 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)