diff options
| author | Julian Andres Klode <jak@debian.org> | 2011-04-04 10:53:26 +0200 |
|---|---|---|
| committer | Julian Andres Klode <jak@debian.org> | 2011-04-04 10:53:26 +0200 |
| commit | 28233cb715fafbd460cf55a79e4625123e65a702 (patch) | |
| tree | 816422e0e723d87b5b56ed439f7eb8bd0964264f | |
| parent | d89f51fee4d09f543aa015b00d62e49a86c10eb1 (diff) | |
| download | python-apt-28233cb715fafbd460cf55a79e4625123e65a702.tar.gz | |
apt/cache.py: Do not pack full names into _set, use a _fullnameset instead
This keeps the length correct, and ensures that we only iterate once
over each package
| -rw-r--r-- | apt/cache.py | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/apt/cache.py b/apt/cache.py index 40fe40a9..bfa41edc 100644 --- a/apt/cache.py +++ b/apt/cache.py @@ -65,6 +65,7 @@ class Cache(object): self._callbacks = {} self._weakref = weakref.WeakValueDictionary() self._set = set() + self._fullnameset = set() self._sorted_set = None if memonly: # force apt to build its caches in memory @@ -129,6 +130,7 @@ class Cache(object): self._list = apt_pkg.SourceList() self._list.read_main_list() self._set.clear() + self._fullnameset.clear() self._sorted_set = None self._weakref.clear() @@ -145,9 +147,8 @@ class Cache(object): # drop stuff with no versions (cruft) if pkg.has_versions: self._set.add(pkg.get_fullname(pretty=True)) - assert self._cache[pkg.get_fullname(pretty=True)] is not None if self._have_multi_arch: - self._set.add(pkg.get_fullname(pretty=False)) + self._fullnameset.add(pkg.get_fullname(pretty=False)) i += 1 @@ -159,7 +160,7 @@ class Cache(object): try: return self._weakref[key] except KeyError: - if key in self._set: + if key in self._set or key in self._fullnameset: key = str(key) pkg = self._weakref[key] = Package(self, self._cache[key]) return pkg @@ -180,10 +181,10 @@ class Cache(object): raise StopIteration def has_key(self, key): - return (key in self._set) + return (key in self._set or key in self._fullnameset) def __contains__(self, key): - return (key in self._set) + return (key in self._set or key in self._fullnameset) def __len__(self): return len(self._set) @@ -197,10 +198,11 @@ class Cache(object): marked_keep = self._depcache.marked_keep for pkg in self._cache.packages: if not marked_keep(pkg): + name = pkg.get_fullname(pretty=True) try: - changes.append(self._weakref[pkg.name]) + changes.append(self._weakref[name]) except KeyError: - package = self._weakref[pkg.name] = Package(self, pkg) + package = self._weakref[name] = Package(self, pkg) changes.append(package) return changes @@ -239,7 +241,7 @@ class Cache(object): for pkg in self._cache.packages: cand = get_candidate_ver(pkg) if cand and not cand.downloadable and pkg.inst_state in states: - reqreinst.add(pkg.name) + reqreinst.add(pkg.get_fullname(pretty=True)) return reqreinst def _run_fetcher(self, fetcher): @@ -324,10 +326,11 @@ class Cache(object): for provides, providesver, version in vp.provides_list: pkg = version.parent_pkg if not candidate_only or (version == get_candidate_ver(pkg)): + name = pkg.get_fullname(pretty=True) try: - providers.add(self._weakref[pkg.name]) + providers.add(self._weakref[name]) except KeyError: - package = self._weakref[pkg.name] = Package(self, pkg) + package = self._weakref[name] = Package(self, pkg) providers.add(package) return list(providers) |
