For bug #184412, make depclean more consistent with the update algorithm by keeping...
authorZac Medico <zmedico@gentoo.org>
Mon, 30 Jul 2007 05:48:28 +0000 (05:48 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 30 Jul 2007 05:48:28 +0000 (05:48 -0000)
svn path=/main/branches/2.1.2.9/; revision=7491

bin/emerge

index 15145183c9a74e7ad9b432a19255a38ce9141a7e..02ee3ea258695624020878d3e69ff72cd767a2bb 100755 (executable)
@@ -4742,6 +4742,7 @@ def action_depclean(settings, trees, ldpath_mtimes,
 
        xterm_titles = "notitles" not in settings.features
        myroot = settings["ROOT"]
+       portdb = trees[myroot]["porttree"].dbapi
        dep_check_trees = {}
        dep_check_trees[myroot] = {}
        dep_check_trees[myroot]["vartree"] = \
@@ -4794,6 +4795,12 @@ def action_depclean(settings, trees, ldpath_mtimes,
                        # 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.
+                       visible_in_portdb = [cpv for cpv in pkgs if portdb.match("="+cpv)]
+                       if visible_in_portdb:
+                               # For consistency with the update algorithm, keep the highest
+                               # visible version and prune any versions that are either masked
+                               # or no longer exist in the portage tree.
+                               pkgs = visible_in_portdb
                        pkgs = [portage.best(pkgs)]
                for pkg in pkgs:
                        if fakedb.cpv_exists(pkg):