Commit 28d0175d by Alecto Irene Perez Committed by GitHub

Fix shell activation for zsh (#5795)

# Fix Shell Activation For ZSH

This PR resolves an issue wherein poetry will clear the `PATH` on zsh.
The activation script contains a number of if statements of the
following form:

```bash
    # ...
    if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
        PATH="$_OLD_VIRTUAL_PATH"
        export PATH
        unset _OLD_VIRTUAL_PATH
    fi
```
These constructs are valid in bash, although zsh fails to negate the
conditional except when placed in emulation mode:

```zsh
# Causes PATH to be cleared, leading to other issues
. /home/alecto/.cache/pypoetry/virtualenvs/poetry-E-aAiPjf-py3.10/bin/activate
```

When bash is used as an emulator to source the script, it functions
correctly:

```zsh
# Functions correctly
emulate bash -c '. /home/alecto/.cache/pypoetry/virtualenvs/poetry-E-aAiPjf-py3.10/bin/activate'
```

It's important to note that this doesn't place the *entire* shell into
bash emulation mode; only the activate script is sourced as bash.

Any guidance on what tests should be added for this PR would be
appreciated.

Co-authored-by: Alecto Irene Perez <alecto.perez@voladynamics.com>
Co-authored-by: Bartosz Sokorski <b.sokorski@gmail.com>
parent 47255c44
...@@ -95,8 +95,13 @@ class Shell: ...@@ -95,8 +95,13 @@ class Shell:
if self._name in ["zsh", "nu"]: if self._name in ["zsh", "nu"]:
c.setecho(False) c.setecho(False)
if self._name == "zsh":
c.sendline(f"{self._get_source_command()} {shlex.quote(str(activate_path))}") # Under ZSH the source command should be invoked in zsh's bash emulator
c.sendline(f"emulate bash -c '. {shlex.quote(str(activate_path))}'")
else:
c.sendline(
f"{self._get_source_command()} {shlex.quote(str(activate_path))}"
)
def resize(sig: Any, data: Any) -> None: def resize(sig: Any, data: Any) -> None:
terminal = shutil.get_terminal_size() terminal = shutil.get_terminal_size()
......
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