# HG changeset patch # User Yuya Nishihara # Date 1521554256 -32400 # Node ID 920589f52be948aa7a667defb1e1a7b8cfa23a76 # Parent e70a90a72b8065557b8e3c433ca99f107ad26fc4 templater: attach hint to input-type error of runfilter() Tests will be added by the next patch. diff -r e70a90a72b80 -r 920589f52be9 mercurial/templateutil.py --- a/mercurial/templateutil.py Sun Mar 18 15:58:22 2018 +0900 +++ b/mercurial/templateutil.py Tue Mar 20 22:57:36 2018 +0900 @@ -423,14 +423,17 @@ 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