feat(poetry-env): support changing between two venv dirs (#12346)
Co-authored-by: Carlo Sala <carlosalag@protonmail.com>master
parent
6e9d57d5ab
commit
31f2025e0f
1 changed files with 19 additions and 19 deletions
@ -1,27 +1,27 @@ |
||||
# Automatic poetry environment activation/deactivation |
||||
_togglePoetryShell() { |
||||
# deactivate environment if pyproject.toml doesn't exist and not in a subdir |
||||
if [[ ! -f "$PWD/pyproject.toml" ]] ; then |
||||
if [[ "$poetry_active" == 1 ]]; then |
||||
if [[ "$PWD" != "$poetry_dir"* ]]; then |
||||
export poetry_active=0 |
||||
deactivate |
||||
return |
||||
fi |
||||
fi |
||||
# Determine if currently in a Poetry-managed directory |
||||
local in_poetry_dir=0 |
||||
if [[ -f "$PWD/pyproject.toml" ]] && grep -q 'tool.poetry' "$PWD/pyproject.toml"; then |
||||
in_poetry_dir=1 |
||||
fi |
||||
|
||||
# Deactivate the current environment if moving out of a Poetry directory or into a different Poetry directory |
||||
if [[ $poetry_active -eq 1 ]] && { [[ $in_poetry_dir -eq 0 ]] || [[ "$PWD" != "$poetry_dir"* ]]; }; then |
||||
export poetry_active=0 |
||||
unset poetry_dir |
||||
deactivate |
||||
fi |
||||
|
||||
# activate the environment if pyproject.toml exists |
||||
if [[ "$poetry_active" != 1 ]]; then |
||||
if [[ -f "$PWD/pyproject.toml" ]]; then |
||||
if grep -q 'tool.poetry' "$PWD/pyproject.toml" && venv_dir=$(poetry env info --path); then |
||||
export poetry_active=1 |
||||
export poetry_dir="$PWD" |
||||
source "${venv_dir}/bin/activate" |
||||
fi |
||||
# Activate the environment if in a Poetry directory and no environment is currently active |
||||
if [[ $in_poetry_dir -eq 1 ]] && [[ $poetry_active -ne 1 ]]; then |
||||
venv_dir=$(poetry env info --path 2>/dev/null) |
||||
if [[ -n "$venv_dir" ]]; then |
||||
export poetry_active=1 |
||||
export poetry_dir="$PWD" |
||||
source "${venv_dir}/bin/activate" |
||||
fi |
||||
fi |
||||
} |
||||
autoload -U add-zsh-hook |
||||
add-zsh-hook chpwd _togglePoetryShell |
||||
_togglePoetryShell |
||||
_togglePoetryShell # Initial call to check the current directory at shell startup |
||||
|
||||
Loading…
Reference in new issue