Fix --depclean/--prune regressions reported by selkin:
authorZac Medico <zmedico@gentoo.org>
Wed, 23 Jul 2008 19:48:59 +0000 (19:48 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 23 Jul 2008 19:48:59 +0000 (19:48 -0000)
 * Make --with-bdeps default to "y" for removal actions.

 * Treat unsatisfied build time dependencies as "soft" for removal actions,
   even when --with-bdeps=y.

svn path=/main/trunk/; revision=11176

pym/_emerge/__init__.py

index 9aa8e38e3f5202f8011f1f31c27859dcb6e10c06..50462940d6e7912ed7409c283f7dbac73ad8c30c 100644 (file)
@@ -4485,6 +4485,7 @@ class depgraph(object):
                myuse = pkg.use.enabled
                jbigkey = pkg
                depth = pkg.depth + 1
+               removal_action = "remove" in self.myparams
 
                edepend={}
                depkeys = ["DEPEND","RDEPEND","PDEPEND"]
@@ -4498,7 +4499,8 @@ class depgraph(object):
                        edepend["RDEPEND"] = ""
                        edepend["PDEPEND"] = ""
                bdeps_satisfied = False
-               if mytype in ("installed", "binary"):
+               
+               if pkg.built and not removal_action:
                        if self.myopts.get("--with-bdeps", "n") == "y":
                                # Pull in build time deps as requested, but marked them as
                                # "satisfied" since they are not strictly required. This allows
@@ -4512,6 +4514,9 @@ class depgraph(object):
                                # built packages do not have build time dependencies.
                                edepend["DEPEND"] = ""
 
+               if removal_action and self.myopts.get("--with-bdeps", "y") == "n":
+                       edepend["DEPEND"] = ""
+
                deps = (
                        ("/", edepend["DEPEND"],
                                self._priority(buildtime=True, satisfied=bdeps_satisfied)),
@@ -11681,8 +11686,10 @@ def action_depclean(settings, trees, ldpath_mtimes,
 
                unresolvable = set()
                for dep in resolver._initially_unsatisfied_deps:
-                       if isinstance(dep.parent, Package):
+                       if isinstance(dep.parent, Package) and \
+                               (dep.priority > UnmergeDepPriority.SOFT):
                                unresolvable.add((dep.atom, dep.parent.cpv))
+
                if not unresolvable:
                        return False