# Strip initial drive from a Windows path. We know we have an absolute
# path here, so the second part of the check rules out a POSIX path that
# happens to contain a colon at the second character.
- if head[1] == ':' and head[0] not in path_separators:
+ # Slicing avoids issues with an empty (or short) `head`.
+ if head[1:2] == ':' and head[0:1] not in path_separators:
head = head[2:]
# Strip initial path separator from `head` to complete the conversion
self.util.cache_from_source(path, optimization=''),
os.path.normpath(expect))
+ @unittest.skipIf(sys.implementation.cache_tag is None,
+ 'requires sys.implementation.cache_tag to not be None')
+ def test_cache_from_source_in_root_with_pycache_prefix(self):
+ # Regression test for gh-82916
+ pycache_prefix = os.path.join(os.path.sep, 'tmp', 'bytecode')
+ path = 'qux.py'
+ expect = os.path.join(os.path.sep, 'tmp', 'bytecode',
+ f'qux.{self.tag}.pyc')
+ with util.temporary_pycache_prefix(pycache_prefix):
+ with os_helper.change_cwd('/'):
+ self.assertEqual(self.util.cache_from_source(path), expect)
+
@unittest.skipIf(sys.implementation.cache_tag is None,
'requires sys.implementation.cache_tag to not be None')
def test_source_from_cache_inside_pycache_prefix(self):