[PATCH 1 of 3] import-checker: refactor sys.path prefix check (issue4129)

Augie Fackler raf at durin42.com
Tue Dec 24 16:45:26 CST 2013


On Dec 23, 2013, at 12:34 AM, Chris Jerdonek <chris.jerdonek at gmail.com> wrote:

> # HG changeset patch
> # User Chris Jerdonek <chris.jerdonek at gmail.com>
> # Date 1387750226 28800
> #      Sun Dec 22 14:10:26 2013 -0800
> # Node ID a4bfbeba9838ef33ed72942d98ddad0cbf608b2d
> # Parent  4274eda143cb1025be1130ffdaaf62370a2a6961
> import-checker: refactor sys.path prefix check (issue4129)
> 
> This patch refactors the logic in contrib/import-checker.py responsible for
> checking the beginnings of the paths in sys.path.  In particular, it adds a
> variable that defines the set of allowed prefixes.
> 
> The primary purpose of this change is to make it easier to add more allowed
> prefixes.  This will be useful in resolving issue4129, which involves making
> the function list_stdlib_modules() work when run from a virtualenv.
> 
> diff --git a/contrib/import-checker.py b/contrib/import-checker.py
> --- a/contrib/import-checker.py
> +++ b/contrib/import-checker.py
> @@ -48,11 +48,14 @@
>     for m in 'ctypes', 'email':
>         yield m
>     yield 'builtins' # python3 only
> +    stdlib_prefixes = set([sys.prefix, sys.exec_prefix])
>     for libpath in sys.path:
> -        # We want to walk everything in sys.path that starts with
> -        # either sys.prefix or sys.exec_prefix.
> -        if not (libpath.startswith(sys.prefix)
> -                or libpath.startswith(sys.exec_prefix)):
> +        # We want to walk everything in sys.path that starts with something
> +        # in stdlib_prefixes.
> +        for prefix in stdlib_prefixes:
> +            if libpath.startswith(prefix):
> +                break
> +        else:
>             continue

This file already depends on 2.6isms (the ast module), so perhaps we could use any() here and avoid the slightly-awkward-to-me for/else? I think it might read more clearly.

>         if 'site-packages' in libpath:
>             continue

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20131224/f3e0ffa8/attachment.pgp>


More information about the Mercurial-devel mailing list