# HG changeset patch # User Yuya Nishihara # Date 1489421576 25200 # Node ID 6419cd2430171b93064478503f5f27562bd808c9 # Parent 067add650129ca772f97c57822a9c98e2daff3c3 encoding: add converter between native str and byte string This kind of encoding conversion is unavoidable on Python 3. diff -r 067add650129 -r 6419cd243017 mercurial/encoding.py --- 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 diff -r 067add650129 -r 6419cd243017 mercurial/extensions.py --- 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, diff -r 067add650129 -r 6419cd243017 mercurial/util.py --- 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: diff -r 067add650129 -r 6419cd243017 tests/test-check-code.t --- 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)