mercurial/templateutil.py
changeset 38236 61cecab0cc20
parent 37502 40c7347f6848
child 38237 d48b80d58848
equal deleted inserted replaced
38235:b865bba56db1 38236:61cecab0cc20
   459 
   459 
   460 # TODO: unify this with unwrapvalue() once the bug of templatefunc.join()
   460 # TODO: unify this with unwrapvalue() once the bug of templatefunc.join()
   461 # is fixed. we can't do that right now because join() has to take a generator
   461 # is fixed. we can't do that right now because join() has to take a generator
   462 # of byte strings as it is, not a lazy byte string.
   462 # of byte strings as it is, not a lazy byte string.
   463 def _unwrapvalue(context, mapping, thing):
   463 def _unwrapvalue(context, mapping, thing):
   464     thing = unwrapvalue(context, mapping, thing)
   464     if isinstance(thing, wrapped):
       
   465         return thing.tovalue(context, mapping)
   465     # evalrawexp() may return string, generator of strings or arbitrary object
   466     # evalrawexp() may return string, generator of strings or arbitrary object
   466     # such as date tuple, but filter does not want generator.
   467     # such as date tuple, but filter does not want generator.
   467     return _unthunk(context, mapping, thing)
   468     return _unthunk(context, mapping, thing)
   468 
   469 
   469 def evalboolean(context, mapping, arg):
   470 def evalboolean(context, mapping, arg):
   474         if thing is None:
   475         if thing is None:
   475             # not a template keyword, takes as a boolean literal
   476             # not a template keyword, takes as a boolean literal
   476             thing = stringutil.parsebool(data)
   477             thing = stringutil.parsebool(data)
   477     else:
   478     else:
   478         thing = func(context, mapping, data)
   479         thing = func(context, mapping, data)
   479     thing = unwrapvalue(context, mapping, thing)
   480     if isinstance(thing, wrapped):
       
   481         thing = thing.tovalue(context, mapping)
   480     if isinstance(thing, bool):
   482     if isinstance(thing, bool):
   481         return thing
   483         return thing
   482     # other objects are evaluated as strings, which means 0 is True, but
   484     # other objects are evaluated as strings, which means 0 is True, but
   483     # empty dict/list should be False as they are expected to be ''
   485     # empty dict/list should be False as they are expected to be ''
   484     return bool(stringify(context, mapping, thing))
   486     return bool(stringify(context, mapping, thing))