[Python-checkins] cpython: Optimize importlib's case-sensitivity check by wasting as little time as
brett.cannon
python-checkins at python.org
Fri Feb 17 15:47:06 CET 2012
http://hg.python.org/cpython/rev/e477832212b9
changeset: 75000:e477832212b9
user: Brett Cannon <brett at python.org>
date: Fri Feb 17 09:46:48 2012 -0500
summary:
Optimize importlib's case-sensitivity check by wasting as little time as possible under case-sensitive OSs.
files:
Lib/importlib/_bootstrap.py | 36 +++++++++++++++---------
1 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -19,28 +19,33 @@
# Bootstrap-related code ######################################################
-# TODO: when not on any of these platforms, replace _case_ok() w/
-# ``lambda x,y: True``.
-CASE_OK_PLATFORMS = 'win', 'cygwin', 'darwin'
+CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin'
-def _case_ok(directory, check):
- """Check if the directory contains something matching 'check'
- case-sensitively when running on Windows or OS X.
+def _case_insensitive_ok(directory, check):
+ """Check if the directory contains something matching 'check' exists in the
+ directory.
- If running on Window or OS X and PYTHONCASEOK is a defined environment
- variable then no case-sensitive check is performed. No check is done to see
- if what is being checked for exists, so if the platform is not Windows or
- OS X then assume the case is fine.
+ If PYTHONCASEOK is a defined environment variable then skip the
+ case-sensitivity check.
"""
- if (any(map(sys.platform.startswith, CASE_OK_PLATFORMS)) and
- b'PYTHONCASEOK' not in _os.environ):
+ if b'PYTHONCASEOK' not in _os.environ:
if not directory:
directory = '.'
return check in _os.listdir(directory)
else:
return True
+def _case_sensitive_ok(directory, check):
+ """Under case-sensitive filesystems always assume the case matches.
+
+ Since other code does the file existence check, that subsumes a
+ case-sensitivity check.
+
+ """
+ return True
+
+_case_ok = None
# TODO: Expose from marshal
@@ -1055,7 +1060,7 @@
modules, those two modules must be explicitly passed in.
"""
- global imp, sys
+ global _case_ok, imp, sys
imp = imp_module
sys = sys_module
@@ -1089,6 +1094,11 @@
setattr(self_module, '_os', os_module)
setattr(self_module, 'path_sep', path_sep)
+ if sys_module.platform in CASE_INSENSITIVE_PLATFORMS:
+ _case_ok = _case_insensitive_ok
+ else:
+ _case_ok = _case_sensitive_ok
+
def _install(sys_module, imp_module):
"""Install importlib as the implementation of import.
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list