Inside depgraph.loadResumeCommand(), ignore unsatisified dependencies that
authorZac Medico <zmedico@gentoo.org>
Wed, 21 Jan 2009 06:36:36 +0000 (06:36 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 21 Jan 2009 06:36:36 +0000 (06:36 -0000)
are pulled in by installed packages. This is needed in order to avoid having
--keep-going bail out needlessly when one of a group of circularly dependent
packages fails to install after one or more of the group have already been
installed. TODO: Add sanity checks to make sure that it's really safe to
ignore all the deps that can be ignored by this code.

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

pym/_emerge/__init__.py

index 478faf2350ae6d803c5ce73feb47ce7d1b416312..5802b1396b935ecc262e486016fbaeff89a39073 100644 (file)
@@ -8514,13 +8514,19 @@ class depgraph(object):
                        # masked.
                        if not self._create_graph(allow_unsatisfied=True):
                                return False
-                       if masked_tasks or self._unsatisfied_deps:
+
+                       # TODO: Add sanity checks to make sure that it's really
+                       # safe to ignore all the deps that can be ignored here.
+                       unsatisfied_deps = [x for x in self._unsatisfied_deps \
+                               if isinstance(x.parent, Package) and \
+                               x.parent.operation == "merge"]
+                       if masked_tasks or unsatisfied_deps:
                                # This probably means that a required package
                                # was dropped via --skipfirst. It makes the
                                # resume list invalid, so convert it to a
                                # UnsatisfiedResumeDep exception.
                                raise self.UnsatisfiedResumeDep(self,
-                                       masked_tasks + self._unsatisfied_deps)
+                                       masked_tasks + unsatisfied_deps)
                        self._serialized_tasks_cache = None
                        try:
                                self.altlist()