From 25395f033106744d392809cf0fdd5a2086ddd387 Mon Sep 17 00:00:00 2001 From: "Yamashita, Yuu" Date: Sun, 19 Jul 2015 03:38:48 +0900 Subject: [PATCH] activate: look for a conda environment if given name is not a pyenv's prefix --- bin/pyenv-sh-activate | 17 +++++++++++++---- test/activate.bats | 13 +++++++++++++ test/init.bats | 14 ++++++++------ 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/bin/pyenv-sh-activate b/bin/pyenv-sh-activate index ad1cba5..046d030 100755 --- a/bin/pyenv-sh-activate +++ b/bin/pyenv-sh-activate @@ -62,10 +62,19 @@ if [ "${#versions[@]}" -gt 1 ]; then exit 1 fi -if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then - [ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2 - echo "false" - exit 1 +if pyenv-prefix "${versions}" 1>/dev/null 2>&1; then + if ! pyenv-virtualenv-prefix "${versions}" 1>/dev/null 2>&1; then + [ -n "$NOERROR" ] || echo "pyenv-virtualenv: version \`${versions}' is not a virtualenv" 1>&2 + echo "false" + exit 1 + fi +else + versions="$(pyenv-version-name)/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" + exit 1 + fi fi shell="${PYENV_SHELL:-${SHELL##*/}}" diff --git a/test/activate.bats b/test/activate.bats index 897f189..8823749 100644 --- a/test/activate.bats +++ b/test/activate.bats @@ -13,6 +13,7 @@ setup() { stub pyenv-version-name "echo venv" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" + stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate @@ -34,6 +35,7 @@ EOS stub pyenv-version-name "echo venv" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" + stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate --verbose @@ -56,6 +58,7 @@ EOS stub pyenv-version-name "echo venv" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" + stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate @@ -84,6 +87,7 @@ EOS stub pyenv-version-name "echo venv" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" + stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate @@ -105,6 +109,7 @@ EOS stub pyenv-version-name "echo venv" stub pyenv-virtualenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" + stub pyenv-prefix "venv : echo \"${PYENV_ROOT}/versions/venv\"" PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate @@ -132,6 +137,7 @@ EOS stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" + stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate "venv27" @@ -153,6 +159,7 @@ EOS stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" + stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" PYENV_SHELL="bash" PYENV_VERSION="venv" run pyenv-sh-activate "venv27" @@ -179,6 +186,7 @@ EOS stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" + stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27" @@ -200,6 +208,7 @@ EOS stub pyenv-virtualenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" + stub pyenv-prefix "venv27 : echo \"${PYENV_ROOT}/versions/venv27\"" PYENV_SHELL="fish" PYENV_VERSION="venv" run pyenv-sh-activate "venv27" @@ -232,10 +241,12 @@ EOS @test "should fail if the version is not a virtualenv" { stub pyenv-virtualenv-prefix "3.3.3 : false" + stub pyenv-prefix "3.3.3 : echo \"${PYENV_ROOT}/versions/3.3.3\"" run pyenv-sh-activate "3.3.3" unstub pyenv-virtualenv-prefix + unstub pyenv-prefix assert_failure assert_output < ${BATS_TEST_DIRNAME}/script.sh - chmod +x ${BATS_TEST_DIRNAME}/script.sh - run ${BATS_TEST_DIRNAME}/script.sh + printf '#!/bin/sh\necho "$(pyenv-virtualenv-init -)"' > "${TMP}/script.sh" + chmod +x ${TMP}/script.sh + run ${TMP}/script.sh assert_success assert_output_contains_not ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";' + rm -f "${TMP}/script.sh" } @test "detect parent shell from script (bash)" { unset PYENV_SHELL - printf '#!/bin/bash\necho "$(pyenv-virtualenv-init -)"' > ${BATS_TEST_DIRNAME}/script.sh - chmod +x ${BATS_TEST_DIRNAME}/script.sh - run ${BATS_TEST_DIRNAME}/script.sh + printf '#!/bin/bash\necho "$(pyenv-virtualenv-init -)"' > "${TMP}/script.sh" + chmod +x ${TMP}/script.sh + run ${TMP}/script.sh assert_success assert_output_contains ' PROMPT_COMMAND="_pyenv_virtualenv_hook;$PROMPT_COMMAND";' + rm -f "${TMP}/script.sh" } @test "sh-compatible instructions" {