depgraph: tweak virtual transition code
authorZac Medico <zmedico@gentoo.org>
Fri, 30 Sep 2011 17:04:11 +0000 (10:04 -0700)
committerZac Medico <zmedico@gentoo.org>
Fri, 30 Sep 2011 17:04:11 +0000 (10:04 -0700)
This fixes a false --binpkg-respect-use warning that's triggered by
erroneous USE/IUSE comparison between the new-style virtual and an
old-style virtual match.

pym/_emerge/depgraph.py

index 9638ce9a7ba7c28908ba83c7508913f2020ad107..ad04551127b6fbd1f9330b595c7e1818a85a32f6 100644 (file)
@@ -3689,6 +3689,8 @@ class depgraph(object):
                if not isinstance(atom, portage.dep.Atom):
                        atom = portage.dep.Atom(atom)
                atom_cp = atom.cp
+               have_new_virt = atom_cp.startswith("virtual/") and \
+                       self._have_new_virt(root, atom_cp)
                atom_set = InternalPackageSet(initial_atoms=(atom,), allow_repo=True)
                existing_node = None
                myeb = None
@@ -3736,6 +3738,9 @@ class depgraph(object):
                                # USE configuration.
                                for pkg in self._iter_match_pkgs(root_config, pkg_type, atom.without_use, 
                                        onlydeps=onlydeps):
+                                       if pkg.cp != atom_cp and have_new_virt:
+                                               # pull in a new-style virtual instead
+                                               continue
                                        if pkg in self._dynamic_config._runtime_pkg_mask:
                                                # The package has been masked by the backtracking logic
                                                continue
@@ -3954,11 +3959,6 @@ class depgraph(object):
                                                if not e_pkg:
                                                        break
 
-                                               if e_pkg.cp != atom_cp and \
-                                                       self._have_new_virt(root, atom_cp):
-                                                       # pull in a new-style virtual instead
-                                                       break
-
                                                # Use PackageSet.findAtomForPackage()
                                                # for PROVIDE support.
                                                if atom_set.findAtomForPackage(e_pkg, modified_use=self._pkg_use_enabled(e_pkg)):