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')