diff --git a/libexec/pyenv-version-name b/libexec/pyenv-version-name index b3866dbd..ba6801e5 100755 --- a/libexec/pyenv-version-name +++ b/libexec/pyenv-version-name @@ -1,8 +1,25 @@ #!/usr/bin/env bash # Summary: Show the current Python version +# +# -f/--force If a version doesn't exist, print it as is rather than produce an error + set -e [ -n "$PYENV_DEBUG" ] && set -x +while [[ $# -gt 0 ]] +do + case "$1" in + -f|--force) + FORCE=1 + shift + ;; + *) + break + ;; + esac +done + + if [ -z "$PYENV_VERSION" ]; then PYENV_VERSION_FILE="$(pyenv-version-file)" PYENV_VERSION="$(pyenv-version-file-read "$PYENV_VERSION_FILE" || true)" @@ -33,16 +50,20 @@ OLDIFS="$IFS" # Remove the explicit 'python-' prefix from versions like 'python-3.12'. normalised_version="${version#python-}" if version_exists "${version}" || [ "$version" = "system" ]; then - versions=("${versions[@]}" "${version}") + versions+=("${version}") elif version_exists "${normalised_version}"; then - versions=("${versions[@]}" "${normalised_version}") + versions+=("${normalised_version}") elif resolved_version="$(pyenv-latest -b "${version}")"; then - versions=("${versions[@]}" "${resolved_version}") + versions+=("${resolved_version}") elif resolved_version="$(pyenv-latest -b "${normalised_version}")"; then - versions=("${versions[@]}" "${resolved_version}") + versions+=("${resolved_version}") else - echo "pyenv: version \`$version' is not installed (set by $(pyenv-version-origin))" >&2 - any_not_installed=1 + if [[ -n $FORCE ]]; then + versions+=("${normalised_version}") + else + echo "pyenv: version \`$version' is not installed (set by $(pyenv-version-origin))" >&2 + any_not_installed=1 + fi fi done } diff --git a/test/version-name.bats b/test/version-name.bats index 720f6c86..285794e4 100644 --- a/test/version-name.bats +++ b/test/version-name.bats @@ -73,6 +73,11 @@ SH assert_failure "pyenv: version \`1.2' is not installed (set by PYENV_VERSION environment variable)" } +@test "missing version with --force" { + PYENV_VERSION=1.2 run pyenv-version-name -f + assert_success "1.2" +} + @test "one missing version (second missing)" { create_version "3.5.1" PYENV_VERSION="3.5.1:1.2" run pyenv-version-name