From 64ceee5c8e5359f511e0eda96b826d516eb75b93 Mon Sep 17 00:00:00 2001 From: "Yamashita, Yuu" Date: Wed, 4 Nov 2015 13:27:27 +0000 Subject: [PATCH] Stop using virtualenv's `activate` script (#69) --- bin/pyenv-sh-activate | 81 +++++++++++-------- bin/pyenv-sh-deactivate | 128 ++++++++++++++---------------- test/activate.bats | 27 ++++--- test/conda-activate.bats | 23 ++++-- test/conda-deactivate.bats | 35 ++++----- test/deactivate.bats | 155 +++++++++++++++---------------------- 6 files changed, 219 insertions(+), 230 deletions(-) diff --git a/bin/pyenv-sh-activate b/bin/pyenv-sh-activate index 08c07c9..ab225d8 100755 --- a/bin/pyenv-sh-activate +++ b/bin/pyenv-sh-activate @@ -70,11 +70,7 @@ if pyenv-prefix "${versions}" 1>/dev/null 2>&1; then fi else version="$(pyenv-version-name)" - if [[ "${versions}" == "root" ]]; then - versions="${version%/envs/*}" - else - versions="${version%/envs/*}/envs/${versions}" - fi + versions="${version%/envs/*}/envs/${versions}" if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then [ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not an environment of anaconda/miniconda" 1>&2 echo "false" @@ -85,21 +81,6 @@ fi shell="${PYENV_SHELL:-${SHELL##*/}}" prefix="$(pyenv-prefix "${versions}")" -unset conda_env - -if [ -f "${prefix}/bin/conda" ]; then - if [[ "$shell" != "bash" ]] && [[ "$shell" != "zsh" ]]; then - [ -n "$NOERROR" ] || echo "pyenv-virtualenv: Only bash and zsh are supported by Anaconda/Miniconda" 1>&2 - echo "false" - exit 1 - fi - if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then - conda_env="${prefix##*/envs/}" - else - conda_env="root" - fi -fi - # Display setup instruction, if pyenv-virtualenv has not been initialized. # if 'pyenv virtualenv-init -' is not found in "$profile" if [ -z "$PYENV_VIRTUALENV_INIT" ]; then @@ -124,29 +105,63 @@ if [ -z "$no_shell" ]; then esac fi -if [ -n "${conda_env}" ]; then - # anaconda/miniconda +case "${shell}" in +fish ) + cat <&2 - echo "false" - exit 1 - fi - if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then - conda_env="${prefix##*/envs/}" - else - conda_env="root" - fi -fi - -if [ -n "${conda_env}" ]; then - echo "if [ -f \"${prefix%/envs/*}/bin/deactivate\" ]; then" -else - case "$shell" in - fish ) - echo "if functions -q deactivate;" - ;; - * ) - echo "if declare -f deactivate 1>/dev/null 2>&1; then" - ;; - esac +if [ -z "${VIRTUAL_ENV}" ]; then + [ -n "$NOERROR" ] || echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2 + echo "false" + exit 1 fi if [ -n "$VERBOSE" ]; then - echo " echo \"pyenv-virtualenv: deactivate ${prefix##*/}\" 1>&2;" + echo "pyenv-virtualenv: deactivate ${prefix##*/}" 1>&2 fi if [ -n "${PYENV_ACTIVATE_SHELL}" ]; then # shell version set in pyenv-sh-activate should be unset # https://github.com/yyuu/pyenv-virtualenv/issues/61 - echo " pyenv shell --unset;" + echo "pyenv shell --unset;" case "$shell" in fish ) - echo " set -e PYENV_ACTIVATE_SHELL;" + echo "set -e PYENV_ACTIVATE_SHELL;" ;; * ) - echo " unset PYENV_ACTIVATE_SHELL;" + echo "unset PYENV_ACTIVATE_SHELL;" ;; esac fi -if [ -n "${conda_env}" ]; then - cat <&2;" -fi - -echo " false;" - -case "$shell" in +case "${shell}" in fish ) - echo "end;" + cat <&2; - false; -fi; +export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } @test "deactivate conda root (fish)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/anaconda-2.3.0" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/anaconda-2.3.0" export PYENV_ACTIVATE_SHELL= @@ -35,14 +33,17 @@ EOS PYENV_SHELL="fish" run pyenv-sh-deactivate - assert_failure + assert_success assert_output <&2; - false; -fi; +export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } diff --git a/test/deactivate.bats b/test/deactivate.bats index 0329031..9e1ed6c 100644 --- a/test/deactivate.bats +++ b/test/deactivate.bats @@ -7,6 +7,7 @@ setup() { } @test "deactivate virtualenv" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL= @@ -14,18 +15,15 @@ setup() { assert_success assert_output </dev/null 2>&1; then - export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; - unset PYENV_ACTIVATE; - deactivate; -else - echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; - false; -fi; +export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } @test "deactivate virtualenv (verbose)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL= @@ -33,19 +31,16 @@ EOS assert_success assert_output </dev/null 2>&1; then - echo "pyenv-virtualenv: deactivate venv" 1>&2; - export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; - unset PYENV_ACTIVATE; - deactivate; -else - echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; - false; -fi; +pyenv-virtualenv: deactivate venv +export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } @test "deactivate virtualenv (no-error)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL= @@ -53,17 +48,15 @@ EOS assert_success assert_output </dev/null 2>&1; then - export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; - unset PYENV_ACTIVATE; - deactivate; -else - false; -fi; +export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } @test "deactivate virtualenv (with shell activation)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL=1 @@ -71,20 +64,17 @@ EOS assert_success assert_output </dev/null 2>&1; then - pyenv shell --unset; - unset PYENV_ACTIVATE_SHELL; - export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; - unset PYENV_ACTIVATE; - deactivate; -else - echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; - false; -fi; +pyenv shell --unset; +unset PYENV_ACTIVATE_SHELL; +export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } @test "deactivate virtualenv (with shell activation) (no-error)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL=1 @@ -92,15 +82,12 @@ EOS assert_success assert_output </dev/null 2>&1; then - pyenv shell --unset; - unset PYENV_ACTIVATE_SHELL; - export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; - unset PYENV_ACTIVATE; - deactivate; -else - false; -fi; +pyenv shell --unset; +unset PYENV_ACTIVATE_SHELL; +export PYENV_DEACTIVATE="$PYENV_ACTIVATE"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } @@ -113,18 +100,15 @@ EOS assert_success assert_output </dev/null 2>&1; then - export PYENV_DEACTIVATE="$VIRTUAL_ENV"; - unset PYENV_ACTIVATE; - deactivate; -else - echo "pyenv-virtualenv: no virtualenv has been activated." 1>&2; - false; -fi; +export PYENV_DEACTIVATE="$VIRTUAL_ENV"; +unset PYENV_ACTIVATE; +unset VIRTUAL_ENV; +unset CONDA_DEFAULT_ENV; EOS } @test "deactivate virtualenv (fish)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL= @@ -132,18 +116,15 @@ EOS assert_success assert_output <&2; - false; -end; +setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE"; +set -e PYENV_ACTIVATE; +set -e VIRTUAL_ENV; +set -e CONDA_DEFAULT_ENV; EOS } @test "deactivate virtualenv (fish) (no-error)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL= @@ -151,17 +132,15 @@ EOS assert_success assert_output <&2; - false; -end; +pyenv shell --unset; +set -e PYENV_ACTIVATE_SHELL; +setenv PYENV_DEACTIVATE "$PYENV_ACTIVATE"; +set -e PYENV_ACTIVATE; +set -e VIRTUAL_ENV; +set -e CONDA_DEFAULT_ENV; EOS } @test "deactivate virtualenv (fish) (with shell activation) (no-error)" { + export VIRTUAL_ENV="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE="${PYENV_ROOT}/versions/venv" export PYENV_ACTIVATE_SHELL=1 @@ -190,15 +166,12 @@ EOS assert_success assert_output <&2; - false; -end; +setenv PYENV_DEACTIVATE "$VIRTUAL_ENV"; +set -e PYENV_ACTIVATE; +set -e VIRTUAL_ENV; +set -e CONDA_DEFAULT_ENV; EOS }