From 89ee843080b5e4d6f142b8199414720dc01be116 Mon Sep 17 00:00:00 2001 From: Matthew Vernon Date: Mon, 14 Feb 2022 14:14:27 +0000 Subject: swift-ring-builder: exit ERROR (2) on uncaught exceptions swift-ring-builder has three exit statuses: 0 (OK), 1 (WARNING), 2 (ERROR). Uncaught exceptions in python result in an exit code of 1, so for example problems writing a builder file to disk will result in an exit of 1 (warning) rather than 2 (error). This addresses that by overriding sys.excepthook to produce the usual backtrace and then exit 2 (error); excepthook is called when an exception is unhandled, unless that is SystemExit. Closes-Bug: 1960657 Change-Id: I7cfeff4f436ade319cf21d0d29853931aef6d20f --- bin/swift-ring-builder | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'bin') diff --git a/bin/swift-ring-builder b/bin/swift-ring-builder index 4f8517995..f89b47441 100755 --- a/bin/swift-ring-builder +++ b/bin/swift-ring-builder @@ -16,9 +16,22 @@ import sys +import traceback -from swift.cli.ringbuilder import main +# We exit code 1 on WARNING statuses, 2 on ERROR. This means we need +# to handle any uncaught exceptions by printing the usual backtrace, +# but then exiting 2 (not 1 as is usual for a python +# exception). + + +def exit_with_status_two(tp, val, tb): + traceback.print_exception(tp, val, tb) + sys.exit(2) +sys.excepthook = exit_with_status_two + +from swift.cli.ringbuilder import main + if __name__ == "__main__": sys.exit(main()) -- cgit v1.2.1