pyenv/libexec/pyenv-version-name
Ed Morley d60d1c5cdc
Fix latest version resolution when using python- prefix (#3056)
Fixes use of version specifiers like `python-3.12`, which:
- have an explicit `python-` prefix
- are using a major version alias that has to be resolved
  to an exact version.

Also simplified the conditional for the already
working case, since it had two branches that were virtually identical.
2024-09-10 18:51:55 +03:00

55 lines
1.3 KiB
Bash
Executable file

#!/usr/bin/env bash
# Summary: Show the current Python version
set -e
[ -n "$PYENV_DEBUG" ] && set -x
if [ -z "$PYENV_VERSION" ]; then
PYENV_VERSION_FILE="$(pyenv-version-file)"
PYENV_VERSION="$(pyenv-version-file-read "$PYENV_VERSION_FILE" || true)"
fi
OLDIFS="$IFS"
IFS=$'\n' scripts=(`pyenv-hooks version-name`)
IFS="$OLDIFS"
for script in "${scripts[@]}"; do
source "$script"
done
if [ -z "$PYENV_VERSION" ] || [ "$PYENV_VERSION" = "system" ]; then
echo "system"
exit
fi
version_exists() {
local version="$1"
[ -d "${PYENV_ROOT}/versions/${version}" ]
}
versions=()
OLDIFS="$IFS"
{ IFS=:
any_not_installed=0
for version in ${PYENV_VERSION}; do
# Remove the explicit 'python-' prefix from versions like 'python-3.12'.
normalised_version="${version#python-}"
if version_exists "${normalised_version}" || [ "$version" = "system" ]; then
versions=("${versions[@]}" "${normalised_version}")
elif resolved_version="$(pyenv-latest -b "${normalised_version}")"; then
versions=("${versions[@]}" "${resolved_version}")
else
echo "pyenv: version \`$version' is not installed (set by $(pyenv-version-origin))" >&2
any_not_installed=1
fi
done
}
IFS="$OLDIFS"
OLDIFS="$IFS"
{ IFS=:
echo "${versions[*]}"
}
IFS="$OLDIFS"
if [ "$any_not_installed" = 1 ]; then
exit 1
fi