Commit 568f7f51 authored by PJ Eby's avatar PJ Eby

Fix WorkingSet yielding the same distribution more than once if more than

one path entry points to it.

--HG--
branch : setuptools
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/trunk/setuptools%4041182
parent 8afe820f
......@@ -192,6 +192,7 @@ optional second parameter to ``add()``
But even if a distribution is found under multiple path entries, it still only
shows up once when iterating the working set:
>>> ws.add_entry(ws.entries[0])
>>> list(ws)
[Bar 0.9 (http://example.com/something)]
......
......@@ -367,16 +367,6 @@ class WorkingSet(object):
def __iter__(self):
"""Yield distributions for non-duplicate projects in the working set
The yield order is the order in which the items' path entries were
added to the working set.
"""
for item in self.entries:
for key in self.entry_keys[item]:
yield self.by_key[key]
def find(self, req):
"""Find a distribution matching requirement `req`
......@@ -408,6 +398,29 @@ class WorkingSet(object):
elif name in entries:
yield entries[name]
def __iter__(self):
"""Yield distributions for non-duplicate projects in the working set
The yield order is the order in which the items' path entries were
added to the working set.
"""
seen = {}
for item in self.entries:
for key in self.entry_keys[item]:
if key not in seen:
seen[key]=1
yield self.by_key[key]
def add(self, dist, entry=None):
"""Add `dist` to working set, associated with `entry`
......@@ -431,24 +444,11 @@ class WorkingSet(object):
self.by_key[dist.key] = dist
keys = self.entry_keys[entry]
if dist.key not in keys:
keys.append(dist.key)
self._added_new(dist)
def resolve(self, requirements, env=None, installer=None):
"""List all distributions needed to (recursively) meet `requirements`
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment