diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -618,14 +618,13 @@ def _flatten(thing): yield j def parsestring(s, quoted=True): - '''parse a string using simple c-like syntax. - string must be in quotes if quoted is True.''' + '''unwrap quotes if quoted is True''' if quoted: if len(s) < 2 or s[0] != s[-1]: raise SyntaxError(_('unmatched quotes')) - return s[1:-1].decode('string_escape') + return s[1:-1] - return s.decode('string_escape') + return s class engine(object): '''template expansion engine. diff --git a/tests/test-command-template.t b/tests/test-command-template.t --- a/tests/test-command-template.t +++ b/tests/test-command-template.t @@ -2250,6 +2250,29 @@ Test string escaping: <>\n<]> <>\n< + $ hg log -R latesttag -r 0 \ + > --config ui.logtemplate='>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n' + > + <>\n<[> + <>\n<]> + <>\n< + + $ hg log -R latesttag -r 0 -T esc \ + > --config templates.esc='>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n' + > + <>\n<[> + <>\n<]> + <>\n< + + $ cat <<'EOF' > esctmpl + > changeset = '>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n' + > EOF + $ hg log -R latesttag -r 0 --style ./esctmpl + > + <>\n<[> + <>\n<]> + <>\n< + "string-escape"-ed "\x5c\x786e" becomes r"\x6e" (once) or r"n" (twice) $ hg log -R a -r 0 --template '{if("1", "\x5c\x786e", "NG")}\n'