aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonmain.py
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-09-22 14:46:58 -0400
committerEli Schwartz <eschwartz@archlinux.org>2022-09-22 15:24:56 -0400
commit28103614efb8197bc35e2e0dc9ab97bb42bd951d (patch)
tree14b4047a704402ba07a1060aebadfc20944e3a9c /mesonbuild/mesonmain.py
parentd364985365e2cf49a877bda104a5e20b15e42a53 (diff)
downloadmeson-28103614efb8197bc35e2e0dc9ab97bb42bd951d.zip
meson-28103614efb8197bc35e2e0dc9ab97bb42bd951d.tar.gz
meson-28103614efb8197bc35e2e0dc9ab97bb42bd951d.tar.bz2
refactor errorhandler for deduplication of logic
Mostly just move a comment around back to where it's more relevant, and handle MESON_FORCE_TRACEBACK once instead of twice.
Diffstat (limited to 'mesonbuild/mesonmain.py')
-rw-r--r--mesonbuild/mesonmain.py44
1 files changed, 21 insertions, 23 deletions
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py
index 03ff687..a6d33ef 100644
--- a/mesonbuild/mesonmain.py
+++ b/mesonbuild/mesonmain.py
@@ -38,35 +38,33 @@ def errorhandler(e, command):
if os.environ.get('MESON_FORCE_BACKTRACE'):
raise e
return 1
- elif isinstance(e, OSError):
- if os.environ.get('MESON_FORCE_BACKTRACE'):
- raise e
- traceback.print_exc()
- error_msg = os.linesep.join([
- "Unhandled python exception",
- f"{e.strerror} - {e.args}",
- "this is probably not a Meson bug."])
-
- mlog.exception(error_msg)
- return e.errno
-
- else: # Exception
- if os.environ.get('MESON_FORCE_BACKTRACE'):
- raise e
- traceback.print_exc()
+ else:
# We assume many types of traceback are Meson logic bugs, but most
# particularly anything coming from the interpreter during `setup`.
# Some things definitely aren't:
# - PermissionError is always a problem in the user environment
# - runpython doesn't run Meson's own code, even though it is
# dispatched by our run()
- if command != 'runpython':
- msg = 'Unhandled python exception'
- if all(getattr(e, a, None) is not None for a in ['file', 'lineno', 'colno']):
- e = MesonBugException(msg, e.file, e.lineno, e.colno) # type: ignore
- else:
- e = MesonBugException(msg)
- mlog.exception(e)
+ if os.environ.get('MESON_FORCE_BACKTRACE'):
+ raise e
+ traceback.print_exc()
+
+ if isinstance(e, OSError):
+ error_msg = os.linesep.join([
+ "Unhandled python exception",
+ f"{e.strerror} - {e.args}",
+ "this is probably not a Meson bug."])
+
+ mlog.exception(error_msg)
+ return e.errno
+ else: # Exception
+ if command != 'runpython':
+ msg = 'Unhandled python exception'
+ if all(getattr(e, a, None) is not None for a in ['file', 'lineno', 'colno']):
+ e = MesonBugException(msg, e.file, e.lineno, e.colno) # type: ignore
+ else:
+ e = MesonBugException(msg)
+ mlog.exception(e)
return 2
# Note: when adding arguments, please also add them to the completion