Inside depgraph.loadResumeCommand(), ignore unsatisified dependencies that
authorZac Medico <zmedico@gentoo.org>
Wed, 11 Mar 2009 03:18:49 +0000 (03:18 -0000)
committerZac Medico <zmedico@gentoo.org>
Wed, 11 Mar 2009 03:18:49 +0000 (03:18 -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. (trunk r12541)

svn path=/main/branches/2.1.6/; revision=12827

pym/_emerge/__init__.py

index 01998d8059a637c90725434760854c04fbfe2378..bf070dd914ff7d534e55d1b57b26e5bce8f0da9a 100644 (file)
@@ -8498,13 +8498,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()