summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-03-11 05:20:52 +0000
committerZac Medico <zmedico@gentoo.org>2009-03-11 05:20:52 +0000
commitba72c9112761fbaf89e979d8aed82a6c3da623b3 (patch)
tree787b0fe758baaa56b5dccedf65ffccc5dbc2a9d5 /pym/_emerge/__init__.py
parentFix grabfile_package() to preprocess atoms before passing them to (diff)
downloadportage-multirepo-ba72c9112761fbaf89e979d8aed82a6c3da623b3.tar.gz
portage-multirepo-ba72c9112761fbaf89e979d8aed82a6c3da623b3.tar.bz2
portage-multirepo-ba72c9112761fbaf89e979d8aed82a6c3da623b3.zip
Bug #253904 - Add a lookahead mechanism inside
depgraph._dep_check_composite_db._visible() which masks package choices that are likely to trigger slot conflicts. Thanks to Vlastimil Babka <caster@g.o> for the suggestion. (trunk r12622:12624) svn path=/main/branches/2.1.6/; revision=12898
Diffstat (limited to 'pym/_emerge/__init__.py')
-rw-r--r--pym/_emerge/__init__.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index dc848fc9..16da537d 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -5051,9 +5051,10 @@ class depgraph(object):
# dependencies so that things like --fetchonly can still
# function despite collisions.
pass
- else:
+ elif not previously_added:
self._slot_pkg_map[pkg.root][pkg.slot_atom] = pkg
self.mydbapi[pkg.root].cpv_inject(pkg)
+ self._filtered_trees[pkg.root]["porttree"].dbapi._clear_cache()
if not pkg.installed:
# Allow this package to satisfy old-style virtuals in case it
@@ -8881,6 +8882,20 @@ class depgraph(object):
return False
except portage.exception.InvalidDependString:
pass
+ in_graph = self._depgraph._slot_pkg_map[
+ self._root].get(pkg.slot_atom)
+ if in_graph is None:
+ # Mask choices for packages which are not the highest visible
+ # version within their slot (since they usually trigger slot
+ # conflicts).
+ highest_visible, in_graph = self._depgraph._select_package(
+ self._root, pkg.slot_atom)
+ if pkg != highest_visible:
+ return False
+ elif in_graph != pkg:
+ # Mask choices for packages that would trigger a slot
+ # conflict with a previously selected package.
+ return False
return True
def _dep_expand(self, atom):