Merge branch 'envs-riwyo-anyenv-workaround' (fixes #130)

This commit is contained in:
Yamashita, Yuu
2015-12-04 02:50:27 +00:00
8 changed files with 99 additions and 13 deletions

View File

@@ -9,6 +9,10 @@
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "${PYENV_ROOT}" ]; then
PYENV_ROOT="$(pyenv-root)"
fi
unset FORCE
unset QUIET
unset VERBOSE
@@ -48,8 +52,8 @@ fi
shell="$(basename "${PYENV_SHELL:-$SHELL}")"
prefix="${VIRTUAL_ENV}"
if [[ "${prefix}" != "${prefix%/envs/*}" ]]; then
venv="$(basename "${prefix%/envs/*}")/envs/${prefix##*/}"
if [[ "${prefix%/*/envs/*}" == "${PYENV_ROOT}/versions" ]]; then
venv="${prefix#${PYENV_ROOT}/versions/}"
else
venv="${prefix##*/}"
fi

View File

@@ -11,13 +11,13 @@
PYENV_VIRTUALENV_VERSION="20151103"
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "${PYENV_ROOT}" ]; then
PYENV_ROOT="$(pyenv-root)"
fi
set -e
[ -n "$PYENV_DEBUG" ] && set -x
# Provide pyenv completions
if [ "$1" = "--complete" ]; then
exec pyenv-versions --bare
@@ -328,11 +328,6 @@ if [ ! -d "${PREFIX}" ]; then
exit 1
fi
if [[ "${PREFIX}" != "${PREFIX%/envs/*}" ]]; then
echo "pyenv-virtualenv: nested virtualenv is not supported." 1>&2
exit 1
fi
if [ -z "$TMPDIR" ]; then
TMP="/tmp"
else
@@ -343,11 +338,16 @@ fi
if [[ "${VERSION_NAME%/envs/*}" == "system" ]]; then
VIRTUALENV_NAME="${VIRTUALENV_NAME##*/}"
else
VIRTUALENV_NAME="${VERSION_NAME}/envs/${VIRTUALENV_NAME##*/}"
VIRTUALENV_PREFIX="$(pyenv-virtualenv-prefix 2>/dev/null || true)"
if [[ "${VIRTUALENV_PREFIX%/*}" == "${PYENV_ROOT}/versions" ]]; then
VIRTUALENV_NAME="${VIRTUALENV_PREFIX#${PYENV_ROOT}/versions/}/envs/${VIRTUALENV_NAME##*/}"
else
VIRTUALENV_NAME="${VERSION_NAME}/envs/${VIRTUALENV_NAME##*/}"
fi
fi
VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}"
if [[ "${VIRTUALENV_PATH}" != "${VIRTUALENV_PATH%/envs/*}" ]]; then
if [[ "${VIRTUALENV_PATH/*/envs/*}" != "${PYENV_ROOT}/versions" ]]; then
COMPAT_VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME##*/}"
fi

View File

@@ -13,6 +13,10 @@
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "${PYENV_ROOT}" ]; then
PYENV_ROOT="$(pyenv-root)"
fi
# Provide pyenv completions
if [ "$1" = "--complete" ]; then
exec pyenv virtualenvs --bare
@@ -63,7 +67,7 @@ if [[ "${DEFINITION}" != "${DEFINITION%/envs/*}" ]]; then
else
if [ -L "${COMPAT_PREFIX}" ]; then
PREFIX="$(resolve_link "${COMPAT_PREFIX}" 2>/dev/null || true)"
if [[ "${PREFIX}" == "${PREFIX%/envs/*}" ]]; then
if [[ "${PREFIX%/*/envs/*}" != "${PYENV_ROOT}/versions" ]]; then
echo "pyenv-virtualenv: \`${COMPAT_PREFIX}' is a symlink for unknown location." 1>&2
exit 1
fi

View File

@@ -25,6 +25,7 @@ unstub_pyenv() {
setup_conda "${PYENV_VERSION}"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "conda * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
@@ -37,6 +38,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "miniconda3-3.16.0"
}
@@ -46,6 +48,7 @@ OUT
setup_conda "${PYENV_VERSION}"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "conda * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
@@ -58,6 +61,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "miniconda3-3.16.0"
}
@@ -67,6 +71,7 @@ OUT
setup_conda "${PYENV_VERSION}"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-exec "conda * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
@@ -79,6 +84,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "miniconda3-3.16.0"
}

46
test/envs.bats Normal file
View File

@@ -0,0 +1,46 @@
#!/usr/bin/env bats
load test_helper
setup() {
export PYENV_ROOT="${TMP}/envs/pyenv"
}
stub_pyenv() {
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-hooks "virtualenv : echo"
stub pyenv-rehash " : echo rehashed"
}
unstub_pyenv() {
unstub pyenv-prefix
unstub pyenv-hooks
unstub pyenv-rehash
}
@test "path should be handled properly even if there is 'envs' in PYENV_ROOT" {
export PYENV_VERSION="3.4.1"
setup_pyvenv "3.4.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo '${PYENV_VERSION}'"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pyvenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.4.1/envs/venv/bin"
stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.4.1/envs/venv/bin/pip"
run pyenv-virtualenv venv
assert_success
assert_output <<OUT
PYENV_VERSION=3.4.1 pyvenv ${PYENV_ROOT}/versions/3.4.1/envs/venv
PYENV_VERSION=3.4.1/envs/venv python -s -m ensurepip
rehashed
OUT
assert [ -e "${PYENV_ROOT}/versions/3.4.1/envs/venv/bin/pip" ]
unstub_pyenv
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "3.4.1"
}

View File

@@ -25,6 +25,7 @@ unstub_pyenv() {
setup_pyvenv "3.4.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pyvenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.4.1/envs/venv/bin"
stub pyenv-exec "python -s -m ensurepip : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.4.1/envs/venv/bin/pip"
@@ -39,6 +40,7 @@ OUT
assert [ -e "${PYENV_ROOT}/versions/3.4.1/envs/venv/bin/pip" ]
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "3.4.1"
}
@@ -48,6 +50,7 @@ OUT
setup_pyvenv "3.3.5"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pyvenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";mkdir -p \${PYENV_ROOT}/versions/3.3.5/envs/venv/bin"
stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\";touch \${PYENV_ROOT}/versions/3.3.5/envs/venv/bin/pip"
@@ -65,6 +68,7 @@ OUT
assert [ -e "${PYENV_ROOT}/versions/3.3.5/envs/venv/bin/pip" ]
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "3.3.5"
}

View File

@@ -25,6 +25,7 @@ unstub_pyenv() {
setup_pyvenv "3.4.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pyvenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
@@ -37,6 +38,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "3.4.1"
}
@@ -47,6 +49,7 @@ OUT
create_executable "3.4.1" "virtualenv"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
@@ -59,6 +62,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "3.4.1"
}
@@ -68,6 +72,7 @@ OUT
setup_version "3.2.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
@@ -85,6 +90,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
teardown_version "3.2.1"
@@ -95,6 +101,7 @@ OUT
setup_pyvenv "3.4.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
@@ -109,6 +116,7 @@ OUT
assert_success
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "3.4.1"
}
@@ -118,6 +126,7 @@ OUT
setup_pyvenv "3.4.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pip install virtualenv : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : true"
@@ -132,6 +141,7 @@ OUT
assert_success
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
teardown_pyvenv "3.4.1"
}
@@ -141,6 +151,7 @@ OUT
setup_version "3.2.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-prefix " : echo '${PYENV_ROOT}/versions/${PYENV_VERSION}'"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "pip install virtualenv : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "virtualenv * : echo PIP_REQUIRE_VENV=\${PIP_REQUIRE_VENV} PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
@@ -158,6 +169,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
teardown_version "3.2.1"

View File

@@ -25,6 +25,7 @@ unstub_pyenv() {
@test "create virtualenv from given version" {
export PYENV_VERSION="3.2.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true"
@@ -40,6 +41,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
}
@@ -48,6 +50,7 @@ OUT
export PYENV_VERSION="3.2.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true"
@@ -64,6 +67,7 @@ OUT
unstub_pyenv
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
}
@@ -72,6 +76,7 @@ OUT
export PYENV_VERSION="3.2.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true"
@@ -88,6 +93,7 @@ OUT
unstub_pyenv
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
}
@@ -96,6 +102,7 @@ OUT
export PYENV_VERSION="3.2.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-version-name "echo \${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true"
@@ -112,6 +119,7 @@ OUT
unstub_pyenv
unstub pyenv-version-name
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
}
@@ -155,6 +163,7 @@ OUT
@test "slash allowed if it is the long name of the virtualenv" {
export PYENV_VERSION="3.2.1"
stub_pyenv "${PYENV_VERSION}"
stub pyenv-virtualenv-prefix " : false"
stub pyenv-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
stub pyenv-exec "python -s -m ensurepip : false"
stub pyenv-exec "python -s */get-pip.py : true"
@@ -170,6 +179,7 @@ rehashed
OUT
unstub_pyenv
unstub pyenv-virtualenv-prefix
unstub pyenv-exec
unstub curl
}