[PATCH 06 of 11] templater: attach hint to input-type error of runfilter()

Yuya Nishihara yuya at tcha.org
Fri Mar 30 21:49:34 EDT 2018


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1521554256 -32400
#      Tue Mar 20 22:57:36 2018 +0900
# Node ID 044cf5cbae04306dc21919b1dbb461a1f01b3a2e
# Parent  5195b8b4c84633ed4529a0c5430c3b04e88f6898
templater: attach hint to input-type error of runfilter()

Tests will be added by the next patch.

diff --git a/mercurial/templateutil.py b/mercurial/templateutil.py
--- a/mercurial/templateutil.py
+++ b/mercurial/templateutil.py
@@ -423,14 +423,17 @@ def runfilter(context, mapping, data):
         thing = unwrapastype(thing, getattr(filt, '_intype', None))
         return filt(thing)
     except (ValueError, AttributeError, TypeError):
-        sym = findsymbolicname(arg)
-        if sym:
-            msg = (_("template filter '%s' is not compatible with keyword '%s'")
-                   % (pycompat.sysbytes(filt.__name__), sym))
-        else:
-            msg = (_("incompatible use of template filter '%s'")
-                   % pycompat.sysbytes(filt.__name__))
-        raise error.Abort(msg)
+        raise error.Abort(_formatfiltererror(arg, filt))
+    except error.ParseError as e:
+        raise error.ParseError(bytes(e), hint=_formatfiltererror(arg, filt))
+
+def _formatfiltererror(arg, filt):
+    fn = pycompat.sysbytes(filt.__name__)
+    sym = findsymbolicname(arg)
+    if not sym:
+        return _("incompatible use of template filter '%s'") % fn
+    return (_("template filter '%s' is not compatible with keyword '%s'")
+            % (fn, sym))
 
 def runmap(context, mapping, data):
     darg, targ = data


More information about the Mercurial-devel mailing list