From 0c5e13ce0f86d2cb7dffad2753953dd46d332075 Mon Sep 17 00:00:00 2001 From: Thomas Vander Stichele Date: Fri, 18 Jun 2010 22:02:53 +0000 Subject: [PATCH] * morituri/common/common.py: Add MissingDependencyException. * morituri/program/cdrdao.py: * morituri/rip/main.py: Use it to warn about missing cdrdao. --- ChangeLog | 8 ++++++++ morituri/common/common.py | 7 +++++++ morituri/program/cdrdao.py | 16 ++++++++++++---- morituri/rip/main.py | 8 +++++++- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 259ecc8..153d0a7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-06-19 Thomas Vander Stichele + + * morituri/common/common.py: + Add MissingDependencyException. + * morituri/program/cdrdao.py: + * morituri/rip/main.py: + Use it to warn about missing cdrdao. + 2010-06-18 Thomas Vander Stichele * morituri/common/task.py: diff --git a/morituri/common/common.py b/morituri/common/common.py index 684efc4..a223648 100644 --- a/morituri/common/common.py +++ b/morituri/common/common.py @@ -205,3 +205,10 @@ def tagListEquals(tl1, tl2): d2 = tagListToDict(tl2) return d1 == d2 + +class MissingDependencyException(Exception): + dependency = None + + def __init__(self, *args): + self.args = args + self.dependency = args[0] diff --git a/morituri/program/cdrdao.py b/morituri/program/cdrdao.py index 67b298a..9a3558b 100644 --- a/morituri/program/cdrdao.py +++ b/morituri/program/cdrdao.py @@ -250,10 +250,18 @@ class CDRDAOTask(task.Task): task.Task.start(self, runner) bufsize = 1024 - self._popen = asyncsub.Popen(["cdrdao", ] + self.options, - bufsize=bufsize, - stdin=subprocess.PIPE, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, close_fds=True) + try: + self._popen = asyncsub.Popen(["cdrdao", ] + self.options, + bufsize=bufsize, + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, close_fds=True) + except OSError, e: + import errno + if e.errno == errno.ENOENT: + raise common.MissingDependencyException('cdrdao') + + raise + self.debug('Started cdrdao with pid %d and options %r', self._popen.pid, self.options) diff --git a/morituri/rip/main.py b/morituri/rip/main.py index 8e4c1a0..413fbe0 100644 --- a/morituri/rip/main.py +++ b/morituri/rip/main.py @@ -3,7 +3,7 @@ import sys -from morituri.common import log, logcommand +from morituri.common import log, logcommand, common, task from morituri.rip import cd, offset, drive, image def main(argv): @@ -18,6 +18,12 @@ def main(argv): raise # deps.handleImportError(e) # ret = -1 + except task.TaskException, e: + if isinstance(e.exception, common.MissingDependencyException): + sys.stderr.write('rip: error: missing dependency "%s"\n' % + e.exception.dependency) + return 255 + raise if ret is None: return 0