diff --git a/hgext/extdiff.py b/hgext/extdiff.py --- a/hgext/extdiff.py +++ b/hgext/extdiff.py @@ -76,7 +76,6 @@ from mercurial import ( archival, cmdutil, commands, - encoding, error, filemerge, scmutil, @@ -365,7 +364,10 @@ def uisetup(ui): if options: options = ' ' + options return dodiff(ui, repo, cmdline + options, pats, opts) - doc = _('''\ + # We can't pass non-ASCII through docstrings (and path is + # in an unknown encoding anyway) + docpath = path.encode("string-escape") + mydiff.__doc__ = '''\ use %(path)s to diff repository (or selected files) Show differences between revisions for the specified files, using @@ -376,15 +378,7 @@ use %(path)s to diff repository (or sele that revision is compared to the working directory, and, when no revisions are specified, the working directory files are compared to its parent.\ -''') % {'path': util.uirepr(path)} - - # We must translate the docstring right away since it is - # used as a format string. The string will unfortunately - # be translated again in commands.helpcmd and this will - # fail when the docstring contains non-ASCII characters. - # Decoding the string to a Unicode string here (using the - # right encoding) prevents that. - mydiff.__doc__ = doc.decode(encoding.encoding) +''' % {'path': util.uirepr(docpath)} return mydiff command(cmd, extdiffopts[:], _('hg %s [OPTION]... [FILE]...') % cmd, inferrepo=True)(save(cmdline)) diff --git a/tests/test-extdiff.t b/tests/test-extdiff.t --- a/tests/test-extdiff.t +++ b/tests/test-extdiff.t @@ -389,3 +389,23 @@ Test symlinks handling (issue1909) $ cd .. #endif + +Test handling of non-ASCII paths in generated docstrings (issue5301) + + >>> open("u", "w").write("\xa5\xa5") + $ U=`cat u` + + $ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help -k xyzzy + abort: no matches + (try "hg help" for a list of topics) + [255] + + $ HGPLAIN=1 hg --config hgext.extdiff= --config extdiff.cmd.td=hi help td > /dev/null + + $ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help -k xyzzy + abort: no matches + (try "hg help" for a list of topics) + [255] + + $ LC_MESSAGES=ja_JP.UTF-8 hg --config hgext.extdiff= --config extdiff.cmd.td=$U help td | grep "^use" + use '\xa5\xa5' to diff repository (or selected files)