Log message for revision 85729: Merged from branches/slinkp-zopectl-exitcode-143813; fixes # 143813: zopectl should exit non-zero if child processes fail.
Changed: U Zope/branches/2.10/doc/CHANGES.txt U Zope/branches/2.10/lib/python/Zope2/Startup/zopectl.py -=- Modified: Zope/branches/2.10/doc/CHANGES.txt =================================================================== --- Zope/branches/2.10/doc/CHANGES.txt 2008-04-25 18:55:45 UTC (rev 85728) +++ Zope/branches/2.10/doc/CHANGES.txt 2008-04-25 19:06:16 UTC (rev 85729) @@ -8,6 +8,9 @@ Bugs fixed + - Launchpad #143813: zopectl now exits non-zero when + child processes fail. + - Launchpad #173658: Removed dead code in OFS.Traversable's 'unrestrictedTraverse' (apparent NameError). Modified: Zope/branches/2.10/lib/python/Zope2/Startup/zopectl.py =================================================================== --- Zope/branches/2.10/lib/python/Zope2/Startup/zopectl.py 2008-04-25 18:55:45 UTC (rev 85728) +++ Zope/branches/2.10/lib/python/Zope2/Startup/zopectl.py 2008-04-25 19:06:16 UTC (rev 85729) @@ -138,6 +138,8 @@ class ZopeCmd(ZDCmd): + _exitstatus = 0 + def _get_override(self, opt, name, svalue=None, flag=0): # Suppress the config file, and pass all configuration via the # command line. This avoids needing to specialize the zdrun @@ -203,7 +205,7 @@ cmd += '[sys.argv.append(x) for x in %s];' % argv cmd += 'import Zope2; app=Zope2.app(); execfile(\'%s\')' % script cmdline = self.get_startup_cmd(self.options.python, cmd) - os.system(cmdline) + self._exitstatus = os.system(cmdline) def help_run(self): print "run <script> [args] -- run a Python script with the Zope " @@ -269,10 +271,11 @@ # Parent process running (execv replaces process in child while True: try: - os.waitpid(pid, 0) + pid, status = os.waitpid(pid, 0) except (OSError, KeyboardInterrupt): continue else: + self._exitstatus = status break def help_test(self): @@ -298,6 +301,8 @@ print "program:", " ".join(options.program) c.do_status() c.cmdloop() + else: + return min(c._exitstatus, 1) def _ignoreSIGCHLD(*unused): while 1: @@ -326,4 +331,5 @@ # SIGCHILD is unset, just don't bother registering a SIGCHILD # signal handler at all. signal.signal(signal.SIGCHLD, _ignoreSIGCHLD) - main() + exitstatus = main() + sys.exit(exitstatus) _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins