Mercurial > public > mercurial-scm > hg
comparison 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 |
comparison
equal
deleted
inserted
replaced
43870:66af68d4c751 | 43871:1390bb81163e |
---|---|
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 | |
39 try: | |
40 import importlib | |
41 | |
42 # Force loading of the resources module | |
43 importlib.resources.open_binary | |
44 | |
45 def open_resource(package, name): | |
46 package = b'mercurial.' + package | |
47 return importlib.resources.open_binary( | |
48 pycompat.sysstr(package), pycompat.sysstr(name) | |
49 ) | |
50 | |
51 | |
52 except AttributeError: | |
53 | |
54 def _package_path(package): | |
55 return os.path.join(datapath, *package.split(b'.')) | |
56 | |
57 def open_resource(package, name): | |
58 path = os.path.join(_package_path(package), name) | |
59 return open(path, 'rb') |