This is an archive of the discontinued Mercurial Phabricator instance.

worker: raise exception instead of calling sys.exit() with child's code
ClosedPublic

Authored by martinvonz on Nov 9 2020, 2:42 PM.

Details

Summary

When a worker process returns an error code, we would call
sys.exit() with that exit code on the main process. The SystemExit
exception would then get caught in scmutil.callcatch(), which would
return that error code. The comment there says "Commands shouldn't
sys.exit directly", which I agree with. This patch changes it so we
raise a specific exception when a worker fails so we can catch
instead. I think that means that SystemExit is now always an
internal error.

(I had earlier thought that this call to sys.exit() was from within
the child process until Matt Harbison made me look again, so thanks
for that!)

Diff Detail

Repository
rHG Mercurial
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.