diff --git a/docs/changelog/1962.bugfix.rst b/docs/changelog/1962.bugfix.rst new file mode 100644 index 000000000..8dd3eba87 --- /dev/null +++ b/docs/changelog/1962.bugfix.rst @@ -0,0 +1 @@ +Fix Nonetype error in cygwin if POSIX path in dest - by :user:`danyeaw`. diff --git a/src/virtualenv/activation/via_template.py b/src/virtualenv/activation/via_template.py index ad91f247c..6839f0590 100644 --- a/src/virtualenv/activation/via_template.py +++ b/src/virtualenv/activation/via_template.py @@ -38,7 +38,10 @@ def replacements(self, creator, dest_folder): if any(platform in current_platform for platform in platforms): pattern = re.compile("^([A-Za-z]):(.*)") match = pattern.match(str(creator.dest)) - virtual_env = "/" + match.group(1).lower() + match.group(2) + if match: + virtual_env = "/" + match.group(1).lower() + match.group(2) + else: + virtual_env = str(creator.dest) else: virtual_env = str(creator.dest) return { diff --git a/tests/unit/activation/test_activation_support.py b/tests/unit/activation/test_activation_support.py index 73424045b..5a234f9cc 100644 --- a/tests/unit/activation/test_activation_support.py +++ b/tests/unit/activation/test_activation_support.py @@ -84,3 +84,16 @@ def test_win_path_no_conversion(mocker, activator_class): mocker.stub(creator.bin_dir.relative_to) resource = activator.replacements(creator, "") assert resource["__VIRTUAL_ENV__"] == "C:/tools/msys64/home" + + +@pytest.mark.skipif(IS_WIN, reason="Github Actions ships with WSL bash") +@pytest.mark.parametrize("activator_class", [BashActivator]) +def test_cygwin_path_no_conversion(mocker, activator_class): + mocker.patch("sysconfig.get_platform", return_value="cygwin") + activator = activator_class(Namespace(prompt=None)) + creator = Creator() + creator.dest = "/c/tools/msys64/home" + creator.bin_dir = Path("/c/tools/msys64/home/bin") + mocker.stub(creator.bin_dir.relative_to) + resource = activator.replacements(creator, "") + assert resource["__VIRTUAL_ENV__"] == "/c/tools/msys64/home"