# HG changeset patch # User Matt Harbison # Date 2019-12-29 04:35:13 # Node ID 52f0140c2604aab3ec960dd7c0c99ce550276f8e # Parent 44b03c0313aacfe7bc8de8543b88eea93976d8ae resourceutil: don't limit resources to the `mercurial` package 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. Differential Revision: https://phab.mercurial-scm.org/D7772 diff --git a/mercurial/help.py b/mercurial/help.py --- a/mercurial/help.py +++ b/mercurial/help.py @@ -313,9 +313,9 @@ def loaddoc(topic, subdir=None): """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, []): 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 @@ if mainfrozen() and getattr(sys, 'frozen 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 @@ try: 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 @@ try: 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)