Restore variables set by activate script of virtualenv properly (#150)

The `activate` script does't export the variables of `_OLD_VIRTUAL_*`,
most the deactivation code needed to be moved to `sh-deactivate`.
This commit is contained in:
Yamashita, Yuu
2015-11-12 13:45:33 +00:00
parent 47feedc934
commit 83bc6a49e4
4 changed files with 248 additions and 22 deletions

View File

@@ -98,33 +98,71 @@ if [ -n "${CONDA_DEFAULT_ENV}" ]; then
esac esac
fi fi
if [ -n "${_OLD_VIRTUAL_PYTHONHOME}" ]; then case "${shell}" in
case "${shell}" in fish )
fish )
cat <<EOS cat <<EOS
setenv PYTHONHOME "${_OLD_VIRTUAL_PYTHONHOME}"; if [ -n "\$_OLD_VIRTUAL_PATH" ];
set -e _OLD_VIRTUAL_PYTHONHOME; setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
EOS EOS
;; ;;
* ) * )
cat <<EOS cat <<EOS
export PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME}"; if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
unset _OLD_VIRTUAL_PYTHONHOME; export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
EOS EOS
;; ;;
esac esac
fi
case "${shell}" in
fish )
cat <<EOS
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
EOS
;;
* )
cat <<EOS
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
EOS
;;
esac
case "${shell}" in case "${shell}" in
fish ) fish )
: :
;; ;;
* ) * )
if [ -n "${_OLD_VIRTUAL_PS1}" ]; then
cat <<EOS cat <<EOS
export PS1='${_OLD_VIRTUAL_PS1}'; if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
unset _OLD_VIRTUAL_PS1; export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
EOS
;;
esac
case "${shell}" in
fish )
cat <<EOS
if functions -g deactivate;
functions -e deactivate;
end;
EOS
;;
* )
cat <<EOS
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
fi
;; ;;
esac esac

View File

@@ -263,13 +263,15 @@ EOS
export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv"
export PYENV_ACTIVATE_SHELL= export PYENV_ACTIVATE_SHELL=
stub pyenv-sh-deactivate "echo deactivated"
run pyenv-sh-activate --unset run pyenv-sh-activate --unset
unstub pyenv-sh-deactivate
assert_success assert_success
assert_output <<EOS assert_output <<EOS
pyenv-virtualenv: deactivate venv deactivated
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv";
unset VIRTUAL_ENV;
EOS EOS
} }

View File

@@ -32,6 +32,21 @@ pyenv-virtualenv: deactivate anaconda-2.3.0
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
unset CONDA_DEFAULT_ENV; unset CONDA_DEFAULT_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }
@@ -51,6 +66,17 @@ pyenv-virtualenv: deactivate anaconda-2.3.0
setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/anaconda-2.3.0"; setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/anaconda-2.3.0";
set -e VIRTUAL_ENV; set -e VIRTUAL_ENV;
set -e CONDA_DEFAULT_ENV; set -e CONDA_DEFAULT_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -g deactivate;
functions -e deactivate;
end;
EOS EOS
} }
@@ -70,5 +96,20 @@ pyenv-virtualenv: deactivate anaconda-2.3.0/envs/foo
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0/envs/foo";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
unset CONDA_DEFAULT_ENV; unset CONDA_DEFAULT_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }

View File

@@ -28,6 +28,21 @@ setup() {
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }
@@ -42,6 +57,21 @@ EOS
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }
@@ -56,6 +86,21 @@ EOS
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }
@@ -72,6 +117,21 @@ unset PYENV_VERSION;
unset PYENV_ACTIVATE_SHELL; unset PYENV_ACTIVATE_SHELL;
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }
@@ -88,6 +148,21 @@ unset PYENV_VERSION;
unset PYENV_ACTIVATE_SHELL; unset PYENV_ACTIVATE_SHELL;
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }
@@ -102,6 +177,21 @@ EOS
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv"; export PYENV_DEACTIVATE="${PYENV_ROOT}/versions/venv";
unset VIRTUAL_ENV; unset VIRTUAL_ENV;
if [ -n "\${_OLD_VIRTUAL_PATH}" ]; then
export PATH="\${_OLD_VIRTUAL_PATH}";
unset _OLD_VIRTUAL_PATH;
fi;
if [ -n "\${_OLD_VIRTUAL_PYTHONHOME}" ]; then
export PYTHONHOME="\${_OLD_VIRTUAL_PYTHONHOME}";
unset _OLD_VIRTUAL_PYTHONHOME;
fi;
if [ -n "\${_OLD_VIRTUAL_PS1}" ]; then
export PS1="\${_OLD_VIRTUAL_PS1}";
unset _OLD_VIRTUAL_PS1;
fi;
if declare -f deactivate 1>/dev/null 2>&1; then
unset -f deactivate;
fi;
EOS EOS
} }
@@ -116,6 +206,17 @@ EOS
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv"; setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv";
set -e VIRTUAL_ENV; set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -g deactivate;
functions -e deactivate;
end;
EOS EOS
} }
@@ -130,6 +231,17 @@ EOS
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv"; setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv";
set -e VIRTUAL_ENV; set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -g deactivate;
functions -e deactivate;
end;
EOS EOS
} }
@@ -146,6 +258,17 @@ set -e PYENV_VERSION;
set -e PYENV_ACTIVATE_SHELL; set -e PYENV_ACTIVATE_SHELL;
setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv"; setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv";
set -e VIRTUAL_ENV; set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -g deactivate;
functions -e deactivate;
end;
EOS EOS
} }
@@ -162,6 +285,17 @@ set -e PYENV_VERSION;
set -e PYENV_ACTIVATE_SHELL; set -e PYENV_ACTIVATE_SHELL;
setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv"; setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv";
set -e VIRTUAL_ENV; set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -g deactivate;
functions -e deactivate;
end;
EOS EOS
} }
@@ -176,6 +310,17 @@ EOS
pyenv-virtualenv: deactivate venv pyenv-virtualenv: deactivate venv
setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv"; setenv PYENV_DEACTIVATE "${PYENV_ROOT}/versions/venv";
set -e VIRTUAL_ENV; set -e VIRTUAL_ENV;
if [ -n "\$_OLD_VIRTUAL_PATH" ];
setenv PATH "\$_OLD_VIRTUAL_PATH";
set -e _OLD_VIRTUAL_PATH;
end;
if [ -n "\$_OLD_VIRTUAL_PYTHONHOME" ];
setenv PYTHONHOME "\$_OLD_VIRTUAL_PYTHONHOME";
set -e _OLD_VIRTUAL_PYTHONHOME;
end;
if functions -g deactivate;
functions -e deactivate;
end;
EOS EOS
} }