mirror of
https://github.com/python/cpython.git
synced 2025-08-15 22:30:42 +00:00

gh-112431: Unconditionally call `hash -r` (GH-112432)
The `activate` script calls `hash -r` in two places to make sure the shell picks
up the environment changes the script makes. Before that, it checks to
see if the shell running the script is bash or zsh.
`hash -r` is specified by POSIX and is not exclusive to bash and zsh.
This guard prevents the script from calling `hash -r` in other
`GH-!/bin/sh`-compatible shells like dash.
(cherry picked from commit a194938f33
)
Co-authored-by: James Morris <6653392+J-M0@users.noreply.github.com>
70 lines
2 KiB
Text
70 lines
2 KiB
Text
# This file must be used with "source bin/activate" *from bash*
|
|
# You cannot run it directly
|
|
|
|
deactivate () {
|
|
# reset old environment variables
|
|
if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
|
|
PATH="${_OLD_VIRTUAL_PATH:-}"
|
|
export PATH
|
|
unset _OLD_VIRTUAL_PATH
|
|
fi
|
|
if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
|
|
PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
|
|
export PYTHONHOME
|
|
unset _OLD_VIRTUAL_PYTHONHOME
|
|
fi
|
|
|
|
# Call hash to forget past commands. Without forgetting
|
|
# past commands the $PATH changes we made may not be respected
|
|
hash -r 2> /dev/null
|
|
|
|
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
|
PS1="${_OLD_VIRTUAL_PS1:-}"
|
|
export PS1
|
|
unset _OLD_VIRTUAL_PS1
|
|
fi
|
|
|
|
unset VIRTUAL_ENV
|
|
unset VIRTUAL_ENV_PROMPT
|
|
if [ ! "${1:-}" = "nondestructive" ] ; then
|
|
# Self destruct!
|
|
unset -f deactivate
|
|
fi
|
|
}
|
|
|
|
# unset irrelevant variables
|
|
deactivate nondestructive
|
|
|
|
# on Windows, a path can contain colons and backslashes and has to be converted:
|
|
if [ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ] ; then
|
|
# transform D:\path\to\venv to /d/path/to/venv on MSYS
|
|
# and to /cygdrive/d/path/to/venv on Cygwin
|
|
export VIRTUAL_ENV=$(cygpath "__VENV_DIR__")
|
|
else
|
|
# use the path as-is
|
|
export VIRTUAL_ENV="__VENV_DIR__"
|
|
fi
|
|
|
|
_OLD_VIRTUAL_PATH="$PATH"
|
|
PATH="$VIRTUAL_ENV/__VENV_BIN_NAME__:$PATH"
|
|
export PATH
|
|
|
|
# unset PYTHONHOME if set
|
|
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
|
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
|
if [ -n "${PYTHONHOME:-}" ] ; then
|
|
_OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
|
|
unset PYTHONHOME
|
|
fi
|
|
|
|
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
|
_OLD_VIRTUAL_PS1="${PS1:-}"
|
|
PS1="__VENV_PROMPT__${PS1:-}"
|
|
export PS1
|
|
VIRTUAL_ENV_PROMPT="__VENV_PROMPT__"
|
|
export VIRTUAL_ENV_PROMPT
|
|
fi
|
|
|
|
# Call hash to forget past commands. Without forgetting
|
|
# past commands the $PATH changes we made may not be respected
|
|
hash -r 2> /dev/null
|