mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-28 14:06:12 +02:00
fix(poetry-env): preserve venv in project subdirectories (#13932)
* fix(poetry-env): preserve venv in project subdirectories Keep the active environment while navigating ordinary project children, but switch when entering a nested Poetry project. Use a path-component boundary so similarly named sibling projects are not mistaken for subdirectories. Fixes #12377 * fix(poetry-env): normalize active project root
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
# Poetry Environment Plugin
|
# Poetry Environment Plugin
|
||||||
|
|
||||||
This plugin automatically changes poetry environment when you cd into or out of the project directory.
|
This plugin automatically activates a Poetry environment when you enter a
|
||||||
Note: Script looks for pyproject.toml file to determine poetry if its a poetry environment
|
directory containing both `pyproject.toml` and `poetry.lock`. It keeps the
|
||||||
|
environment active in project subdirectories, switches to nested Poetry
|
||||||
|
projects, and deactivates it when you leave the project tree.
|
||||||
|
|
||||||
To use it, add `poetry-env` to the plugins array in your zshrc file:
|
To use it, add `poetry-env` to the plugins array in your zshrc file:
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,24 @@
|
|||||||
_togglePoetryShell() {
|
_togglePoetryShell() {
|
||||||
# Determine if currently in a Poetry-managed directory
|
# Determine if currently in a Poetry-managed directory
|
||||||
local in_poetry_dir=0
|
local in_poetry_dir=0
|
||||||
|
local in_active_poetry_dir=0
|
||||||
if [[ -f "$PWD/pyproject.toml" && -f "$PWD/poetry.lock" ]]; then
|
if [[ -f "$PWD/pyproject.toml" && -f "$PWD/poetry.lock" ]]; then
|
||||||
in_poetry_dir=1
|
in_poetry_dir=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Deactivate the current environment if moving out of a Poetry directory or into a different Poetry directory
|
# Deactivate when leaving the active project or entering a nested project
|
||||||
if [[ $poetry_active -eq 1 ]] && { [[ $in_poetry_dir -eq 0 ]] || [[ "$PWD" != "$poetry_dir"* ]]; }; then
|
if [[ $poetry_active -eq 1 ]]; then
|
||||||
export poetry_active=0
|
local project_dir="${poetry_dir%/}"
|
||||||
unset poetry_dir
|
if [[ "$PWD" == "$project_dir" || "$PWD" == "$project_dir"/* ]]; then
|
||||||
(( $+functions[deactivate] )) && deactivate
|
in_active_poetry_dir=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $in_active_poetry_dir -eq 0 ]] ||
|
||||||
|
{ [[ $in_poetry_dir -eq 1 ]] && [[ "$PWD" != "$poetry_dir" ]]; }; then
|
||||||
|
export poetry_active=0
|
||||||
|
unset poetry_dir
|
||||||
|
(( $+functions[deactivate] )) && deactivate
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Activate the environment if in a Poetry directory and no environment is currently active
|
# Activate the environment if in a Poetry directory and no environment is currently active
|
||||||
|
|||||||
Reference in New Issue
Block a user