[PATCH 2 of 7] py3: make sure osutil.listdir() returns what it gets

Yuya Nishihara yuya at tcha.org
Thu Nov 3 23:37:00 EDT 2016


On Thu, 03 Nov 2016 03:53:07 +0530, Pulkit Goyal wrote:
> # HG changeset patch
> # User Pulkit Goyal <7895pulkit at gmail.com>
> # Date 1478118344 -19800
> #      Thu Nov 03 01:55:44 2016 +0530
> # Node ID 6585e9c1d915818d5138f6cb4134707002d5d749
> # Parent  e541b0e5839988f63446c88509db68772a55775b
> py3: make sure osutil.listdir() returns what it gets
> 
> osutil.listdir() on py3 was having problems with bytes. Since
> os.sep is a str in Py3, we need to check if what passed is bytes and then
> convert os.sep to bytes. On python 2, doing os.sep.encode() is okay.
> After this patch, osutil.listdir() argument will return what is gets as an
> argument on Python 3.5.
> 
> diff -r e541b0e58399 -r 6585e9c1d915 mercurial/pure/osutil.py
> --- a/mercurial/pure/osutil.py	Thu Nov 03 00:28:33 2016 +0530
> +++ b/mercurial/pure/osutil.py	Thu Nov 03 01:55:44 2016 +0530
> @@ -51,8 +51,11 @@
>      '''
>      result = []
>      prefix = path
> -    if not prefix.endswith(os.sep):
> -        prefix += os.sep
> +    sep = os.sep
> +    if isinstance(path, bytes):
> +        sep = sep.encode('ascii')
> +    if not prefix.endswith(sep):
> +        prefix += sep

Suppose path must be bytes because osutil.listdir() is a Mercurial API, we
can always use bytes variant of os.sep everywhere, which could be provided
by pycompat.


More information about the Mercurial-devel mailing list