[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