From fb6764a19dd71bcff9bf2396f3308bdc5a71e82c Mon Sep 17 00:00:00 2001 From: Adam Gregory Date: Thu, 4 Aug 2022 17:51:33 +0100 Subject: [PATCH 1/4] Resolve cwd using os.path.realpath() when generating environment names --- src/poetry/utils/env.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/poetry/utils/env.py b/src/poetry/utils/env.py index 024713e9272..71beac9732b 100644 --- a/src/poetry/utils/env.py +++ b/src/poetry/utils/env.py @@ -1145,7 +1145,7 @@ def get_base_prefix(cls) -> Path: def generate_env_name(cls, name: str, cwd: str) -> str: name = name.lower() sanitized_name = re.sub(r'[ $`!*@"\\\r\n\t]', "_", name)[:42] - normalized_cwd = os.path.normcase(cwd) + normalized_cwd = os.path.realpath(os.path.normcase(cwd)) h_bytes = hashlib.sha256(encode(normalized_cwd)).digest() h_str = base64.urlsafe_b64encode(h_bytes).decode()[:8] From 1d4321a5041d3910f1fb9c86223d38f61c0dbeba Mon Sep 17 00:00:00 2001 From: Adam Gregory Date: Thu, 4 Aug 2022 17:51:33 +0100 Subject: [PATCH 2/4] Add test_generate_env_name_uses_real_path() unit test --- tests/utils/test_env.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/utils/test_env.py b/tests/utils/test_env.py index a3a4474b399..c65ee0f6f40 100644 --- a/tests/utils/test_env.py +++ b/tests/utils/test_env.py @@ -1362,6 +1362,13 @@ def test_generate_env_name_ignores_case_for_case_insensitive_fs(tmp_dir: str): assert venv_name1 != venv_name2 +def test_generate_env_name_uses_real_path(tmp_dir: str, mocker: MockerFixture): + mocker.patch("os.path.realpath", return_value="the_real_dir") + venv_name1 = EnvManager.generate_env_name("simple-project", "the_real_dir") + venv_name2 = EnvManager.generate_env_name("simple-project", "linked_dir") + assert venv_name1 == venv_name2 + + @pytest.fixture() def extended_without_setup_poetry() -> Poetry: poetry = Factory().create_poetry( From 93a3548dec57beea19b4ca68066d7e332bc5e49f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Randy=20D=C3=B6ring?= <30527984+radoering@users.noreply.github.com> Date: Fri, 5 Aug 2022 18:07:56 +0200 Subject: [PATCH 3/4] ensure normcase --- src/poetry/utils/env.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/poetry/utils/env.py b/src/poetry/utils/env.py index 71beac9732b..6c7e60deb34 100644 --- a/src/poetry/utils/env.py +++ b/src/poetry/utils/env.py @@ -1145,7 +1145,7 @@ def get_base_prefix(cls) -> Path: def generate_env_name(cls, name: str, cwd: str) -> str: name = name.lower() sanitized_name = re.sub(r'[ $`!*@"\\\r\n\t]', "_", name)[:42] - normalized_cwd = os.path.realpath(os.path.normcase(cwd)) + normalized_cwd = os.path.normcase(os.path.realpath(cwd)) h_bytes = hashlib.sha256(encode(normalized_cwd)).digest() h_str = base64.urlsafe_b64encode(h_bytes).decode()[:8] From 08791c9ce23e07f214127eb39c7b3b5d7434c699 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 5 Aug 2022 16:11:38 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/utils/test_env.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/utils/test_env.py b/tests/utils/test_env.py index c65ee0f6f40..03c1e4c29ff 100644 --- a/tests/utils/test_env.py +++ b/tests/utils/test_env.py @@ -1364,7 +1364,7 @@ def test_generate_env_name_ignores_case_for_case_insensitive_fs(tmp_dir: str): def test_generate_env_name_uses_real_path(tmp_dir: str, mocker: MockerFixture): mocker.patch("os.path.realpath", return_value="the_real_dir") - venv_name1 = EnvManager.generate_env_name("simple-project", "the_real_dir") + venv_name1 = EnvManager.generate_env_name("simple-project", "the_real_dir") venv_name2 = EnvManager.generate_env_name("simple-project", "linked_dir") assert venv_name1 == venv_name2