# HG changeset patch # User Mateusz Kwapich # Date 2016-10-08 15:54:05 # Node ID 8f42d8c412c829398d9ee5c5852d02017814824d # Parent 400dfded8a29f2b9541df13aa26da8c93045d939 py3: make encodefun in store.py compatible with py3k This ensures that the filename encoding functions always map bytestrings to bytestrings regardless of python version. diff --git a/mercurial/store.py b/mercurial/store.py --- a/mercurial/store.py +++ b/mercurial/store.py @@ -16,6 +16,7 @@ from .i18n import _ from . import ( error, parsers, + pycompat, scmutil, util, ) @@ -98,11 +99,20 @@ def _buildencodefun(): 'the\\x07quick\\xadshot' ''' e = '_' - cmap = dict([(chr(x), chr(x)) for x in xrange(127)]) + if pycompat.ispy3: + xchr = lambda x: bytes([x]) + asciistr = bytes(xrange(127)) + else: + xchr = chr + asciistr = map(chr, xrange(127)) + capitals = list(range(ord("A"), ord("Z") + 1)) + + cmap = {x:x for x in asciistr} for x in _reserved(): - cmap[chr(x)] = "~%02x" % x - for x in list(range(ord("A"), ord("Z") + 1)) + [ord(e)]: - cmap[chr(x)] = e + chr(x).lower() + cmap[xchr(x)] = "~%02x" % x + for x in capitals + [ord(e)]: + cmap[xchr(x)] = e + xchr(x).lower() + dmap = {} for k, v in cmap.iteritems(): dmap[v] = k diff --git a/tests/test-check-py3-compat.t b/tests/test-check-py3-compat.t --- a/tests/test-check-py3-compat.t +++ b/tests/test-check-py3-compat.t @@ -134,7 +134,6 @@ mercurial/sshserver.py: error importing: module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*) mercurial/statichttprepo.py: error importing: module 'mercurial.util' has no attribute 'urlerr' (error at byterange.py:*) mercurial/store.py: error importing module: name 'xrange' is not defined (line *) - mercurial/streamclone.py: error importing: can't concat bytes to str (error at store.py:*) mercurial/subrepo.py: error importing: module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*) mercurial/templatefilters.py: error importing: module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*) mercurial/templatekw.py: error importing: module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*)