diff -r 186f54d40fdd -r 0361163efbaf mercurial/templater.py --- a/mercurial/templater.py Fri Sep 06 13:30:56 2013 +0400 +++ b/mercurial/templater.py Sun Sep 22 13:52:18 2013 +0400 @@ -139,7 +139,12 @@ def runsymbol(context, mapping, key): v = mapping.get(key) if v is None: - v = context._defaults.get(key, '') + v = context._defaults.get(key) + if v is None: + try: + v = context.process(key, mapping) + except TemplateNotFound: + v = '' if util.safehasattr(v, '__call__'): return v(**mapping) if isinstance(v, types.GeneratorType): @@ -449,6 +454,9 @@ stylelist.append(split[1]) return ", ".join(sorted(stylelist)) +class TemplateNotFound(util.Abort): + pass + class templater(object): def __init__(self, mapfile, filters={}, defaults={}, cache={}, @@ -500,7 +508,8 @@ try: self.cache[t] = util.readfile(self.map[t][1]) except KeyError, inst: - raise util.Abort(_('"%s" not in template map') % inst.args[0]) + raise TemplateNotFound(_('"%s" not in template map') % + inst.args[0]) except IOError, inst: raise IOError(inst.args[0], _('template file %s: %s') % (self.map[t][1], inst.args[1]))