summaryrefslogtreecommitdiffstats
path: root/py
diff options
context:
space:
mode:
authorMike Bonnet <mikeb@redhat.com>2007-12-11 18:54:10 -0500
committerMichael E Brown <michael_e_brown@dell.com>2007-12-11 18:04:05 -0600
commitbd5d08919539538c0bfead439fd8e3a33f3b01b3 (patch)
tree04872ede3c1709153a4df4e7abc1ea4b116cac55 /py
parentc4edf71309f230955998fd2922d6045068b31eab (diff)
downloadmock-bd5d08919539538c0bfead439fd8e3a33f3b01b3.tar.gz
mock-bd5d08919539538c0bfead439fd8e3a33f3b01b3.tar.xz
mock-bd5d08919539538c0bfead439fd8e3a33f3b01b3.zip
- make "mock --chroot" non-interactive - set the exit code of "mock --chroot" to the exit code of the process run in the chroot - log the output of the process to root.log
Signed-off-by: Michael E Brown <michael_e_brown@dell.com>
Diffstat (limited to 'py')
-rwxr-xr-xpy/mock.py13
-rw-r--r--py/mock/exception.py5
-rw-r--r--py/mock/util.py6
3 files changed, 19 insertions, 5 deletions
diff --git a/py/mock.py b/py/mock.py
index 90cd1d5..c4b9a68 100755
--- a/py/mock.py
+++ b/py/mock.py
@@ -467,7 +467,7 @@ def main(ret):
elif options.mode == 'clean':
chroot.clean()
- elif options.mode in ('chroot', 'shell'):
+ elif options.mode == 'shell':
chroot.tryLockBuildRoot()
try:
chroot._mountall()
@@ -480,6 +480,17 @@ def main(ret):
finally:
chroot._umountall()
+ elif options.mode == 'chroot':
+ if len(args) == 0:
+ log.critical("You must specify a command to run")
+ sys.exit(50)
+ else:
+ log.info("Running in chroot: %s" % args)
+
+ chroot.tryLockBuildRoot()
+ chroot._resetLogging()
+ chroot.doChroot(args)
+
elif options.mode == 'installdeps':
if len(args) == 0:
log.critical("You must specify an SRPM file.")
diff --git a/py/mock/exception.py b/py/mock/exception.py
index d93fcf3..b6d6282 100644
--- a/py/mock/exception.py
+++ b/py/mock/exception.py
@@ -8,16 +8,19 @@
# python library imports
#from exceptions import Exception
+import os
# our imports
# classes
class Error(Exception):
"base class for our errors."
- def __init__(self, msg):
+ def __init__(self, msg, status=None):
Exception.__init__(self)
self.msg = msg
self.resultcode = 1
+ if status is not None and os.WIFEXITED(status):
+ self.resultcode = os.WEXITSTATUS(status)
def __str__(self):
return self.msg
diff --git a/py/mock/util.py b/py/mock/util.py
index f2ddec2..bfaa03a 100644
--- a/py/mock/util.py
+++ b/py/mock/util.py
@@ -274,11 +274,11 @@ def do(command, chrootPath=None, timeout=0, raiseExc=True, returnOutput=0, uidMa
signal.signal(signal.SIGALRM, oldhandler)
# mask and return just return value, plus child output
- if raiseExc and os.WEXITSTATUS(ret):
+ if raiseExc and ((os.WIFEXITED(ret) and os.WEXITSTATUS(ret)) or os.WIFSIGNALED(ret)):
if returnOutput:
- raise mock.exception.Error, "Command failed: \n # %s\n%s" % (command, output)
+ raise mock.exception.Error, ("Command failed: \n # %s\n%s" % (command, output), ret)
else:
- raise mock.exception.Error, "Command failed. See logs for output.\n # %s" % command
+ raise mock.exception.Error, ("Command failed. See logs for output.\n # %s" % (command,), ret)
return output