Apply the fix for bug #152175 to system/world greedy behavior.
authorZac Medico <zmedico@gentoo.org>
Sat, 21 Oct 2006 02:24:01 +0000 (02:24 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 21 Oct 2006 02:24:01 +0000 (02:24 -0000)
svn path=/main/trunk/; revision=4773

bin/emerge

index 03a40ab1c7c3888e215fb113a04f3df8aa4aacc3..e84017be5dcc742b54bd22364a676cc78c299f8e 100755 (executable)
@@ -1579,6 +1579,8 @@ class depgraph:
 
        def xcreate(self,mode="system"):
                vardb = self.trees[self.target_root]["vartree"].dbapi
+               portdb = self.trees[self.target_root]["porttree"].dbapi
+               bindb = self.trees[self.target_root]["bintree"].dbapi
                world_problems = False
                if mode=="system":
                        mylist = getlist(self.settings, "system")
@@ -1611,6 +1613,23 @@ class depgraph:
                                myslots = set()
                                for cpv in vardb.match(mykey):
                                        myslots.add(vardb.aux_get(cpv, ["SLOT"])[0])
+                               if myslots:
+                                       best_pkgs = []
+                                       if "--usepkg" in self.myopts:
+                                               best_pkg = portage.best(bindb.match(atom))
+                                               if best_pkg:
+                                                       best_slot = bindb.aux_get(best_pkg, ["SLOT"])[0]
+                                                       best_pkgs.append(("binary", best_pkg, best_slot))
+                                       if "--usepkgonly" not in self.myopts:
+                                               best_pkg = portage.best(portdb.match(atom))
+                                               if best_pkg:
+                                                       best_slot = portdb.aux_get(best_pkg, ["SLOT"])[0]
+                                                       best_pkgs.append(("ebuild", best_pkg, best_slot))
+                                       if best_pkgs:
+                                               best_pkg = portage.best([x[1] for x in best_pkgs])
+                                               best_pkgs = [x for x in best_pkgs if x[1] == best_pkg]
+                                               best_slot = best_pkgs[0][2]
+                                               myslots.add(best_slot)
                                if len(myslots) > 1:
                                        for myslot in myslots:
                                                myslot_atom = "%s:%s" % (mykey, myslot)