wip: add activate hooks

This commit is contained in:
Josh French 2023-03-19 10:34:52 -04:00
parent 13bc1877ef
commit d22801dc8e
No known key found for this signature in database
3 changed files with 64 additions and 0 deletions

View file

@ -25,6 +25,30 @@ 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
# Execute `before_activate` hooks.
for hook in "${before_hooks[@]}"; do eval "$hook"; done
while [ $# -gt 0 ]; do
case "$1" in
"--complete" )
@ -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,11 @@ setup() {
unset PYENV_VIRTUAL_ENV_DISABLE_PROMPT
unset VIRTUAL_ENV_DISABLE_PROMPT
unset _OLD_VIRTUAL_PS1
stub pyenv-hooks ""
}
teardown() {
unstub pyenv-hooks
}
@test "activate virtualenv from current version" {

View file

@ -40,3 +40,35 @@ OUT
unstub pyenv-rehash
teardown_version "3.5.1"
}
@test "pyenv-sh-activate hooks" {
cat > "${HOOK_PATH}/activate.bash" <<OUT
before_activate 'echo "before"'
after_activate 'echo "after"'
OUT
export PYENV_VIRTUALENV_INIT=1
stub pyenv-version-name "echo venv"
stub pyenv-virtualenv-prefix ""
stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\""
stub pyenv-hooks "activate : echo '$HOOK_PATH'/activate.bash"
stub pyenv-sh-deactivate ""
PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate
assert_success
assert_output <<EOS
before
export PYENV_VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv";
export _OLD_VIRTUAL_PS1="\${PS1:-}";
export PS1="(venv) \${PS1:-}";
after
EOS
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-prefix
unstub pyenv-hooks
unstub pyenv-sh-deactivate
}