diff -r 0d5cc0c18b4e -r 034412ca28c3 mercurial/templater.py --- a/mercurial/templater.py Thu Aug 18 15:55:07 2016 +0900 +++ b/mercurial/templater.py Thu Aug 18 16:29:22 2016 +0900 @@ -289,6 +289,15 @@ thing = stringify(thing) return thing +def evalboolean(context, mapping, arg): + func, data = arg + thing = func(context, mapping, data) + if isinstance(thing, bool): + return thing + # other objects are evaluated as strings, which means 0 is True, but + # empty dict/list should be False as they are expected to be '' + return bool(stringify(thing)) + def evalinteger(context, mapping, arg, err): v = evalfuncarg(context, mapping, arg) try: @@ -560,7 +569,7 @@ # i18n: "if" is a keyword raise error.ParseError(_("if expects two or three arguments")) - test = evalstring(context, mapping, args[0]) + test = evalboolean(context, mapping, args[0]) if test: yield args[1][0](context, mapping, args[1][1]) elif len(args) == 3: