Mercurial > hg
changeset 30077:8f42d8c412c8
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.
author | Mateusz Kwapich <mitrandir@fb.com> |
---|---|
date | Sat, 08 Oct 2016 08:54:05 -0700 |
parents | 400dfded8a29 |
children | 173bdb502503 |
files | mercurial/store.py tests/test-check-py3-compat.t |
diffstat | 2 files changed, 14 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/store.py Sat Oct 08 08:45:28 2016 -0700 +++ b/mercurial/store.py Sat Oct 08 08:54:05 2016 -0700 @@ -16,6 +16,7 @@ from . import ( error, parsers, + pycompat, scmutil, util, ) @@ -98,11 +99,20 @@ '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
--- a/tests/test-check-py3-compat.t Sat Oct 08 08:45:28 2016 -0700 +++ b/tests/test-check-py3-compat.t Sat Oct 08 08:54:05 2016 -0700 @@ -134,7 +134,6 @@ mercurial/sshserver.py: error importing: <AttributeError> module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*) mercurial/statichttprepo.py: error importing: <AttributeError> module 'mercurial.util' has no attribute 'urlerr' (error at byterange.py:*) mercurial/store.py: error importing module: <NameError> name 'xrange' is not defined (line *) - mercurial/streamclone.py: error importing: <TypeError> can't concat bytes to str (error at store.py:*) mercurial/subrepo.py: error importing: <AttributeError> module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*) mercurial/templatefilters.py: error importing: <AttributeError> module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*) mercurial/templatekw.py: error importing: <AttributeError> module 'mercurial.util' has no attribute 'stringio' (error at patch.py:*)