D7772: resourceutil: don't limit resources to the `mercurial` package

mharbison72 (Matt Harbison) phabricator at mercurial-scm.org
Mon Dec 30 05:43:14 UTC 2019


mharbison72 created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This should make things a little clearer, in that it now requires the full
  package name to access a resource.  But the real motivation is that
  `extensions._disabledpaths()` walks the `hgext` directory looking for bundled
  extensions.  This in turn feeds, among other things:
  
  1. Listing disabled extensions in `hg help extensions`
  2. Indicating that an unknown command is in a non-enabled extension
  3. Displaying help for non-enabled extensions
  4. Generating documentation
  5. Announcing LFS is auto-enabled (or not) when cloning from an LFS source
  
  The filesystem based ResourceReader will happily return *.py and *.pyc, but the
  one supplied by PyOxidizer doesn't.  Presumably we can change that.  The only
  other idea I had here is for setup.py to generate a text file containing the
  list of extensions, but that doesn't seem great when running from source.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D7772

AFFECTED FILES
  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,6 +35,7 @@
     datapath = os.path.dirname(pycompat.sysexecutable)
 else:
     datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__)))
+    _rootpath = os.path.dirname(datapath)
 
 try:
     from importlib import resources
@@ -43,7 +44,6 @@
     resources.open_binary  # pytype: disable=module-attr
 
     def open_resource(package, name):
-        package = b'mercurial.' + package
         return resources.open_binary(  # pytype: disable=module-attr
             pycompat.sysstr(package), pycompat.sysstr(name)
         )
@@ -52,7 +52,7 @@
 except (ImportError, AttributeError):
 
     def _package_path(package):
-        return os.path.join(datapath, *package.split(b'.'))
+        return os.path.join(_rootpath, *package.split(b'.'))
 
     def open_resource(package, name):
         path = os.path.join(_package_path(package), name)
diff --git a/mercurial/help.py b/mercurial/help.py
--- a/mercurial/help.py
+++ b/mercurial/help.py
@@ -313,9 +313,9 @@
     """Return a delayed loader for help/topic.txt."""
 
     def loader(ui):
-        package = b'helptext'
+        package = b'mercurial.helptext'
         if subdir:
-            package = b'helptext' + b'.' + subdir
+            package += b'.' + subdir
         with resourceutil.open_resource(package, topic + b'.txt') as fp:
             doc = gettext(fp.read())
         for rewriter in helphooks.get(topic, []):



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


More information about the Mercurial-devel mailing list