Mercurial > hg
changeset 47291:d9c71bbe20f7
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
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Tue, 18 May 2021 22:07:16 -0700 |
parents | 5e736d2e9703 |
children | 5a75be916316 |
files | mercurial/error.py mercurial/scmutil.py |
diffstat | 2 files changed, 20 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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):
--- 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