[PATCH V3] templater: support using templates with non-standard names from map file

Kevin Bullock kbullock+mercurial at ringworld.org
Sat Sep 21 22:58:35 CDT 2013


On 20 Sep 2013, at 10:35 AM, Alexander Plavin wrote:

> # HG changeset patch
> # User Alexander Plavin <alexander at plav.in>
> # Date 1374620882 -14400
> #      Wed Jul 24 03:08:02 2013 +0400
> # Node ID 5f0ec498a035f5a9c1202e6095dea1f47101580a
> # Parent  4074e05bd30287df5d39d0b36a3bb42dbb8701ad
> templater: support using templates with non-standard names from map file
> 
> Allow to add arbitrarily-named entries to a template map file and then reference
> them, to make it possible to deduplicate and simplify templates code.
> 
> diff -r 4074e05bd302 -r 5f0ec498a035 mercurial/templater.py
> --- a/mercurial/templater.py	Sun Sep 01 10:40:11 2013 +0400
> +++ b/mercurial/templater.py	Wed Jul 24 03:08:02 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):
> @@ -461,6 +466,9 @@
>             stylelist.append(split[1])
>     return ", ".join(sorted(stylelist))
> 
> +class TemplateNotFound(util.Abort):
> +    pass
> +
> class templater(object):
> 
>     def __init__(self, mapfile, filters={}, defaults={}, cache={},
> @@ -512,7 +520,7 @@
>             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]))
> diff -r 4074e05bd302 -r 5f0ec498a035 tests/test-command-template.t
> --- a/tests/test-command-template.t	Sun Sep 01 10:40:11 2013 +0400
> +++ b/tests/test-command-template.t	Wed Jul 24 03:08:02 2013 +0400
> @@ -500,6 +500,23 @@
>   1
>   0
> 
> +Defining non-standard name works:

Is there existing test coverage for when the key _isn't_ found? Specifically, when the code path through runsymbol catches the exception?

pacem in terris / мир / शान्ति / ‎‫سَلاَم‬ / 平和
Kevin R. Bullock



More information about the Mercurial-devel mailing list