diff mercurial/templatefuncs.py @ 38279:fb874fc1d9b4

templater: abstract ifcontains() over wrapped types This allows us to make .keytype private. There's a minor BC that a hybrid dict/list of keytype=None now strictly checks the type of the needle. For example, {ifcontains(rev, files)} no longer matches a file named "1" at the rev=1. I made this change for consistency with the get(dict, key) function. We can restore the old behavior by making keytype=bytes the default if desired.
author Yuya Nishihara <yuya@tcha.org>
date Mon, 19 Mar 2018 00:23:20 +0900
parents 41ae9b3cbfb9
children 8d6109b49b31
line wrap: on
line diff
--- a/mercurial/templatefuncs.py	Wed Mar 21 12:06:18 2018 +0900
+++ b/mercurial/templatefuncs.py	Mon Mar 19 00:23:20 2018 +0900
@@ -291,13 +291,10 @@
         # i18n: "ifcontains" is a keyword
         raise error.ParseError(_("ifcontains expects three or four arguments"))
 
-    haystack = evalfuncarg(context, mapping, args[1])
-    keytype = getattr(haystack, 'keytype', None)
+    haystack = evalwrapped(context, mapping, args[1])
     try:
         needle = evalrawexp(context, mapping, args[0])
-        needle = templateutil.unwrapastype(context, mapping, needle,
-                                           keytype or bytes)
-        found = (needle in haystack)
+        found = haystack.contains(context, mapping, needle)
     except error.ParseError:
         found = False