Mercurial > public > mercurial-scm > hg-stable
view mercurial/utils/resourceutil.py @ 43877: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 |
line wrap: on
line source
# resourceutil.py - utility for looking up resources # # Copyright 2005 K. Thananchayan <thananck@yahoo.com> # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com> # # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. from __future__ import absolute_import import imp import os import sys from .. import pycompat def mainfrozen(): """return True if we are a frozen executable. The code supports py2exe (most common, Windows only) and tools/freeze (portable, not much used). """ return ( pycompat.safehasattr(sys, "frozen") or pycompat.safehasattr(sys, "importers") # new py2exe or imp.is_frozen("__main__") # old py2exe ) # tools/freeze # the location of data files matching the source code if mainfrozen() and getattr(sys, 'frozen', None) != 'macosx_app': # executable version (py2exe) doesn't support __file__ datapath = os.path.dirname(pycompat.sysexecutable) else: datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__))) try: import importlib # Force loading of the resources module importlib.resources.open_binary def open_resource(package, name): package = b'mercurial.' + package return importlib.resources.open_binary( pycompat.sysstr(package), pycompat.sysstr(name) ) except AttributeError: def _package_path(package): return os.path.join(datapath, *package.split(b'.')) def open_resource(package, name): path = os.path.join(_package_path(package), name) return open(path, 'rb')