mirror of
https://github.com/pyenv/pyenv-virtualenv.git
synced 2025-11-08 11:33:55 -05:00
Merge branch 'slashes'
This commit is contained in:
@@ -261,12 +261,16 @@ if [[ "${#ARGUMENTS[@]}" == 0 ]]; then
|
||||
exit 1
|
||||
elif [[ "${#ARGUMENTS[@]}" == 1 ]]; then
|
||||
# If only one argument given, use current version as source version
|
||||
VERSION_NAME="$(pyenv-version-name)"
|
||||
OLDIFS="${IFS}"
|
||||
IFS=:
|
||||
VERSION_NAMES=($(pyenv-version-name))
|
||||
IFS="${OLDIFS}"
|
||||
VERSION_NAME="${VERSION_NAMES}"
|
||||
VIRTUALENV_NAME="${ARGUMENTS[0]}"
|
||||
else
|
||||
# Otherwise, use former as source version, and latter as virtualenv version
|
||||
VERSION_NAME="${ARGUMENTS[0]}"
|
||||
VIRTUALENV_NAME="${ARGUMENTS[1]##*/}"
|
||||
VIRTUALENV_NAME="${ARGUMENTS[1]}"
|
||||
fi
|
||||
|
||||
if [ -z "${VERSION_NAME}" ] || [ -z "${VIRTUALENV_NAME}" ]; then
|
||||
@@ -283,6 +287,11 @@ if [ "$VIRTUALENV_NAME" != "${VIRTUALENV_NAME%[[:space:]]*}" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "${VIRTUALENV_NAME}" != "${VIRTUALENV_NAME%/*}" ] && [[ "${VIRTUALENV_NAME}" != "${VERSION_NAME%%/*}/envs/${VIRTUALENV_NAME##*/}" ]] ; then
|
||||
echo "pyenv-virtualenv: no slash allowed in virtualenv name." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set VERSION_NAME as default version in this script
|
||||
export PYENV_VERSION="${VERSION_NAME}"
|
||||
|
||||
@@ -305,14 +314,14 @@ fi
|
||||
|
||||
# Not create `system/envs` directory even if source version is `system`
|
||||
if [[ "${VERSION_NAME%/envs/*}" == "system" ]]; then
|
||||
VERSION_NAME="${VIRTUALENV_NAME}"
|
||||
VIRTUALENV_NAME="${VIRTUALENV_NAME##*/}"
|
||||
else
|
||||
VERSION_NAME="${VERSION_NAME}/envs/${VIRTUALENV_NAME}"
|
||||
VIRTUALENV_NAME="${VERSION_NAME}/envs/${VIRTUALENV_NAME##*/}"
|
||||
fi
|
||||
|
||||
VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VERSION_NAME}"
|
||||
VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}"
|
||||
if [[ "${VIRTUALENV_PATH}" != "${VIRTUALENV_PATH%/envs/*}" ]]; then
|
||||
COMPAT_VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME}"
|
||||
COMPAT_VIRTUALENV_PATH="${PYENV_ROOT}/versions/${VIRTUALENV_NAME##*/}"
|
||||
fi
|
||||
|
||||
if [ -n "${COMPAT_VIRTUALENV_PATH}" ]; then
|
||||
@@ -427,7 +436,7 @@ if [ -d "${VIRTUALENV_PATH}/bin" ]; then
|
||||
fi
|
||||
|
||||
if [ -n "$UPGRADE" ]; then
|
||||
PYENV_VERSION="${VERSION_NAME}" prepare_requirements
|
||||
PYENV_VERSION="${VIRTUALENV_NAME}" prepare_requirements
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -455,10 +464,10 @@ if [ -d "${VIRTUALENV_PATH}" ] && [ -n "${COMPAT_VIRTUALENV_PATH}" ]; then
|
||||
fi
|
||||
|
||||
## Install setuptools and pip.
|
||||
PYENV_VERSION="${VERSION_NAME}" build_package_ensurepip
|
||||
PYENV_VERSION="${VIRTUALENV_NAME}" build_package_ensurepip
|
||||
|
||||
## Migrate previously installed packages from requirements.txt.
|
||||
PYENV_VERSION="${VERSION_NAME}" install_requirements || true
|
||||
PYENV_VERSION="${VIRTUALENV_NAME}" install_requirements || true
|
||||
|
||||
# Execute `after_virtualenv` hooks.
|
||||
for hook in "${after_hooks[@]}"; do eval "$hook"; done
|
||||
|
||||
@@ -144,3 +144,34 @@ OUT
|
||||
pyenv-virtualenv: \`system' is not allowed as virtualenv name.
|
||||
OUT
|
||||
}
|
||||
|
||||
@test "no slash allowed in virtualenv name" {
|
||||
run pyenv-virtualenv "3.2.1" "foo/bar"
|
||||
|
||||
assert_failure
|
||||
assert_output <<OUT
|
||||
pyenv-virtualenv: no slash allowed in virtualenv name.
|
||||
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-exec "virtualenv * : echo PYENV_VERSION=\${PYENV_VERSION} \"\$@\""
|
||||
stub pyenv-exec "python -s -m ensurepip : false"
|
||||
stub pyenv-exec "python -s */get-pip.py : true"
|
||||
stub curl true
|
||||
|
||||
run pyenv-virtualenv "3.2.1" "3.2.1/envs/foo"
|
||||
|
||||
assert_success
|
||||
assert_output <<OUT
|
||||
PYENV_VERSION=3.2.1 virtualenv ${PYENV_ROOT}/versions/3.2.1/envs/foo
|
||||
Installing pip from https://bootstrap.pypa.io/get-pip.py...
|
||||
rehashed
|
||||
OUT
|
||||
|
||||
unstub_pyenv
|
||||
unstub pyenv-exec
|
||||
unstub curl
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user