changeset 45682:d2e1dcd4490d

errors: name arguments to Abort constructor Differential Revision: https://phab.mercurial-scm.org/D9179
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 08 Oct 2020 13:37:31 -0700
parents a736ab681b78
children 04aa48afab99
files hgext/largefiles/overrides.py hgext/narrow/narrowwirepeer.py mercurial/bundle2.py mercurial/chgserver.py mercurial/commandserver.py mercurial/crecord.py mercurial/debugcommands.py mercurial/dispatch.py mercurial/error.py mercurial/hgweb/hgweb_mod.py mercurial/match.py mercurial/scmutil.py mercurial/subrepo.py mercurial/wireprotov1server.py tests/bruterebase.py tests/test-url.py
diffstat 16 files changed, 31 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/largefiles/overrides.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/hgext/largefiles/overrides.py	Thu Oct 08 13:37:31 2020 -0700
@@ -734,7 +734,7 @@
         try:
             result = orig(ui, repo, pats, opts, rename)
         except error.Abort as e:
-            if pycompat.bytestr(e) != _(b'no files to copy'):
+            if e.message != _(b'no files to copy'):
                 raise e
             else:
                 nonormalfiles = True
@@ -851,7 +851,7 @@
                 lfdirstate.add(destlfile)
         lfdirstate.write()
     except error.Abort as e:
-        if pycompat.bytestr(e) != _(b'no files to copy'):
+        if e.message != _(b'no files to copy'):
             raise e
         else:
             nolfiles = True
--- a/hgext/narrow/narrowwirepeer.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/hgext/narrow/narrowwirepeer.py	Thu Oct 08 13:37:31 2020 -0700
@@ -13,7 +13,6 @@
     extensions,
     hg,
     narrowspec,
-    pycompat,
     wireprototypes,
     wireprotov1peer,
     wireprotov1server,
@@ -125,7 +124,7 @@
             )
     except error.Abort as exc:
         bundler = bundle2.bundle20(repo.ui)
-        manargs = [(b'message', pycompat.bytestr(exc))]
+        manargs = [(b'message', exc.message)]
         advargs = []
         if exc.hint is not None:
             advargs.append((b'hint', exc.hint))
--- a/mercurial/bundle2.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/bundle2.py	Thu Oct 08 13:37:31 2020 -0700
@@ -2089,7 +2089,7 @@
     except error.Abort as e:
         raise error.Abort(
             _(b'bundle at %s is corrupted:\n%s')
-            % (util.hidepassword(raw_url), bytes(e))
+            % (util.hidepassword(raw_url), e.message)
         )
     assert not inpart.read()
 
--- a/mercurial/chgserver.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/chgserver.py	Thu Oct 08 13:37:31 2020 -0700
@@ -502,7 +502,7 @@
             self.cresult.write(b'exit 255')
             return
         except error.Abort as inst:
-            self.ui.error(_(b"abort: %s\n") % inst)
+            self.ui.error(_(b"abort: %s\n") % inst.message)
             if inst.hint:
                 self.ui.error(_(b"(%s)\n") % inst.hint)
             self.ui.flush()
--- a/mercurial/commandserver.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/commandserver.py	Thu Oct 08 13:37:31 2020 -0700
@@ -500,7 +500,7 @@
         # handle exceptions that may be raised by command server. most of
         # known exceptions are caught by dispatch.
         except error.Abort as inst:
-            ui.error(_(b'abort: %s\n') % inst)
+            ui.error(_(b'abort: %s\n') % inst.message)
         except IOError as inst:
             if inst.errno != errno.EPIPE:
                 raise
--- a/mercurial/crecord.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/crecord.py	Thu Oct 08 13:37:31 2020 -0700
@@ -1808,7 +1808,7 @@
             try:
                 patch = self.ui.edit(patch.getvalue(), b"", action=b"diff")
             except error.Abort as exc:
-                self.errorstr = stringutil.forcebytestr(exc)
+                self.errorstr = exc.message
                 return None
             finally:
                 self.stdscr.clear()
--- a/mercurial/debugcommands.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/debugcommands.py	Thu Oct 08 13:37:31 2020 -0700
@@ -1770,7 +1770,7 @@
     try:
         username = ui.username()
     except error.Abort as e:
-        err = stringutil.forcebytestr(e)
+        err = e.message
         problems += 1
 
     fm.condwrite(
--- a/mercurial/dispatch.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/dispatch.py	Thu Oct 08 13:37:31 2020 -0700
@@ -288,7 +288,7 @@
             if req.fmsg:
                 req.ui.fmsg = req.fmsg
         except error.Abort as inst:
-            ferr.write(_(b"abort: %s\n") % inst)
+            ferr.write(_(b"abort: %s\n") % inst.message)
             if inst.hint:
                 ferr.write(_(b"(%s)\n") % inst.hint)
             return -1
--- a/mercurial/error.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/error.py	Thu Oct 08 13:37:31 2020 -0700
@@ -155,7 +155,15 @@
 class Abort(Hint, Exception):
     """Raised if a command needs to print an error and exit."""
 
-    __bytes__ = _tobytes
+    def __init__(self, message, hint=None):
+        self.message = message
+        self.hint = hint
+        # Pass the message into the Exception constructor to help extensions
+        # that look for exc.args[0].
+        Exception.__init__(self, message)
+
+    def __bytes__(self):
+        return self.message
 
     if pycompat.ispy3:
 
--- a/mercurial/hgweb/hgweb_mod.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/hgweb/hgweb_mod.py	Thu Oct 08 13:37:31 2020 -0700
@@ -493,7 +493,7 @@
         except error.Abort as e:
             res.status = b'403 Forbidden'
             res.headers[b'Content-Type'] = ctype
-            return rctx.sendtemplate(b'error', error=pycompat.bytestr(e))
+            return rctx.sendtemplate(b'error', error=e.message)
         except ErrorResponse as e:
             for k, v in e.headers:
                 res.headers[k] = v
--- a/mercurial/match.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/match.py	Thu Oct 08 13:37:31 2020 -0700
@@ -355,7 +355,10 @@
             except error.Abort as inst:
                 raise error.Abort(
                     b'%s: %s'
-                    % (pat, inst[0])  # pytype: disable=unsupported-operands
+                    % (
+                        pat,
+                        inst.message,
+                    )  # pytype: disable=unsupported-operands
                 )
             except IOError as inst:
                 if warn:
--- a/mercurial/scmutil.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/scmutil.py	Thu Oct 08 13:37:31 2020 -0700
@@ -216,7 +216,7 @@
     except error.WdirUnsupported:
         ui.error(_(b"abort: working directory revision cannot be specified\n"))
     except error.Abort as inst:
-        ui.error(_(b"abort: %s\n") % inst)
+        ui.error(_(b"abort: %s\n") % inst.message)
         if inst.hint:
             ui.error(_(b"(%s)\n") % inst.hint)
     except ImportError as inst:
--- a/mercurial/subrepo.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/subrepo.py	Thu Oct 08 13:37:31 2020 -0700
@@ -39,7 +39,6 @@
     dateutil,
     hashutil,
     procutil,
-    stringutil,
 )
 
 hg = None
@@ -84,9 +83,7 @@
         except error.Abort as ex:
             subrepo = subrelpath(self)
             errormsg = (
-                stringutil.forcebytestr(ex)
-                + b' '
-                + _(b'(in subrepository "%s")') % subrepo
+                ex.message + b' ' + _(b'(in subrepository "%s")') % subrepo
             )
             # avoid handling this exception by raising a SubrepoAbort exception
             raise SubrepoAbort(
--- a/mercurial/wireprotov1server.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/mercurial/wireprotov1server.py	Thu Oct 08 13:37:31 2020 -0700
@@ -497,11 +497,11 @@
         # cleanly forward Abort error to the client
         if not exchange.bundle2requested(opts.get(b'bundlecaps')):
             if proto.name == b'http-v1':
-                return wireprototypes.ooberror(pycompat.bytestr(exc) + b'\n')
+                return wireprototypes.ooberror(exc.message + b'\n')
             raise  # cannot do better for bundle1 + ssh
         # bundle2 request expect a bundle2 reply
         bundler = bundle2.bundle20(repo.ui)
-        manargs = [(b'message', pycompat.bytestr(exc))]
+        manargs = [(b'message', exc.message)]
         advargs = []
         if exc.hint is not None:
             advargs.append((b'hint', exc.hint))
@@ -684,7 +684,7 @@
                     # We did not change it to minimise code change.
                     # This need to be moved to something proper.
                     # Feel free to do it.
-                    procutil.stderr.write(b"abort: %s\n" % exc)
+                    procutil.stderr.write(b"abort: %s\n" % exc.message)
                     if exc.hint is not None:
                         procutil.stderr.write(b"(%s)\n" % exc.hint)
                     procutil.stderr.flush()
@@ -733,7 +733,7 @@
                 if exc.params:
                     errpart.addparam(b'params', b'\0'.join(exc.params))
             except error.Abort as exc:
-                manargs = [(b'message', stringutil.forcebytestr(exc))]
+                manargs = [(b'message', exc.message)]
                 advargs = []
                 if exc.hint is not None:
                     advargs.append((b'hint', exc.hint))
--- a/tests/bruterebase.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/tests/bruterebase.py	Thu Oct 08 13:37:31 2020 -0700
@@ -52,7 +52,7 @@
             try:
                 rebase.rebase(ui, repo, dest=dest, rev=[spec])
             except error.Abort as ex:
-                summary = b'ABORT: %s' % ex
+                summary = b'ABORT: %s' % ex.message
             except Exception as ex:
                 summary = b'CRASH: %s' % ex
             else:
--- a/tests/test-url.py	Thu Oct 08 15:35:44 2020 -0700
+++ b/tests/test-url.py	Thu Oct 08 13:37:31 2020 -0700
@@ -392,7 +392,7 @@
     >>> try:
     ...   u = url(b'file://mercurial-scm.org/foo')
     ... except error.Abort as e:
-    ...   forcebytestr(e)
+    ...   e.message
     'file:// URLs can only refer to localhost'
 
     Empty URL: