Add activate/deactivate hooks (#452)

This commit is contained in:
Josh French
2023-03-22 13:39:55 -04:00
committed by GitHub
parent 13bc1877ef
commit fca12418ca
7 changed files with 138 additions and 1 deletions

View File

@@ -25,6 +25,27 @@ resolve_link() {
unset FORCE
unset QUIET
# Define `before_activate` and `after_activate` functions that allow
# plugin hooks to register a string of code for execution before or
# after activating a virtualenv.
declare -a before_hooks after_hooks
before_activate() {
local hook="$1"
before_hooks["${#before_hooks[@]}"]="$hook"
}
after_activate() {
local hook="$1"
after_hooks["${#after_hooks[@]}"]="$hook"
}
# Load plugin hooks.
OLDIFS="$IFS"
IFS=$'\n' scripts=(`pyenv-hooks activate`)
IFS="$OLDIFS"
for script in "${scripts[@]}"; do source "$script"; done
while [ $# -gt 0 ]; do
case "$1" in
"--complete" )
@@ -137,6 +158,9 @@ fi
pyenv-sh-deactivate --force --quiet || true
# Execute `before_activate` hooks.
for hook in "${before_hooks[@]}"; do eval "$hook"; done
if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then
echo "pyenv-virtualenv: activate ${venv}" 1>&2
fi
@@ -258,3 +282,6 @@ if [ -d "${prefix}/conda-meta" ] ||
esac
shopt -u nullglob
fi
# Execute `after_activate` hooks.
for hook in "${after_hooks[@]}"; do eval "$hook"; done

View File

@@ -16,6 +16,27 @@ fi
unset FORCE
unset QUIET
# Define `before_deactivate` and `after_deactivate` functions that allow
# plugin hooks to register a string of code for execution before or
# after deactivating a virtualenv.
declare -a before_hooks after_hooks
before_deactivate() {
local hook="$1"
before_hooks["${#before_hooks[@]}"]="$hook"
}
after_deactivate() {
local hook="$1"
after_hooks["${#after_hooks[@]}"]="$hook"
}
# Load plugin hooks.
OLDIFS="$IFS"
IFS=$'\n' scripts=(`pyenv-hooks deactivate`)
IFS="$OLDIFS"
for script in "${scripts[@]}"; do source "$script"; done
while [ $# -gt 0 ]; do
case "$1" in
"-f" | "--force" )
@@ -54,6 +75,9 @@ else
venv="${prefix##*/}"
fi
# Execute `before_deactivate` hooks.
for hook in "${before_hooks[@]}"; do eval "$hook"; done
if [ -n "$PYENV_VIRTUALENV_VERBOSE_ACTIVATE" ]; then
echo "pyenv-virtualenv: deactivate ${venv}" 1>&2
fi
@@ -191,3 +215,6 @@ fi;
EOS
;;
esac
# Execute `after_deactivate` hooks.
for hook in "${after_hooks[@]}"; do eval "$hook"; done