For bug #169187, make --depclean prune unneeded slots such that it is consistent...
authorZac Medico <zmedico@gentoo.org>
Sun, 4 Mar 2007 00:34:57 +0000 (00:34 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 4 Mar 2007 00:34:57 +0000 (00:34 -0000)
svn path=/main/branches/2.1.2/; revision=6161

bin/emerge

index bd0831fd4bc30ce05f86642141de00c030eaaaa2..0bc8b2395d4fb227e48064cf8c5296042d8f535d 100755 (executable)
@@ -4598,6 +4598,8 @@ def action_depclean(settings, trees, ldpath_mtimes,
        dep_check_trees[myroot]["porttree"] = dep_check_trees[myroot]["vartree"]
        syslist = getlist(settings, "system")
        worldlist = getlist(settings, "world")
+       system_world_dict = genericdict(worldlist)
+       system_world_dict.update(genericdict(syslist))
        fakedb = portage.fakedbapi(settings=settings)
        myvarlist = vardb.cpv_all()
 
@@ -4634,8 +4636,12 @@ def action_depclean(settings, trees, ldpath_mtimes,
                        if not atom.startswith("!") and priority == hard:
                                unresolveable.setdefault(atom, []).append(parent)
                        continue
-               # Could put slot checking here to ensure that there aren't two
-               # packages with the same slot...
+               if portage.dep_getkey(atom) not in system_world_dict:
+                       # Prune all but the best matching slot, since that's all that a
+                       # deep world update would pull in.  Don't prune if the cpv is in
+                       # system or world though, since those sets trigger greedy update
+                       # of all slots.
+                       pkgs = [portage.best(pkgs)]
                for pkg in pkgs:
                        if fakedb.cpv_exists(pkg):
                                continue