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:
return_val = command(parser, args)
except SpackError, e:
if spack.debug:
# 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)
e.die()
except KeyboardInterrupt:
sys.stderr.write('\n')
tty.die("Keyboard interrupt.")

View file

@ -280,6 +280,10 @@ def child_fun():
# Use os._exit here to avoid raising a SystemExit exception,
# which interferes with unit tests.
os._exit(0)
except spack.error.SpackError, e:
e.die()
except:
# Child doesn't raise or return to main spack code.
# 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,
# 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):
"""This is the superclass for all Spack errors.
@ -38,6 +42,17 @@ def long_message(self):
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):
msg = self.message
if self.long_message:

View file

@ -816,17 +816,8 @@ def real_work():
except ProcessError, e:
# Annotate with location of build log.
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()
os._exit(1)
raise e
except:
# other exceptions just clean up and raise.