From 568f7f51fb0dea510cfae83b178c642a06b801bd Mon Sep 17 00:00:00 2001 From: PJ Eby Date: Sat, 6 Aug 2005 20:54:01 +0000 Subject: 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 --- pkg_resources.py | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'pkg_resources.py') diff --git a/pkg_resources.py b/pkg_resources.py index 6e040d08..ffc31319 100644 --- a/pkg_resources.py +++ b/pkg_resources.py @@ -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` -- cgit v1.2.1