summaryrefslogtreecommitdiff
path: root/morphlib/execute.py
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2011-10-19 15:01:00 +0100
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2011-10-19 15:01:00 +0100
commit04b37aca13ac899bede40bfef19e5c2e1230a75f (patch)
tree467a2ac6a059a23d9dd5c163bd900675f6068601 /morphlib/execute.py
parentfd4d285ed978c662607463ae4aa8abdccfab708a (diff)
downloadmorph-04b37aca13ac899bede40bfef19e5c2e1230a75f.tar.gz
Include stdout output in CommandFailed errors.
This is necessary because compilers tend to write error messages to stdout, not stderr, and it is silly to make morph users go read the log files to see what the error actually is.
Diffstat (limited to 'morphlib/execute.py')
-rw-r--r--morphlib/execute.py18
1 files changed, 13 insertions, 5 deletions
diff --git a/morphlib/execute.py b/morphlib/execute.py
index fe1921fe..02e7e196 100644
--- a/morphlib/execute.py
+++ b/morphlib/execute.py
@@ -23,7 +23,17 @@ import morphlib
class CommandFailure(Exception):
- pass
+ def __init__(self, command, stdout, stderr, exit):
+ Exception.__init__(self,
+ 'Command failed: %s\n'
+ 'Standard output:\n%s\n'
+ 'Standard error:\n%s\n'
+ 'Exit code: %s' %
+ (command,
+ morphlib.util.indent(stdout),
+ morphlib.util.indent(stderr),
+ exit))
+
class Execute(object):
@@ -64,8 +74,7 @@ class Execute(object):
logging.debug('Standard output:\n%s' % morphlib.util.indent(out))
logging.debug('Standard error:\n%s' % morphlib.util.indent(err))
if p.returncode != 0:
- raise CommandFailure('Command failed: %s\n%s' %
- (command, morphlib.util.indent(err)))
+ raise CommandFailure(command, out, err, p.returncode)
stdouts.append(out)
return stdouts
@@ -90,7 +99,6 @@ class Execute(object):
logging.debug('Standard output:\n%s' % morphlib.util.indent(out))
logging.debug('Standard error:\n%s' % morphlib.util.indent(err))
if p.returncode != 0:
- raise CommandFailure('Command failed: %s\n%s' %
- (argv, morphlib.util.indent(err)))
+ raise CommandFailure(' '.join(argv), out, err, p.returncode)
return out