# HG changeset patch # User Yuya Nishihara # Date 1451215297 -32400 # Node ID 7279e01323470eed3aacc991b7cd1c6cf7023907 # Parent b57d45ec33b268b6c03d79c730720f64693e5abd templatekw: workaround for utf-8 round-trip of {desc} Though our encoding strategy is best effort, {desc} is a primitive keyword that should be worth enough to try hard to preserve UTF-8 bytes. diff -r b57d45ec33b2 -r 7279e0132347 mercurial/templatekw.py --- a/mercurial/templatekw.py Thu Feb 25 10:34:31 2016 +0100 +++ b/mercurial/templatekw.py Sun Dec 27 20:21:37 2015 +0900 @@ -9,6 +9,7 @@ from .node import hex, nullid from . import ( + encoding, error, hbisect, patch, @@ -257,7 +258,12 @@ def showdescription(repo, ctx, templ, **args): """:desc: String. The text of the changeset description.""" - return ctx.description().strip() + s = ctx.description() + if isinstance(s, encoding.localstr): + # try hard to preserve utf-8 bytes + return encoding.tolocal(encoding.fromlocal(s).strip()) + else: + return s.strip() def showdiffstat(repo, ctx, templ, **args): """:diffstat: String. Statistics of changes with the following format: diff -r b57d45ec33b2 -r 7279e0132347 tests/test-command-template.t --- a/tests/test-command-template.t Thu Feb 25 10:34:31 2016 +0100 +++ b/tests/test-command-template.t Sun Dec 27 20:21:37 2015 +0900 @@ -3556,12 +3556,14 @@ > open('utf-8', 'w').write('\xc3\xa9') > EOF $ HGENCODING=utf-8 hg branch -q `cat utf-8` - $ HGENCODING=utf-8 hg ci -qAm 'non-ascii branch' utf-8 + $ HGENCODING=utf-8 hg ci -qAm "non-ascii branch: `cat utf-8`" utf-8 json filter should try round-trip conversion to utf-8: $ HGENCODING=ascii hg log -T "{branch|json}\n" -r0 "\u00e9" + $ HGENCODING=ascii hg log -T "{desc|json}\n" -r0 + "non-ascii branch: \u00e9" json filter takes input as utf-8b: