diff --git a/hgext/extdiff.py b/hgext/extdiff.py --- a/hgext/extdiff.py +++ b/hgext/extdiff.py @@ -43,7 +43,7 @@ fast (at least faster than having to com from mercurial.i18n import _ from mercurial.node import short, nullid -from mercurial import cmdutil, util, commands +from mercurial import cmdutil, util, commands, encoding import os, shlex, shutil, tempfile, re def snapshot(ui, repo, files, node, tmproot): @@ -254,7 +254,7 @@ def uisetup(ui): '''use closure to save diff command to use''' def mydiff(ui, repo, *pats, **opts): return dodiff(ui, repo, path, diffopts, pats, opts) - mydiff.__doc__ = _('''\ + doc = _('''\ use %(path)s to diff repository (or selected files) Show differences between revisions for the specified files, using the @@ -265,6 +265,14 @@ use %(path)s to diff repository (or sele compared to the working directory, and, when no revisions are specified, the working directory files are compared to its parent.\ ''') % dict(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) return mydiff cmdtable[cmd] = (save(cmd, path, diffopts), cmdtable['extdiff'][1][1:], diff --git a/hgext/keyword.py b/hgext/keyword.py --- a/hgext/keyword.py +++ b/hgext/keyword.py @@ -111,7 +111,8 @@ class kwtemplater(object): 'Revision': '{node|short}', 'Author': '{author|user}', 'Date': '{date|utcdate}', - 'RCSFile': '{file|basename},v', + 'RCSfile': '{file|basename},v', + 'RCSFile': '{file|basename},v', # kept only for backwards compatibility 'Source': '{root}/{file},v', 'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}', 'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}', @@ -288,7 +289,7 @@ def demo(ui, repo, *args, **opts): ''' def demoitems(section, items): ui.write('[%s]\n' % section) - for k, v in items: + for k, v in sorted(items): ui.write('%s = %s\n' % (k, v)) msg = 'hg keyword config and expansion example' @@ -336,7 +337,7 @@ def demo(ui, repo, *args, **opts): ui.write('[extensions]\n%s\n' % extension) demoitems('keyword', ui.configitems('keyword')) demoitems('keywordmaps', kwmaps.iteritems()) - keywords = '$' + '$\n$'.join(kwmaps.keys()) + '$\n' + keywords = '$' + '$\n$'.join(sorted(kwmaps.keys())) + '$\n' repo.wopener(fn, 'w').write(keywords) repo.add([fn]) path = repo.wjoin(fn) diff --git a/tests/test-keyword.out b/tests/test-keyword.out --- a/tests/test-keyword.out +++ b/tests/test-keyword.out @@ -4,20 +4,22 @@ hgext.keyword = [keyword] demo.txt = [keywordmaps] -RCSFile = {file|basename},v Author = {author|user} +Date = {date|utcdate} Header = {root}/{file},v {node|short} {date|utcdate} {author|user} -Source = {root}/{file},v -Date = {date|utcdate} Id = {file|basename},v {node|short} {date|utcdate} {author|user} +RCSFile = {file|basename},v +RCSfile = {file|basename},v Revision = {node|short} -$RCSFile: demo.txt,v $ +Source = {root}/{file},v $Author: test $ +$Date: 2000/00/00 00:00:00 $ $Header: /TMP/demo.txt,v xxxxxxxxxxxx 2000/00/00 00:00:00 test $ +$Id: demo.txt,v xxxxxxxxxxxx 2000/00/00 00:00:00 test $ +$RCSFile: demo.txt,v $ +$RCSfile: demo.txt,v $ +$Revision: xxxxxxxxxxxx $ $Source: /TMP/demo.txt,v $ -$Date: 2000/00/00 00:00:00 $ -$Id: demo.txt,v xxxxxxxxxxxx 2000/00/00 00:00:00 test $ -$Revision: xxxxxxxxxxxx $ [extensions] hgext.keyword = [keyword]