Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/utils/resourceutil.py @ 44029:52f0140c2604
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
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 28 Dec 2019 23:35:13 -0500 |
parents | 75ec46c63657 |
children | 42a897bf678c |
comparison
equal
deleted
inserted
replaced
44028:44b03c0313aa | 44029:52f0140c2604 |
---|---|
33 if mainfrozen() and getattr(sys, 'frozen', None) != 'macosx_app': | 33 if mainfrozen() and getattr(sys, 'frozen', None) != 'macosx_app': |
34 # executable version (py2exe) doesn't support __file__ | 34 # executable version (py2exe) doesn't support __file__ |
35 datapath = os.path.dirname(pycompat.sysexecutable) | 35 datapath = os.path.dirname(pycompat.sysexecutable) |
36 else: | 36 else: |
37 datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__))) | 37 datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__))) |
38 _rootpath = os.path.dirname(datapath) | |
38 | 39 |
39 try: | 40 try: |
40 from importlib import resources | 41 from importlib import resources |
41 | 42 |
42 # Force loading of the resources module | 43 # Force loading of the resources module |
43 resources.open_binary # pytype: disable=module-attr | 44 resources.open_binary # pytype: disable=module-attr |
44 | 45 |
45 def open_resource(package, name): | 46 def open_resource(package, name): |
46 package = b'mercurial.' + package | |
47 return resources.open_binary( # pytype: disable=module-attr | 47 return resources.open_binary( # pytype: disable=module-attr |
48 pycompat.sysstr(package), pycompat.sysstr(name) | 48 pycompat.sysstr(package), pycompat.sysstr(name) |
49 ) | 49 ) |
50 | 50 |
51 | 51 |
52 except (ImportError, AttributeError): | 52 except (ImportError, AttributeError): |
53 | 53 |
54 def _package_path(package): | 54 def _package_path(package): |
55 return os.path.join(datapath, *package.split(b'.')) | 55 return os.path.join(_rootpath, *package.split(b'.')) |
56 | 56 |
57 def open_resource(package, name): | 57 def open_resource(package, name): |
58 path = os.path.join(_package_path(package), name) | 58 path = os.path.join(_package_path(package), name) |
59 return open(path, 'rb') | 59 return open(path, 'rb') |