diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-04-06 18:54:26 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-04-06 18:54:26 +0000 |
commit | f1f69d224d499e12cedc363b5459266bbfa58605 (patch) | |
tree | 91673db363237a48f62774300b929cf5de1ec629 | |
parent | 4614f5371857b8cc6fa952e309cd9664c8c9c3e2 (diff) | |
download | portage-f1f69d224d499e12cedc363b5459266bbfa58605.tar.gz portage-f1f69d224d499e12cedc363b5459266bbfa58605.tar.bz2 portage-f1f69d224d499e12cedc363b5459266bbfa58605.zip |
Fix the CompositDbapi.match() logic wrt "selective" behavior and installed
packages so that it correctly handles false argument matches due to PROVIDE
when a corresponding new-style virtual exists. (trunk r9729)
svn path=/main/branches/2.1.2/; revision=9730
-rwxr-xr-x | bin/emerge | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/bin/emerge b/bin/emerge index 01cbf8dbc..a4865d1ab 100755 --- a/bin/emerge +++ b/bin/emerge @@ -1480,11 +1480,23 @@ class CompositeDbapi(object): else: if pkg.installed and "selective" not in self._depgraph.myparams: try: - if self._depgraph._set_atoms.findAtomForPackage( - pkg.cpv, pkg.metadata): - ret = [] + arg = self._depgraph._set_atoms.findAtomForPackage( + pkg.cpv, pkg.metadata) except portage_exception.InvalidDependString: - pass + arg = None + arg_cp = None + else: + arg_cp = portage.dep_getkey(arg) + if arg and arg_cp != pkg.cp: + # If this argument matches via PROVIDE but there is a + # new-style virtual available, then the argument does + # not really apply to this package. + virt_pkg, virt_existing = \ + self._depgraph._select_package(self._root, arg_cp) + if virt_pkg and virt_pkg.cp == arg_cp: + arg = None + if arg: + ret = [] if ret is None: self._cpv_tree_map[pkg.cpv] = \ self._depgraph.pkg_tree_map[pkg.type_name] |