templater: relax unquotestring() to fall back to bare string
authorYuya Nishihara <yuya@tcha.org>
Sat, 26 Mar 2016 18:12:12 +0900
changeset 28630 bf35644b9f3a
parent 28629 d6f8a1535224
child 28631 c2e4e59aaea6
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.
mercurial/cmdutil.py
mercurial/formatter.py
mercurial/templater.py
--- 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]: