diff --git a/libexec/pyenv-versions b/libexec/pyenv-versions index fc309a03..285d7a7f 100755 --- a/libexec/pyenv-versions +++ b/libexec/pyenv-versions @@ -1,23 +1,24 @@ #!/usr/bin/env bash # Summary: List all Python versions available to pyenv -# Usage: pyenv versions [--bare] [--skip-aliases] +# Usage: pyenv versions [--bare] [--skip-aliases] [--skip-envs] # # Lists all Python versions found in `$PYENV_ROOT/versions/*'. set -e [ -n "$PYENV_DEBUG" ] && set -x -unset bare -unset skip_aliases +unset bare skip_aliases skip_envs # Provide pyenv completions for arg; do case "$arg" in --complete ) echo --bare echo --skip-aliases + echo --skip-envs exit ;; --bare ) bare=1 ;; --skip-aliases ) skip_aliases=1 ;; + --skip-envs ) skip_envs=1 ;; * ) pyenv-help --usage versions >&2 exit 1 @@ -109,7 +110,7 @@ print_version() { if [[ -z "$bare" && -L "$path" ]]; then # Only resolve the link itself for printing, do not resolve further. # Doing otherwise would misinform the user of what the link contains. - version_repr="$version --> $(resolve_link "$version")" + version_repr="$version --> $(resolve_link "$path")" else version_repr="$version" fi @@ -152,12 +153,14 @@ for path in "${versions_dir_entries[@]}"; do [ "${target%/*/envs/*}" == "$versions_dir" ] && continue fi print_version "${path##*/}" "$path" - # virtual environments created by anaconda/miniconda - for env_path in "${path}/envs/"*; do - if [ -d "${env_path}" ]; then - print_version "${env_path#${PYENV_ROOT}/versions/}" "${env_path}" - fi - done + # virtual environments created by anaconda/miniconda/pyenv-virtualenv + if [[ -z $skip_envs ]]; then + for env_path in "${path}/envs/"*; do + if [ -d "${env_path}" ]; then + print_version "${env_path#${PYENV_ROOT}/versions/}" "${env_path}" + fi + done + fi fi done shopt -u dotglob nullglob diff --git a/test/versions.bats b/test/versions.bats index 36db4967..ce101d30 100644 --- a/test/versions.bats +++ b/test/versions.bats @@ -66,18 +66,38 @@ OUT assert_success "3.3" } -@test "multiple versions" { +@test "multiple versions and envs" { stub_system_python create_version "2.7.6" - create_version "3.3.3" create_version "3.4.0" + create_version "3.4.0/envs/foo" + create_version "3.4.0/envs/bar" + create_version "3.5.2" run pyenv-versions assert_success assert_output <