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

login
register
mail settings
Submitter phabricator
Date Dec. 15, 2019, 3:11 a.m.
Message ID <89135b729e3be0c8d6b7875f9dd2f748@localhost.localdomain>
Download mbox | patch
Permalink /patch/43842/
State Not Applicable
Headers show

Comments

phabricator - Dec. 15, 2019, 3:11 a.m.
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/defaultrc/__init__.py b/mercurial/defaultrc/__init__.py
new file mode 100644



To: martinvonz, #hg-reviewers, indygreg
Cc: mharbison72, mercurial-devel

Patch

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