From 79cb66e2737c3bfd87a5960f175f6281b1565190 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Mon, 4 Apr 2011 10:38:40 +0200 Subject: * apt/cache.py, apt/package.py: - Add architecture property to apt.Package (LP: #703472) - Change apt.Package.name to use get_fullname(pretty=True) (LP: #740072) --- apt/cache.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'apt/cache.py') diff --git a/apt/cache.py b/apt/cache.py index 4b917236..40fe40a9 100644 --- a/apt/cache.py +++ b/apt/cache.py @@ -132,6 +132,9 @@ class Cache(object): self._sorted_set = None self._weakref.clear() + self._have_multi_arch = bool(apt_pkg.config.value_list("APT::" + + "Architectures")) + progress.op = _("Building data structures") i = last = 0 size = len(self._cache.packages) @@ -141,7 +144,10 @@ class Cache(object): last = i # drop stuff with no versions (cruft) if pkg.has_versions: - self._set.add(pkg.name) + 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)) i += 1 -- cgit v1.2.3 From 28233cb715fafbd460cf55a79e4625123e65a702 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Mon, 4 Apr 2011 10:53:26 +0200 Subject: 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 --- apt/cache.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'apt/cache.py') 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) -- cgit v1.2.3