def _main(argv, MainClass): """ Python hook for starting rbuild from the command line. @param argv: standard argument vector """ if argv is None: argv = sys.argv #pylint: disable-msg=E0701 # pylint complains about except clauses here because we sometimes # redefine debuggerException debuggerException = Exception try: argv = list(argv) debugAll = '--debug-all' in argv if debugAll: argv.remove('--debug-all') else: debuggerException = errors.RbuildInternalError sys.excepthook = errors.genExcepthook(debug=debugAll, debugCtrlC=debugAll) rc = MainClass().main(argv, debuggerException=debuggerException) if rc is None: return 0 return rc except debuggerException, err: raise
def testExceptHook(self): _genExcepthook = util.genExcepthook cwd = os.getcwd() try: # Create a non-"checkout" dir checkoutDir = tempfile.mkdtemp() os.chdir(checkoutDir) def assertUsesRoot(error, prefix, *args, **kwargs): self.failUnlessEqual(prefix, 'rbuild-error-') return lambda a, b, c: None # Expect that /tmp is used self.mock(os, 'getenv', mock.MockObject()) os.getenv._mock.setReturn(None, 'HOME') util.genExcepthook = assertUsesRoot errors.genExcepthook()(None, None, None) # Expect that $HOME is used homeDir = tempfile.mkdtemp() os.mkdir(homeDir + '/.rbuild') def assertUsesHome(error, prefix, *args, **kwargs): self.failUnlessEqual(prefix, homeDir + '/.rbuild/tracebacks/rbuild-error-') return lambda a, b, c: None os.getenv._mock.setReturn(homeDir, 'HOME') util.genExcepthook = assertUsesHome errors.genExcepthook()(None, None, None) self.unmock() # Turn the non-"checkout" dir into a "checkout", but not writable os.mkdir(checkoutDir + '/.rbuild') os.chmod(checkoutDir + '/.rbuild', 0555) # Expect that /tmp is used util.genExcepthook = assertUsesRoot errors.genExcepthook()(None, None, None) # Make the checkout writable os.chmod(checkoutDir + '/.rbuild', 0755) def assertUsesCheckout(error, prefix, *args, **kwargs): self.failUnlessEqual(prefix, checkoutDir + '/.rbuild/tracebacks/rbuild-error-') return lambda a, b, c: None # Expect that checkout is used util.genExcepthook = assertUsesCheckout errors.genExcepthook()(None, None, None) # Make the tracebacks dir unwritable os.chmod(checkoutDir + '/.rbuild/tracebacks', 0555) # Expect that /tmp is used util.genExcepthook = assertUsesRoot errors.genExcepthook()(None, None, None) os.chmod(checkoutDir + '/.rbuild/tracebacks', 0755) finally: util.genExcepthook = _genExcepthook util.rmtree(checkoutDir) util.rmtree(homeDir) os.chdir(cwd)