templater: relax unquotestring() to fall back to bare string
This is convenient for our use case where quotes are optional except in
a map file.
--- a/mercurial/cmdutil.py Sat Mar 26 19:01:12 2016 +0900
+++ b/mercurial/cmdutil.py Sat Mar 26 18:12:12 2016 +0900
@@ -1542,11 +1542,7 @@
if not tmpl and not style: # template are stronger than style
tmpl = ui.config('ui', 'logtemplate')
if tmpl:
- try:
- tmpl = templater.unquotestring(tmpl)
- except SyntaxError:
- pass
- return tmpl, None
+ return templater.unquotestring(tmpl), None
else:
style = util.expandpath(ui.config('ui', 'style', ''))
--- a/mercurial/formatter.py Sat Mar 26 19:01:12 2016 +0900
+++ b/mercurial/formatter.py Sat Mar 26 18:12:12 2016 +0900
@@ -171,11 +171,7 @@
# perhaps it's a reference to [templates]
t = ui.config('templates', tmpl)
if t:
- try:
- tmpl = templater.unquotestring(t)
- except SyntaxError:
- tmpl = t
- return tmpl, None
+ return templater.unquotestring(t), None
if tmpl == 'list':
ui.write(_("available styles: %s\n") % templater.stylelist())
--- a/mercurial/templater.py Sat Mar 26 19:01:12 2016 +0900
+++ b/mercurial/templater.py Sat Mar 26 18:12:12 2016 +0900
@@ -867,9 +867,9 @@
yield j
def unquotestring(s):
- '''unwrap quotes'''
+ '''unwrap quotes if any; otherwise returns unmodified string'''
if len(s) < 2 or s[0] != s[-1]:
- raise SyntaxError(_('unmatched quotes'))
+ return s
return s[1:-1]
class engine(object):
@@ -980,10 +980,10 @@
if not val:
raise error.ParseError(_('missing value'), conf.source('', key))
if val[0] in "'\"":
- try:
- self.cache[key] = unquotestring(val)
- except SyntaxError as inst:
- raise error.ParseError(inst.args[0], conf.source('', key))
+ if val[0] != val[-1]:
+ raise error.ParseError(_('unmatched quotes'),
+ conf.source('', key))
+ self.cache[key] = unquotestring(val)
else:
val = 'default', val
if ':' in val[1]: