diff mercurial/templater.py @ 24240:bd504d90588d

templater: implement _hybrid.__contains__ so that ifcontains can accept dict d8fb835376d1 is fine for "{revset()}", but "i.values()[0]" does not work if each item has more than one values such as "{bookmarks}". This fixes the problem by using list.__contains__ or dict.__contains__ appropriately.
author Yuya Nishihara <yuya@tcha.org>
date Wed, 18 Feb 2015 23:01:33 +0900
parents fafd9a1284cf
children 6c55e37ba5f2
line wrap: on
line diff
--- a/mercurial/templater.py	Sun Mar 08 14:46:42 2015 +0900
+++ b/mercurial/templater.py	Wed Feb 18 23:01:33 2015 +0900
@@ -330,10 +330,7 @@
     item = stringify(args[0][0](context, mapping, args[0][1]))
     items = args[1][0](context, mapping, args[1][1])
 
-    # Iterating over items gives a formatted string, so we iterate
-    # directly over the raw values.
-    if ((callable(items) and item in [i.values()[0] for i in items()]) or
-        (isinstance(items, str) and item in items)):
+    if item in items:
         yield _evalifliteral(args[2], context, mapping)
     elif len(args) == 4:
         yield _evalifliteral(args[3], context, mapping)