[PATCH 2 of 2] py3: make encodefun in store.py compatible with py3k
Mateusz Kwapich
mitrandir at fb.com
Sat Oct 8 11:55:46 EDT 2016
# HG changeset patch
# User Mateusz Kwapich <mitrandir at fb.com>
# Date 1475942045 25200
# Sat Oct 08 08:54:05 2016 -0700
# Node ID 086b25d1866e33fb7ebbe6c51522e6b573e281e2
# Parent 225efa4bf7f497e55f0ba57f64a33dce39eaeb29
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: <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:*)
More information about the Mercurial-devel
mailing list