Patchwork [05,of,10,py3] dispatch: convert exception payload to bytes more carefully

login
register
mail settings
Submitter Augie Fackler
Date May 29, 2017, 2:32 p.m.
Message ID <47cbf6238b4a62cead3d.1496068347@imladris.local>
Download mbox | patch
Permalink /patch/21049/
State Accepted
Headers show

Comments

Augie Fackler - May 29, 2017, 2:32 p.m.
# HG changeset patch
# User Augie Fackler <raf@durin42.com>
# Date 1496000820 14400
#      Sun May 28 15:47:00 2017 -0400
# Node ID 47cbf6238b4a62cead3dc90a4021f7c34ae16f4e
# Parent  6e1ab7424617c7c7afca7faab559507c5e816a9c
dispatch: convert exception payload to bytes more carefully

We were previously depending on str() doing something reasonable here,
and we can't depend on the objects in question supporting __bytes__,
so we work around the lack of direct bytes formatting.
Yuya Nishihara - May 30, 2017, 12:50 p.m.
On Mon, 29 May 2017 10:32:27 -0400, Augie Fackler wrote:
> # HG changeset patch
> # User Augie Fackler <raf@durin42.com>
> # Date 1496000820 14400
> #      Sun May 28 15:47:00 2017 -0400
> # Node ID 47cbf6238b4a62cead3dc90a4021f7c34ae16f4e
> # Parent  6e1ab7424617c7c7afca7faab559507c5e816a9c
> dispatch: convert exception payload to bytes more carefully
> 
> We were previously depending on str() doing something reasonable here,
> and we can't depend on the objects in question supporting __bytes__,
> so we work around the lack of direct bytes formatting.
> 
> diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
> --- a/mercurial/dispatch.py
> +++ b/mercurial/dispatch.py
> @@ -319,7 +319,8 @@ def _callcatch(ui, func):
>      except error.CommandError as inst:
>          if inst.args[0]:
>              ui.pager('help')
> -            ui.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
> +            msgbytes = encoding.unitolocal(str(inst.args[1]))
> +            ui.warn(_("hg %s: %s\n") % (inst.args[0], msgbytes))

pycompat.bytestr() can be used here, too.

Patch

diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -319,7 +319,8 @@  def _callcatch(ui, func):
     except error.CommandError as inst:
         if inst.args[0]:
             ui.pager('help')
-            ui.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
+            msgbytes = encoding.unitolocal(str(inst.args[1]))
+            ui.warn(_("hg %s: %s\n") % (inst.args[0], msgbytes))
             commands.help_(ui, inst.args[0], full=False, command=True)
         else:
             ui.pager('help')