diff mercurial/formatter.py @ 36985:255f635c3204

templater: convert resources to a table of callables for future extension I'm going to add a full templating support to the annotate command. As the annotate is a filectx-oriented command, we'll need a way to look up a ctx from a bounded fctx only when necessary. This is the minimal change to support that. I'm thinking of defining a proper interface to look up template resources to fix other issues, but that isn't ready yet. (Changes from V1: just updated tests and patch descriptions.)
author Yuya Nishihara <yuya@tcha.org>
date Sun, 11 Mar 2018 21:05:29 +0900
parents 32f9b7e3f056
children 036e4483d3a1
line wrap: on
line diff
--- a/mercurial/formatter.py	Sat Mar 17 21:46:17 2018 -0400
+++ b/mercurial/formatter.py	Sun Mar 11 21:05:29 2018 +0900
@@ -501,14 +501,23 @@
 def templateresources(ui, repo=None):
     """Create a dict of template resources designed for the default templatekw
     and function"""
-    return {
+    resmap = {
         'cache': {},  # for templatekw/funcs to store reusable data
-        'ctx': None,
         'repo': repo,
-        'revcache': None,  # per-ctx cache; set later
         'ui': ui,
     }
 
+    def getsome(context, mapping, key):
+        return resmap.get(key)
+
+    return {
+        'cache': getsome,
+        'ctx': getsome,
+        'repo': getsome,
+        'revcache': getsome,  # per-ctx cache; set later
+        'ui': getsome,
+    }
+
 def formatter(ui, out, topic, opts):
     template = opts.get("template", "")
     if template == "json":