summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-06-24 01:00:47 +0000
committerZac Medico <zmedico@gentoo.org>2008-06-24 01:00:47 +0000
commitaf155c2e1ab6428dfd6be251af514aef11443454 (patch)
tree6eb946f4d42ac7b5ec3a624d8aa7be41361b12ec
parent7c35646f676ce392c22ad4458020e3b8ea814379 (diff)
downloadportage-af155c2e1ab6428dfd6be251af514aef11443454.tar.gz
portage-af155c2e1ab6428dfd6be251af514aef11443454.tar.bz2
portage-af155c2e1ab6428dfd6be251af514aef11443454.zip
Fix some remaining corner cases that cause bug #220341 to reappear
intermittently. Thanks to pva for reporting. svn path=/main/trunk/; revision=10768
-rw-r--r--pym/_emerge/__init__.py29
1 files changed, 15 insertions, 14 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 2de005815..6593ac48c 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -3109,21 +3109,22 @@ class depgraph(object):
# the newly built package still won't have the expected slot.
# Therefore, assume that such SLOT dependencies are already
# satisfied rather than forcing a rebuild.
- if installed and not cpv_list and \
- matched_packages and atom.slot:
- for pkg in matched_packages:
- if not vardb.cpv_exists(pkg.cpv):
+ if installed and not cpv_list and atom.slot:
+ for cpv in db.match(atom.cp):
+ slot_available = False
+ for other_db, other_type, other_built, \
+ other_installed, other_keys in dbs:
+ try:
+ if atom.slot == \
+ other_db.aux_get(cpv, ["SLOT"])[0]:
+ slot_available = True
+ break
+ except KeyError:
+ pass
+ if not slot_available:
continue
- inst_pkg = self._pkg_cache.get(
- (pkg_type, root, pkg.cpv, "nomerge"))
- if inst_pkg is None:
- metadata = izip(self._mydbapi_keys,
- vardb.aux_get(pkg.cpv, self._mydbapi_keys))
- inst_pkg = Package(built=built, cpv=pkg.cpv,
- installed=installed, metadata=metadata,
- onlydeps=onlydeps, root_config=root_config,
- type_name=pkg_type)
- self._pkg_cache[inst_pkg] = inst_pkg
+ inst_pkg = self._pkg(cpv, "installed",
+ root_config, installed=installed)
# Remove the slot from the atom and verify that
# the package matches the resulting atom.
atom_without_slot = portage.dep.remove_slot(atom)