[PATCH 2 of 2] py3: make encodefun in store.py compatible with py3k

Yuya Nishihara yuya at tcha.org
Sun Oct 9 05:20:06 UTC 2016


On Sat, 8 Oct 2016 08:55:46 -0700, Mateusz Kwapich wrote:
> # 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}

Dict comprehension isn't available in Python 2.6.



More information about the Mercurial-devel mailing list