For bug #184412, make depclean more consistent with the update algorithm by keeping...
authorZac Medico <zmedico@gentoo.org>
Sun, 8 Jul 2007 02:52:26 +0000 (02:52 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 8 Jul 2007 02:52:26 +0000 (02:52 -0000)
svn path=/main/branches/2.1.2/; revision=7196

bin/emerge

index c86e16c7b036c1c606517316a7bfbfe240a7223d..30541ef6da60b947b9b47a86c617f4138324d7d6 100755 (executable)
@@ -5097,6 +5097,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"] = \
@@ -5151,6 +5152,12 @@ def action_depclean(settings, trees, ldpath_mtimes,
                        # deep world update would pull in.  Don't prune if this atom comes
                        # directly from world though, since world atoms are greedy when
                        # they don't specify a slot.
+                       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):