D7622: help: get helptext/ data from `resources` module if available

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Sat Dec 14 22:11:19 EST 2019


Closed by commit rHG1390bb81163e: help: get helptext/ data from `resources` module if available (authored by martinvonz).
martinvonz marked an inline comment as done.
This revision was automatically updated to reflect the committed changes.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D7622?vs=18684&id=18731

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