##// END OF EJS Templates
mq: avoid using `__file__` to compare modules...
mq: avoid using `__file__` to compare modules This fixes ~70 tests when using an oxidized executable, bringing the current failure count down to 92 (with 110 skips) when templates/ is copied next to the executable. Differential Revision: https://phab.mercurial-scm.org/D7778

File last commit:

r44407:75ec46c6 default
r44471:5bbd770d default
Show More
resourceutil.py
59 lines | 1.7 KiB | text/x-python | PythonLexer
# 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:
from importlib import resources
# Force loading of the resources module
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)
)
except (ImportError, 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')