summaryrefslogtreecommitdiff
path: root/pkg_resources/__init__.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2017-09-09 12:26:51 -0400
committerJason R. Coombs <jaraco@jaraco.com>2017-09-09 12:26:51 -0400
commitd3fc6036c7fe25ee7ffee3fc9f0b75f2b9d5a58a (patch)
tree742e8618991a9d5f604ad962f435b61e9ac02915 /pkg_resources/__init__.py
parent6f10cff41ca441a91ddb9182c591a4a2e170633a (diff)
downloadpython-setuptools-git-d3fc6036c7fe25ee7ffee3fc9f0b75f2b9d5a58a.tar.gz
Screen entries before sorting in find_on_path. Ref #1134.
Diffstat (limited to 'pkg_resources/__init__.py')
-rw-r--r--pkg_resources/__init__.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/pkg_resources/__init__.py b/pkg_resources/__init__.py
index 0f5dd238..68349df4 100644
--- a/pkg_resources/__init__.py
+++ b/pkg_resources/__init__.py
@@ -2032,8 +2032,17 @@ def find_on_path(importer, path_item, only=False):
entries = safe_listdir(path_item)
+ # for performance, before sorting by version,
+ # screen entries for only those that will yield
+ # distributions
+ filtered = (
+ entry
+ for entry in entries
+ if dist_factory(path_item, entry, only)
+ )
+
# scan for .egg and .egg-info in directory
- path_item_entries = _by_version_descending(entries)
+ path_item_entries = _by_version_descending(filtered)
for entry in path_item_entries:
fullpath = os.path.join(path_item, entry)
factory = dist_factory(path_item, entry, only)
@@ -2042,6 +2051,9 @@ def find_on_path(importer, path_item, only=False):
def dist_factory(path_item, entry, only):
+ """
+ Return a dist_factory for a path_item and entry
+ """
lower = entry.lower()
is_meta = any(map(lower.endswith, ('.egg-info', '.dist-info')))
return (