Patchwork D8893: templater: pass opened file-like object to templatespec

login
register
mail settings
Submitter phabricator
Date Aug. 5, 2020, 4:26 p.m.
Message ID <differential-rev-PHID-DREV-dt3262nuwww7jcmihrix-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/46992/
State Superseded
Headers show

Comments

phabricator - Aug. 5, 2020, 4:26 p.m.
martinvonz created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  I think I said earlier that I planned to create a special templatespec
  variant for built-in templates. That was true (I planned that), but I
  ended up (in this patch) just adding a file-like object to the
  `mapfile_templatespec()` variant instead.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D8893

AFFECTED FILES
  mercurial/formatter.py
  mercurial/logcmdutil.py
  mercurial/templater.py

CHANGE DETAILS




To: martinvonz, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/templater.py b/mercurial/templater.py
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -994,6 +994,7 @@ 
     def frommapfile(
         cls,
         mapfile,
+        fp=None,
         filters=None,
         defaults=None,
         resources=None,
@@ -1003,7 +1004,8 @@ 
     ):
         """Create templater from the specified map file"""
         t = cls(filters, defaults, resources, cache, [], minchunk, maxchunk)
-        fp = _open_mapfile(mapfile)
+        if not fp:
+            fp = _open_mapfile(mapfile)
         cache, tmap, aliases = _readmapfile(fp, mapfile)
         t._loader.cache.update(cache)
         t._loader._map = tmap
diff --git a/mercurial/logcmdutil.py b/mercurial/logcmdutil.py
--- a/mercurial/logcmdutil.py
+++ b/mercurial/logcmdutil.py
@@ -626,13 +626,14 @@ 
 
     if not tmpl and style:
         mapfile = style
+        fp = None
         if not os.path.split(mapfile)[0]:
             (mapname, fp) = templater.open_template(
                 b'map-cmdline.' + mapfile
             ) or templater.open_template(mapfile)
             if mapname:
                 mapfile = mapname
-        return formatter.mapfile_templatespec(b'changeset', mapfile)
+        return formatter.mapfile_templatespec(b'changeset', mapfile, fp)
 
     return formatter.lookuptemplate(ui, b'changeset', tmpl)
 
diff --git a/mercurial/formatter.py b/mercurial/formatter.py
--- a/mercurial/formatter.py
+++ b/mercurial/formatter.py
@@ -540,6 +540,7 @@ 
     tmpl = attr.ib()
     mapfile = attr.ib()
     refargs = attr.ib(default=None)
+    fp = attr.ib(default=None)
 
 
 def empty_templatespec():
@@ -556,8 +557,8 @@ 
     return templatespec(b'', tmpl, None)
 
 
-def mapfile_templatespec(topic, mapfile):
-    return templatespec(topic, None, mapfile)
+def mapfile_templatespec(topic, mapfile, fp=None):
+    return templatespec(topic, None, mapfile, fp=fp)
 
 
 def lookuptemplate(ui, topic, tmpl):
@@ -603,7 +604,7 @@ 
             b'map-cmdline.' + tmpl
         ) or templater.open_template(tmpl)
         if mapname:
-            return mapfile_templatespec(topic, mapname)
+            return mapfile_templatespec(topic, mapname, fp)
 
     # perhaps it's a reference to [templates]
     if ui.config(b'templates', tmpl):
@@ -645,7 +646,11 @@ 
     assert not (spec.tmpl and spec.mapfile)
     if spec.mapfile:
         return templater.templater.frommapfile(
-            spec.mapfile, defaults=defaults, resources=resources, cache=cache
+            spec.mapfile,
+            spec.fp,
+            defaults=defaults,
+            resources=resources,
+            cache=cache,
         )
     return maketemplater(
         ui, spec.tmpl, defaults=defaults, resources=resources, cache=cache