--- a/tests/test-command-template.t Tue Jun 30 22:39:28 2015 -0700
+++ b/tests/test-command-template.t Wed Jul 01 16:33:31 2015 -0500
@@ -2860,6 +2860,16 @@
$ hg log -Ra -r0 -T '{r"\\\""}\n'
\\\"
+
+ $ 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 exception in quoted template. single backslash before quotation mark is
stripped before parsing:
@@ -2877,6 +2887,47 @@
valid
$ hg log -r 2 -T esc --config templates.esc="'"'{\'"'"'valid\'"'"'}\n'"'"
valid
+
+Test compatibility with 2.9.2-3.4 of escaped quoted strings in nested
+_evalifliteral() templates (issue4733):
+
+ $ hg log -r 2 -T '{if(rev, "\"{rev}")}\n'
+ "2
+ $ hg log -r 2 -T '{if(rev, "{if(rev, \"\\\"{rev}\")}")}\n'
+ "2
+ $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, \\\"\\\\\\\"{rev}\\\")}\")}")}\n'
+ "2
+
+ $ hg log -r 2 -T '{if(rev, "\\\"")}\n'
+ \"
+ $ hg log -r 2 -T '{if(rev, "{if(rev, \"\\\\\\\"\")}")}\n'
+ \"
+ $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, \\\"\\\\\\\\\\\\\\\"\\\")}\")}")}\n'
+ \"
+
+ $ hg log -r 2 -T '{if(rev, r"\\\"")}\n'
+ \\\"
+ $ hg log -r 2 -T '{if(rev, "{if(rev, r\"\\\\\\\"\")}")}\n'
+ \\\"
+ $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, r\\\"\\\\\\\\\\\\\\\"\\\")}\")}")}\n'
+ \\\"
+
+escaped single quotes and errors:
+
+ $ hg log -r 2 -T "{if(rev, '{if(rev, \'foo\')}')}"'\n'
+ foo
+ $ hg log -r 2 -T "{if(rev, '{if(rev, r\'foo\')}')}"'\n'
+ foo
+ $ hg log -r 2 -T '{if(rev, "{if(rev, \")}")}\n'
+ hg: parse error at 11: unterminated string
+ [255]
+ $ hg log -r 2 -T '{if(rev, \"\\"")}\n'
+ hg: parse error at 11: syntax error
+ [255]
+ $ hg log -r 2 -T '{if(rev, r\"\\"")}\n'
+ hg: parse error at 12: syntax error
+ [255]
+
$ cd ..
Test leading backslashes: