diff --git a/bin/pyenv-virtualenv-prefix b/bin/pyenv-virtualenv-prefix index 858ff72..d097670 100755 --- a/bin/pyenv-virtualenv-prefix +++ b/bin/pyenv-virtualenv-prefix @@ -31,31 +31,15 @@ base_prefix() { # pyvenv } VIRTUALENV_PREFIX_PATHS=() -for version_string in "${versions[@]}"; do - version="${version_string%%/*}" +for version in "${versions[@]}"; do if [ "$version" = "system" ]; then echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 exit 1 fi - PREFIX="$(pyenv-prefix "${version}")" - if [ -f "${PREFIX}/bin/activate" ]; then - # Anaconda has `activate` script nevertheless it is not a virtual environment (#65) - if [ -f "${PREFIX}/bin/conda" ]; then - if [[ "${version_string}" != "${version_string%/envs/*}" ]]; then - conda_env="${version_string##*/envs/}" - if [ -f "${PREFIX}/envs/${conda_env}/bin/conda" ]; then - VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${PREFIX}") - else - echo "pyenv-virtualenv: version \`${version_string}' is not an environment of anaconda/miniconda" 1>&2 - exit 1 - fi - else - VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${PREFIX}") - fi - else - VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)" - VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "$VIRTUALENV_PREFIX_PATH") - fi + PYENV_PREFIX_PATH="$(pyenv-prefix "${version}")" + if [ -f "${PYENV_PREFIX_PATH}/bin/activate" ]; then + VIRTUALENV_PREFIX_PATH="$(real_prefix "${version}" || base_prefix "${version}" || true)" + VIRTUALENV_PREFIX_PATHS=("${VIRTUALENV_PREFIX_PATHS[@]}" "${VIRTUALENV_PREFIX_PATH:-${PYENV_PREFIX_PATH}}") else echo "pyenv-virtualenv: version \`${version}' is not a virtualenv" 1>&2 exit 1 diff --git a/bin/pyenv-virtualenvs b/bin/pyenv-virtualenvs index 6489565..23d715d 100755 --- a/bin/pyenv-virtualenvs +++ b/bin/pyenv-virtualenvs @@ -16,7 +16,7 @@ if [ "$1" = "--bare" ]; then hit_prefix="" miss_prefix="" current_versions=() - print_origin="" + unset print_origin else hit_prefix="* " miss_prefix=" " @@ -24,42 +24,39 @@ else print_origin="1" fi -array_exists() { - local x car="$1" +exists() { + local car="$1" + local cdar shift - for x in "$@"; do - [ "${x}" = "${car}" ] && return 0 + for cdar in "$@"; do + if [ "${car}" == "${cdar}" ]; then + return 0 + fi done return 1 } print_version() { - if [ -n "${print_origin}" ]; then - local version_origin="$2" + if exists "$1" "${current_versions[@]}"; then + echo "${hit_prefix}${1}${print_origin+$2}" else - local version_origin="" - fi - if array_exists "$1" "${current_versions[@]}"; then - echo "${hit_prefix}${1}${version_origin}" - else - echo "${miss_prefix}${1}${version_origin}" + echo "${miss_prefix}${1}${print_origin+$2}" fi } -for version in $(pyenv-versions --bare); do - if [[ "${version}" != "system" ]]; then - virtualenv_prefix="$(pyenv-virtualenv-prefix "${version}" 2>/dev/null || true)" - if [ -d "${virtualenv_prefix}" ]; then - print_version "${version}" " (created from ${virtualenv_prefix})" - prefix="$(pyenv-prefix "${version}")" - if [ -f "${prefix}/bin/conda" ]; then - # envs of anaconda/miniconda - shopt -s nullglob - for conda_env in "${prefix}/envs/"*; do - print_version "${version##*/}${conda_env#${prefix}}" " (created from ${prefix})" - done - shopt -u nullglob - fi - fi +shopt -s nullglob +for path in "${PYENV_ROOT}/versions/"*; do + version="${path##*/}" + virtualenv_prefix="$(pyenv-virtualenv-prefix "${version}" 2>/dev/null || true)" + if [ -d "${virtualenv_prefix}" ]; then + print_version "${version}" " (created from ${virtualenv_prefix})" fi + for venv_path in "${path}/envs/"*; do + venv_version="${version}/envs/${venv_path##*/}" + virtualenv_prefix="$(pyenv-virtualenv-prefix "${venv_version}" 2>/dev/null || true)" + if [ -d "${virtualenv_prefix}" ]; then + print_version "${venv_version}" " (created from ${virtualenv_prefix})" + fi + done done +shopt -u nullglob diff --git a/test/conda-virtualenv-prefix.bats b/test/conda-virtualenv-prefix.bats index d7a928b..489087c 100644 --- a/test/conda-virtualenv-prefix.bats +++ b/test/conda-virtualenv-prefix.bats @@ -14,28 +14,28 @@ setup() { PYENV_VERSION="anaconda-2.3.0" run pyenv-virtualenv-prefix - unstub pyenv-version-name - unstub pyenv-prefix - assert_success assert_output <