[PATCH 2 of 2 STABLE] templater: fix handling of \-escapes in raw string literals

Yuya Nishihara yuya at tcha.org
Sun Jun 21 02:42:56 CDT 2015


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1434860683 -32400
#      Sun Jun 21 13:24:43 2015 +0900
# Branch stable
# Node ID 40c1ed4b163e1668c3033125119f0c9d8cbb32d5
# Parent  2676242b76c64647b68701d927ff7d4288644a61
templater: fix handling of \-escapes in raw string literals

The backslash character should start escape sequences no matter if a string is
prefixed with 'r'. They are just not interpreted as escape sequences in raw
strings. revset.tokenize() handles them correctly, but templater didn't.

https://docs.python.org/2/reference/lexical_analysis.html#string-literals

diff --git a/mercurial/templater.py b/mercurial/templater.py
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -47,7 +47,7 @@ def tokenizer(data):
             s = pos
             while pos < end: # find closing quote
                 d = program[pos]
-                if decode and d == '\\': # skip over escaped characters
+                if d == '\\': # skip over escaped characters
                     pos += 2
                     continue
                 if d == c:
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
@@ -2280,6 +2280,17 @@ Test string escaping:
   <>\n<]>
   <>\n<
 
+Test string escaping of quotes:
+
+  $ hg log -Ra -r0 -T '{"\""}\n'
+  "
+  $ hg log -Ra -r0 -T '{"\\\""}\n'
+  \"
+  $ hg log -Ra -r0 -T '{r"\""}\n'
+  \"
+  $ hg log -Ra -r0 -T '{r"\\\""}\n'
+  \\\"
+
 Test leading backslashes:
 
   $ cd latesttag


More information about the Mercurial-devel mailing list