mercurial/templater.py
changeset 28349 7cb2f2438f85
parent 28348 ccedb17a5657
child 28373 9a9dd71e882c
equal deleted inserted replaced
28348:ccedb17a5657 28349:7cb2f2438f85
   303 
   303 
   304 def runmap(context, mapping, data):
   304 def runmap(context, mapping, data):
   305     func, data, ctmpl = data
   305     func, data, ctmpl = data
   306     d = func(context, mapping, data)
   306     d = func(context, mapping, data)
   307     if util.safehasattr(d, 'itermaps'):
   307     if util.safehasattr(d, 'itermaps'):
   308         d = d.itermaps()
   308         diter = d.itermaps()
   309 
   309     else:
   310     for i in d:
   310         try:
       
   311             diter = iter(d)
       
   312         except TypeError:
       
   313             if func is runsymbol:
       
   314                 raise error.ParseError(_("keyword '%s' is not iterable") % data)
       
   315             else:
       
   316                 raise error.ParseError(_("%r is not iterable") % d)
       
   317 
       
   318     for i in diter:
   311         lm = mapping.copy()
   319         lm = mapping.copy()
   312         if isinstance(i, dict):
   320         if isinstance(i, dict):
   313             lm.update(i)
   321             lm.update(i)
   314             lm['originalnode'] = mapping.get('node')
   322             lm['originalnode'] = mapping.get('node')
   315             yield runtemplate(context, lm, ctmpl)
   323             yield runtemplate(context, lm, ctmpl)