# HG changeset patch # User Martijn Pieters # Date 2016-10-10 22:11:15 # Node ID f6dcda7505f9bcc45812be4c4050d2f9420bad3f # Parent 72f75eda02bac1eeb1c9a07d2ccf893f80af4775 pycompat: only accept a bytestring filepath in Python 2 diff --git a/mercurial/pycompat.py b/mercurial/pycompat.py --- a/mercurial/pycompat.py +++ b/mercurial/pycompat.py @@ -66,33 +66,15 @@ else: def sysstr(s): return s - # Partial backport from os.py in Python 3 - def _fscodec(): - encoding = sys.getfilesystemencoding() - if encoding == 'mbcs': - errors = 'strict' + # Partial backport from os.py in Python 3, which only accepts bytes. + # In Python 2, our paths should only ever be bytes, a unicode path + # indicates a bug. + def fsencode(filename): + if isinstance(filename, str): + return filename else: - errors = 'surrogateescape' - - def fsencode(filename): - """ - Encode filename to the filesystem encoding with 'surrogateescape' - error handler, return bytes unchanged. On Windows, use 'strict' - error handler if the file system encoding is 'mbcs' (which is the - default encoding). - """ - if isinstance(filename, str): - return filename - elif isinstance(filename, unicode): - return filename.encode(encoding, errors) - else: - raise TypeError( - "expect str or unicode, not %s" % type(filename).__name__) - - return fsencode - - fsencode = _fscodec() - del _fscodec + raise TypeError( + "expect str, not %s" % type(filename).__name__) stringio = io.StringIO empty = _queue.Empty