# HG changeset patch # User Martin von Zweigbergk # Date 1621400836 25200 # Node ID d9c71bbe20f7e9c056b2f17d67164091f85d3c6d # Parent 5e736d2e97030539b91ba294d5b6a7be75508e6f errors: make InterventionRequired subclass Abort The docstring for `Abort` says that it's for errors raised by commands and `InterventionRequired` is definitely something raised by commands, so it seems that it should be an `Abort`. This patch makes it so. It adds a `coarse_exit_code` (in addition to the already existing `detailed_exit_code`) to `Abort` to achieve that, since `InterventionRequired` should result in a special exit code even when the `ui.detailed-exit-code` config is not set. Differential Revision: https://phab.mercurial-scm.org/D10737 diff -r 5e736d2e9703 -r d9c71bbe20f7 mercurial/error.py --- a/mercurial/error.py Tue May 18 21:58:12 2021 -0700 +++ b/mercurial/error.py Tue May 18 22:07:16 2021 -0700 @@ -54,10 +54,13 @@ class Abort(Hint, Exception): """Raised if a command needs to print an error and exit.""" - def __init__(self, message, hint=None, detailed_exit_code=None): + def __init__( + self, message, hint=None, coarse_exit_code=None, detailed_exit_code=None + ): # type: (bytes, Optional[bytes]) -> None self.message = message self.hint = hint + self.coarse_exit_code = coarse_exit_code self.detailed_exit_code = detailed_exit_code # Pass the message into the Exception constructor to help extensions # that look for exc.args[0]. @@ -192,10 +195,22 @@ __bytes__ = _tobytes -class InterventionRequired(Hint, Exception): +class InterventionRequired(Abort): """Exception raised when a command requires human intervention.""" - __bytes__ = _tobytes + def __init__(self, message, hint=None): + super(InterventionRequired, self).__init__( + message, hint=hint, coarse_exit_code=1, detailed_exit_code=240 + ) + + def format(self): + # type: () -> bytes + from .i18n import _ + + message = _(b"%s\n") % self.message + if self.hint: + message += _(b"(%s)\n") % self.hint + return message class ConflictResolutionRequired(InterventionRequired): diff -r 5e736d2e9703 -r d9c71bbe20f7 mercurial/scmutil.py --- a/mercurial/scmutil.py Tue May 18 21:58:12 2021 -0700 +++ b/mercurial/scmutil.py Tue May 18 22:07:16 2021 -0700 @@ -203,17 +203,13 @@ if inst.hint: ui.error(_(b"(%s)\n") % inst.hint) detailed_exit_code = 50 - except error.InterventionRequired as inst: - ui.error(b"%s\n" % inst) - if inst.hint: - ui.error(_(b"(%s)\n") % inst.hint) - detailed_exit_code = 240 - coarse_exit_code = 1 except error.WdirUnsupported: ui.error(_(b"abort: working directory revision cannot be specified\n")) except error.Abort as inst: if inst.detailed_exit_code is not None: detailed_exit_code = inst.detailed_exit_code + if inst.coarse_exit_code is not None: + coarse_exit_code = inst.coarse_exit_code ui.error(inst.format()) except error.WorkerError as inst: # Don't print a message -- the worker already should have