Commit 1a3ecfb8 by Randy Döring Committed by Bjorn Neergaard

Normalize case before hashing so that the generated venv name is independent of case on Windows

parent 65d25b67
......@@ -1072,7 +1072,8 @@ class EnvManager:
def generate_env_name(cls, name: str, cwd: str) -> str:
name = name.lower()
sanitized_name = re.sub(r'[ $`!*@"\\\r\n\t]', "_", name)[:42]
h = hashlib.sha256(encode(cwd)).digest()
normalized_cwd = os.path.normcase(cwd)
h = hashlib.sha256(encode(normalized_cwd)).digest()
h = base64.urlsafe_b64encode(h).decode()[:8]
return f"{sanitized_name}-{h}"
......
......@@ -1120,3 +1120,12 @@ def test_create_venv_accepts_fallback_version_w_nonzero_patchlevel(
with_setuptools=True,
with_wheel=True,
)
def test_generate_env_name_ignores_case_for_case_insensitive_fs(tmp_dir):
venv_name1 = EnvManager.generate_env_name("simple-project", "MyDiR")
venv_name2 = EnvManager.generate_env_name("simple-project", "mYdIr")
if sys.platform == "win32":
assert venv_name1 == venv_name2
else:
assert venv_name1 != venv_name2
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment