[Request] [+- ] D8891: templater: start passing resource to read from into _readmapfile()
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Wed Aug 5 16:26:38 UTC 2020
martinvonz created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
This patch makes it so we pass in a file-like resource to read from
instead of having `_readmapfile()` open the file. This is one more
step towards making `_readmapfile()` able to read resources opened by
from `importlib.resources`. We still need to pass in the mapfile path
because it's used for loading dependent mapfiles from `%include` and
`__base__`, and it's also used for giving the user better error
messages. Besides that, one can safely call `_readmapfile()` with any
file-like resource after this patch.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D8891
AFFECTED FILES
mercurial/templater.py
CHANGE DETAILS
diff --git a/mercurial/templater.py b/mercurial/templater.py
--- a/mercurial/templater.py
+++ b/mercurial/templater.py
@@ -814,14 +814,17 @@
return b", ".join(sorted(stylelist))
-def _readmapfile(mapfile):
+def _open_mapfile(mapfile):
+ if os.path.exists(mapfile):
+ return util.posixfile(mapfile, b'rb')
+ raise error.Abort(
+ _(b"style '%s' not found") % mapfile,
+ hint=_(b"available styles: %s") % stylelist(),
+ )
+
+
+def _readmapfile(fp, mapfile):
"""Load template elements from the given map file"""
- if not os.path.exists(mapfile):
- raise error.Abort(
- _(b"style '%s' not found") % mapfile,
- hint=_(b"available styles: %s") % stylelist(),
- )
-
base = os.path.dirname(mapfile)
conf = config.config()
@@ -838,7 +841,7 @@
)
break
- data = util.posixfile(mapfile, b'rb').read()
+ data = fp.read()
conf.parse(mapfile, data, remap={b'': b'templates'}, include=include)
cache = {}
@@ -862,7 +865,8 @@
if os.path.isfile(p3):
path = p3
- cache, tmap, aliases = _readmapfile(path)
+ fp = _open_mapfile(path)
+ cache, tmap, aliases = _readmapfile(fp, path)
for key, val in conf[b'templates'].items():
if not val:
@@ -999,7 +1003,8 @@
):
"""Create templater from the specified map file"""
t = cls(filters, defaults, resources, cache, [], minchunk, maxchunk)
- cache, tmap, aliases = _readmapfile(mapfile)
+ fp = _open_mapfile(mapfile)
+ cache, tmap, aliases = _readmapfile(fp, mapfile)
t._loader.cache.update(cache)
t._loader._map = tmap
t._loader._aliasmap = _aliasrules.buildmap(aliases)
To: martinvonz, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20200805/03c04028/attachment.html>
More information about the Mercurial-patches
mailing list