diff mercurial/utils/resourceutil.py @ 43871:1390bb81163e

help: get helptext/ data from `resources` module if available For PyOxidizer, we need to read configs using the `resources` module. This patch makes it so we use that module if available (i.e. Python >= 3.7). It does that by adding a new `open_resource()` function to our `resourceutil` module. Tested by running `$PYTHON ./hg help pager` for each $PYTHON in {python2, python3.6, python3.7}. Differential Revision: https://phab.mercurial-scm.org/D7622
author Martin von Zweigbergk <martinvonz@google.com>
date Thu, 12 Dec 2019 12:57:13 -0800
parents 5606e1cb4685
children 4d59cc8bda65
line wrap: on
line diff
--- a/mercurial/utils/resourceutil.py	Thu Dec 12 10:26:09 2019 -0800
+++ b/mercurial/utils/resourceutil.py	Thu Dec 12 12:57:13 2019 -0800
@@ -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')