mercurial/templater.py
changeset 27891 ac8c0ee5c3b8
parent 27637 b502138f5faa
child 27892 83aef8d5bc1b
--- a/mercurial/templater.py	Fri Jan 15 13:46:33 2016 -0800
+++ b/mercurial/templater.py	Sat Jan 16 13:42:37 2016 +0900
@@ -281,8 +281,8 @@
 def runmap(context, mapping, data):
     func, data, ctmpl = data
     d = func(context, mapping, data)
-    if callable(d):
-        d = d()
+    if util.safehasattr(d, 'itermaps'):
+        d = d.itermaps()
 
     lm = mapping.copy()
 
@@ -483,9 +483,9 @@
         raise error.ParseError(_("join expects one or two arguments"))
 
     joinset = args[0][0](context, mapping, args[0][1])
-    if callable(joinset):
+    if util.safehasattr(joinset, 'itermaps'):
         jf = joinset.joinfmt
-        joinset = [jf(x) for x in joinset()]
+        joinset = [jf(x) for x in joinset.itermaps()]
 
     joiner = " "
     if len(args) > 1: