[PATCH 1 of 2] py3: convert to unicode to pass into encode()

Yuya Nishihara yuya at tcha.org
Fri Oct 7 09:42:59 EDT 2016


On Fri, 07 Oct 2016 14:05:41 +0200, Pulkit Goyal wrote:
> # HG changeset patch
> # User Pulkit Goyal <7895pulkit at gmail.com>
> # Date 1475835208 -7200
> #      Fri Oct 07 12:13:28 2016 +0200
> # Node ID 480cfc1623c2ad732300d942bbfab41343f7b8c5
> # Parent  91a3c58ecf938ed675f5364b88f0d663f12b0047
> py3: convert to unicode to pass into encode()
> 
> encoding.encoding is bytes, we need to pass it to encode() which accepts
> unicodes in py3, so used pycomapt.sysstr() Also this can't be done using
> transformer as that only transforms the string values not variables.
> 
> diff -r 91a3c58ecf93 -r 480cfc1623c2 mercurial/i18n.py
> --- a/mercurial/i18n.py	Mon Oct 03 13:24:56 2016 +0200
> +++ b/mercurial/i18n.py	Fri Oct 07 12:13:28 2016 +0200
> @@ -12,7 +12,10 @@
>  import os
>  import sys
>  
> -from . import encoding
> +from . import (
> +    encoding,
> +    pycompat,
> +)
>  
>  # modelled after templater.templatepath:
>  if getattr(sys, 'frozen', None) is not None:
> @@ -85,6 +88,7 @@
>              # means u.encode(sys.getdefaultencoding()).decode(enc). Since
>              # the Python encoding defaults to 'ascii', this fails if the
>              # translated string use non-ASCII characters.
> +            encoding.encoding = pycompat.sysstr(encoding.encoding)

We shouldn't convert encoding.encoding to unicode because it would break
_('checking encoding (%s)...\n') % encoding.encoding, bytes % unicode, for
 example.

>              _msgcache[message] = u.encode(encoding.encoding, "replace")


More information about the Mercurial-devel mailing list