D7622: help: get helptext/ data from `resources` module if available
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Fri Dec 13 03:01:37 EST 2019
martinvonz updated this revision to Diff 18684.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D7622?vs=18652&id=18684
BRANCH
default
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D7622/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D7622
AFFECTED FILES
mercurial/defaultrc/__init__.py
mercurial/help.py
mercurial/utils/resourceutil.py
CHANGE DETAILS
diff --git a/mercurial/utils/resourceutil.py b/mercurial/utils/resourceutil.py
--- a/mercurial/utils/resourceutil.py
+++ b/mercurial/utils/resourceutil.py
@@ -35,3 +35,25 @@
datapath = os.path.dirname(pycompat.sysexecutable)
else:
datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__)))
+
+try:
+ import importlib
+
+ # Force loading of the resources module
+ importlib.resources.open_binary
+
+ def open_resource(package, name):
+ package = b'mercurial.' + package
+ return importlib.resources.open_binary(
+ pycompat.sysstr(package), pycompat.sysstr(name)
+ )
+
+
+except AttributeError:
+
+ def _package_path(package):
+ return os.path.join(datapath, *package.split(b'.'))
+
+ def open_resource(package, name):
+ path = os.path.join(_package_path(package), name)
+ return open(path, 'rb')
diff --git a/mercurial/help.py b/mercurial/help.py
--- a/mercurial/help.py
+++ b/mercurial/help.py
@@ -8,7 +8,6 @@
from __future__ import absolute_import
import itertools
-import os
import re
import textwrap
@@ -314,11 +313,11 @@
"""Return a delayed loader for help/topic.txt."""
def loader(ui):
- docdir = os.path.join(resourceutil.datapath, b'helptext')
+ package = b'helptext'
if subdir:
- docdir = os.path.join(docdir, subdir)
- path = os.path.join(docdir, topic + b".txt")
- doc = gettext(util.readfile(path))
+ package = b'helptext' + b'.' + subdir
+ with resourceutil.open_resource(package, topic + b'.txt') as fp:
+ doc = gettext(fp.read())
for rewriter in helphooks.get(topic, []):
doc = rewriter(ui, topic, doc)
return doc
diff --git a/mercurial/defaultrc/__init__.py b/mercurial/defaultrc/__init__.py
new file mode 100644
To: martinvonz, #hg-reviewers, indygreg
Cc: mharbison72, mercurial-devel
More information about the Mercurial-devel
mailing list