summaryrefslogtreecommitdiffstats
path: root/Lib/importlib/_bootstrap.py
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2012-04-22 15:45:07 (GMT)
committerBrett Cannon <brett@python.org>2012-04-22 15:45:07 (GMT)
commit5c903e6ee17a686ec85f8557595cc664bfce5de5 (patch)
treedcee8e7659d470f281bf06138068290a41c3e66f /Lib/importlib/_bootstrap.py
parentce9bb9eaa057dbac9950baf3008e9e17c1390468 (diff)
downloadcpython-5c903e6ee17a686ec85f8557595cc664bfce5de5.zip
cpython-5c903e6ee17a686ec85f8557595cc664bfce5de5.tar.gz
cpython-5c903e6ee17a686ec85f8557595cc664bfce5de5.tar.bz2
Issue #13959: Continue to try to accomodate altsep in importlib by not
ignoring altsep if it already exists on a path when doing a join.
Diffstat (limited to 'Lib/importlib/_bootstrap.py')
-rw-r--r--Lib/importlib/_bootstrap.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index a705bf8..04ceb56 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -61,12 +61,16 @@ def _r_long(int_bytes):
return x
-# XXX Optimize for single-separator OSs by having two versions of this function
-# and choosing in _setup().
-def _path_join(*args):
+def _path_join(*path_parts):
"""Replacement for os.path.join()."""
- return path_sep.join(x[:-len(path_sep)] if x.endswith(path_sep) else x
- for x in args if x)
+ new_parts = []
+ for part in path_parts:
+ if not part:
+ continue
+ new_parts.append(part)
+ if part[-1] not in path_separators:
+ new_parts.append(path_sep)
+ return ''.join(new_parts[:-1]) # Drop superfluous path separator.
def _path_split(path):
@@ -1178,6 +1182,8 @@ def _setup(sys_module, _imp_module):
os_details = ('posix', ['/']), ('nt', ['\\', '/']), ('os2', ['\\', '/'])
for builtin_os, path_separators in os_details:
+ # Assumption made in _path_join()
+ assert all(len(sep) == 1 for sep in path_separators)
path_sep = path_separators[0]
if builtin_os in sys.modules:
os_module = sys.modules[builtin_os]