Cleanup and consolidate error handling

This commit is contained in:
Todd Gamblin 2015-06-06 15:50:01 -07:00
parent b9746de52e
commit 53feb12ea0
4 changed files with 21 additions and 18 deletions

View file

@ -126,14 +126,7 @@ def main():
try: try:
return_val = command(parser, args) return_val = command(parser, args)
except SpackError, e: except SpackError, e:
if spack.debug: e.die()
# In debug mode, raise with a full stack trace.
raise
elif e.long_message:
tty.die(e.message, e.long_message)
else:
tty.die(e.message)
except KeyboardInterrupt: except KeyboardInterrupt:
sys.stderr.write('\n') sys.stderr.write('\n')
tty.die("Keyboard interrupt.") tty.die("Keyboard interrupt.")

View file

@ -280,6 +280,10 @@ def child_fun():
# Use os._exit here to avoid raising a SystemExit exception, # Use os._exit here to avoid raising a SystemExit exception,
# which interferes with unit tests. # which interferes with unit tests.
os._exit(0) os._exit(0)
except spack.error.SpackError, e:
e.die()
except: except:
# Child doesn't raise or return to main spack code. # Child doesn't raise or return to main spack code.
# Just runs default exception handler and exits. # Just runs default exception handler and exits.

View file

@ -22,6 +22,10 @@
# along with this program; if not, write to the Free Software Foundation, # along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
############################################################################## ##############################################################################
import os
import sys
import llnl.util.tty as tty
import spack
class SpackError(Exception): class SpackError(Exception):
"""This is the superclass for all Spack errors. """This is the superclass for all Spack errors.
@ -38,6 +42,17 @@ def long_message(self):
return self._long_message return self._long_message
def die(self):
if spack.debug:
sys.excepthook(*sys.exc_info())
os._exit(1)
else:
tty.error(self.message)
if self.long_message:
print self.long_message
os._exit(1)
def __str__(self): def __str__(self):
msg = self.message msg = self.message
if self.long_message: if self.long_message:

View file

@ -816,17 +816,8 @@ def real_work():
except ProcessError, e: except ProcessError, e:
# Annotate with location of build log. # Annotate with location of build log.
e.build_log = log_path e.build_log = log_path
# One of the processes returned an error code.
# Suppress detailed stack trace here unless in debug mode
if spack.debug:
raise e
else:
tty.error(e)
# Still need to clean up b/c there was an error.
cleanup() cleanup()
os._exit(1) raise e
except: except:
# other exceptions just clean up and raise. # other exceptions just clean up and raise.