summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/_emerge/__init__.py39
1 files changed, 33 insertions, 6 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 1a36123a1..fab89f17f 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -4837,8 +4837,8 @@ class depgraph(object):
# This probably means that a required package
# was dropped via --skipfirst. It makes the
# resume list invalid, so convert it to a
- # PackageNotFound exception.
- raise portage.exception.PackageNotFound(
+ # UnsatisfiedResumeDep exception.
+ raise self.UnsatisfiedResumeDep(
self._unsatisfied_deps[0].atom)
self._serialized_tasks_cache = None
try:
@@ -4908,6 +4908,13 @@ class depgraph(object):
if arg not in refs:
refs.append(arg)
+ class UnsatisfiedResumeDep(portage.exception.PortageException):
+ """
+ A dependency of a resume list is not installed. This
+ can occur when a required package is dropped from the
+ merge list via --skipfirst.
+ """
+
class _internal_exception(portage.exception.PortageException):
def __init__(self, value=""):
portage.exception.PortageException.__init__(self, value)
@@ -7763,14 +7770,34 @@ def action_build(settings, trees, mtimedb,
success = False
try:
success = mydepgraph.loadResumeCommand(mtimedb["resume"])
- except portage.exception.PackageNotFound:
+ except (portage.exception.PackageNotFound,
+ mydepgraph.UnsatisfiedResumeDep), e:
if show_spinner:
print
+ from textwrap import wrap
from portage.output import EOutput
out = EOutput()
- out.eerror("Error: The resume list contains packages that are no longer")
- out.eerror(" available to be emerged. Please restart/continue")
- out.eerror(" the merge operation manually.")
+
+ if isinstance(e, mydepgraph.UnsatisfiedResumeDep):
+ out.eerror("An expected dependency " + \
+ "is not installed: %s" % str(e))
+ out.eerror("")
+ msg = "The resume list contains packages " + \
+ "with dependencies that have not been " + \
+ "installed yet. Please restart/continue " + \
+ "the operation manually."
+ for line in wrap(msg, 72):
+ out.eerror(line)
+ elif isinstance(e, portage.exception.PackageNotFound):
+ out.eerror("An expected package is " + \
+ "not available: %s" % str(e))
+ out.eerror("")
+ msg = "The resume list contains one or more " + \
+ "packages that are no longer " + \
+ "available. Please restart/continue " + \
+ "the operation manually."
+ for line in wrap(msg, 72):
+ out.eerror(line)
else:
if show_spinner:
print "\b\b... done!"