* Update the fix from bug #220341 to protect USE deps from being neglected.
authorZac Medico <zmedico@gentoo.org>
Wed, 28 May 2008 22:16:22 +0000 (22:16 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 28 May 2008 22:16:22 +0000 (22:16 -0000)
* Skip redundant Atom construction in select_package().
(trunk r10466:10468)

svn path=/main/branches/2.1.2/; revision=10469

bin/emerge

index c43a9f0e65af7c11e1f63254f6855a6d88aeaf66..eec4fa15ed911c394d71d3f1f51b9af57ac5c371 100755 (executable)
@@ -3102,7 +3102,8 @@ class depgraph(object):
                # List of acceptable packages, ordered by type preference.
                matched_packages = []
                highest_version = None
-               atom = portage_dep.Atom(atom)
+               if not isinstance(atom, portage_dep.Atom):
+                       atom = portage_dep.Atom(atom)
                atom_cp = atom.cp
                existing_node = None
                myeb = None
@@ -3145,12 +3146,19 @@ 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 portage_dep.dep_getslot(atom):
+                               if installed and not cpv_list and \
+                                       matched_packages and atom.slot:
                                        for pkg in matched_packages:
-                                               if vardb.cpv_exists(pkg.cpv):
+                                               if not vardb.cpv_exists(pkg.cpv):
+                                                       continue
+                                               # Remove the slot from the atom and verify that
+                                               # the package matches the resulting atom.
+                                               atom_without_slot = portage_dep.remove_slot(atom)
+                                               atom_without_slot = portage_dep.Atom(atom_without_slot)
+                                               if portage.match_from_list(
+                                                       atom_without_slot, [pkg]):
                                                        cpv_list = [pkg.cpv]
-                                                       break
+                                               break
 
                                if not cpv_list:
                                        continue