summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2011-04-04 10:53:26 +0200
committerJulian Andres Klode <jak@debian.org>2011-04-04 10:53:26 +0200
commit28233cb715fafbd460cf55a79e4625123e65a702 (patch)
tree816422e0e723d87b5b56ed439f7eb8bd0964264f
parentd89f51fee4d09f543aa015b00d62e49a86c10eb1 (diff)
downloadpython-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.py23
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)