Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/osbuilder.py
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2009-12-22 10:27:19 (GMT)
committer Daniel Drake <dsd@laptop.org>2009-12-22 10:29:10 (GMT)
commit183d19af5f2716dd9c2393e2ece46bcc68af256e (patch)
tree9456d2c5e59353e15d021644735ac1b980ebdcf3 /osbuilder.py
parentff0ecaa400cee645db07efb42158edf8b522fed0 (diff)
Terminate part process on interrupt
Diffstat (limited to 'osbuilder.py')
-rwxr-xr-xosbuilder.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/osbuilder.py b/osbuilder.py
index 05a1984..b48859a 100755
--- a/osbuilder.py
+++ b/osbuilder.py
@@ -89,7 +89,12 @@ class Stage(object):
shenv = self._make_environment()
proc = subprocess.Popen(["/bin/bash", path], shell=False,
stdout=outtype, env=shenv)
- (out, err) = proc.communicate()
+ try:
+ (out, err) = proc.communicate()
+ except (Exception, KeyboardInterrupt), e:
+ proc.terminate()
+ raise StageException(mod, part, repr(e))
+
if not self.ignore_failures and proc.returncode != 0:
raise StageException(mod, part, proc.returncode)
if not self.console_output:
@@ -98,7 +103,12 @@ class Stage(object):
shenv = self._make_environment()
proc = subprocess.Popen(["/usr/bin/python", path], shell=False,
stdout=outtype, env=shenv)
- (out, err) = proc.communicate()
+ try:
+ (out, err) = proc.communicate()
+ except (Exception, KeyboardInterrupt), e:
+ proc.terminate()
+ raise StageException(mod, part, repr(e))
+
if not self.ignore_failures and proc.returncode != 0:
raise StageException(mod, part, proc.returncode)
if not self.console_output:
@@ -344,7 +354,7 @@ class OsBuilder(object):
CleanupStage(self).run()
except:
pass
- raise OsBuilderException("Failure in %s: module %s, part %s, error code %d" % (stage.__name__, ex.module, ex.part, ex.code))
+ raise OsBuilderException("Failure in %s: module %s, part %s, error code %s" % (stage.__name__, ex.module, ex.part, ex.code))
# cleanup
CleanupStage(self).run()