Patchwork D8791: templater: switch to lower-level config.parse() in _readmapfile()

login
register
mail settings
Submitter phabricator
Date July 22, 2020, 5:40 p.m.
Message ID <differential-rev-PHID-DREV-fvl5nguxhbixoy5wa5ju-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/46836/
State Superseded
Headers show

Comments

phabricator - July 22, 2020, 5:40 p.m.
martinvonz created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  I hope to modify this code to also work with resources loaded from
  memory (for PyOxidizer support). For that, we'll need to handle the
  lookup of relative `%include` path (not joined with the base directory
  of the containing file). This patch prepares for that by using
  `config.parse()` instead of `config.read()`, since the latter expects
  a file in the file system.
  
  As it happens, this change also lets us clean up the `config` class to
  not need the `_includepaths` field. That will happen next.

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

AFFECTED FILES
  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
@@ -824,7 +824,13 @@ 
 
     base = os.path.dirname(mapfile)
     conf = config.config(includepaths=[templatedir()])
-    conf.read(mapfile, remap={b'': b'templates'})
+
+    def include(rel, abs, remap, sections):
+        data = util.posixfile(abs, b'rb').read()
+        conf.parse(abs, data, sections=sections, remap=remap, include=include)
+
+    data = util.posixfile(mapfile, b'rb').read()
+    conf.parse(mapfile, data, remap={b'': b'templates'}, include=include)
 
     cache = {}
     tmap = {}