policy.py
51 lines
| 1.6 KiB
| text/x-python
|
PythonLexer
/ mercurial / policy.py
timeless
|
r29266 | # policy.py - module policy logic for Mercurial. | ||
# | ||||
# Copyright 2015 Gregory Szorc <gregory.szorc@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 os | ||||
import sys | ||||
# Rules for how modules can be loaded. Values are: | ||||
# | ||||
# c - require C extensions | ||||
# allow - allow pure Python implementation when C loading fails | ||||
Maciej Fijalkowski
|
r29490 | # cffi - required cffi versions (implemented within pure module) | ||
# cffi-allow - allow pure Python implementation if cffi version is missing | ||||
timeless
|
r29266 | # py - only load pure Python modules | ||
# | ||||
Yuya Nishihara
|
r32251 | # By default, fall back to the pure modules so the in-place build can | ||
# run without recompiling the C extensions. This will be overridden by | ||||
# __modulepolicy__ generated by setup.py. | ||||
policy = b'allow' | ||||
FUJIWARA Katsunori
|
r31361 | policynoc = (b'cffi', b'cffi-allow', b'py') | ||
policynocffi = (b'c', b'py') | ||||
Maciej Fijalkowski
|
r29490 | |||
timeless
|
r29266 | try: | ||
from . import __modulepolicy__ | ||||
policy = __modulepolicy__.modulepolicy | ||||
except ImportError: | ||||
pass | ||||
# PyPy doesn't load C extensions. | ||||
# | ||||
# The canonical way to do this is to test platform.python_implementation(). | ||||
# But we don't import platform and don't bloat for it here. | ||||
Yuya Nishihara
|
r32205 | if r'__pypy__' in sys.builtin_module_names: | ||
policy = b'cffi' | ||||
timeless
|
r29266 | |||
# Our C extensions aren't yet compatible with Python 3. So use pure Python | ||||
# on Python 3 for now. | ||||
if sys.version_info[0] >= 3: | ||||
Augie Fackler
|
r31308 | policy = b'py' | ||
timeless
|
r29266 | |||
# Environment variable can always force settings. | ||||
FUJIWARA Katsunori
|
r31361 | if sys.version_info[0] >= 3: | ||
Yuya Nishihara
|
r32205 | if r'HGMODULEPOLICY' in os.environ: | ||
policy = os.environ[r'HGMODULEPOLICY'].encode(r'utf-8') | ||||
FUJIWARA Katsunori
|
r31361 | else: | ||
Yuya Nishihara
|
r32205 | policy = os.environ.get(r'HGMODULEPOLICY', policy) | ||