mirror of
https://github.com/pyenv/pyenv.git
synced 2024-11-21 20:47:00 -05:00
Add version aliases
An older plugin, pyenv-alias, allowed naming the desired python version with an alias, which allowed installing multiple versions of the same python version. This is particularly useful on Apple silicon if you want to install both arm and x86_64 versions of python. Unfortunately, the pyenv-alias plugin broke when the code was updated to allow specifying multiple versions of Python to install at once, and the current code is not amenable to modifying the version in place with another plugin.
This commit is contained in:
parent
aabaa89243
commit
b4b8f71dde
1 changed files with 39 additions and 3 deletions
|
@ -123,6 +123,36 @@ DEFINITIONS=("${ARGUMENTS[@]}")
|
||||||
[[ "${#DEFINITIONS[*]}" -eq 0 ]] && DEFINITIONS=($(pyenv-local 2>/dev/null || true))
|
[[ "${#DEFINITIONS[*]}" -eq 0 ]] && DEFINITIONS=($(pyenv-local 2>/dev/null || true))
|
||||||
[[ "${#DEFINITIONS[*]}" -eq 0 ]] && usage 1 >&2
|
[[ "${#DEFINITIONS[*]}" -eq 0 ]] && usage 1 >&2
|
||||||
|
|
||||||
|
is_array() {
|
||||||
|
# no argument passed
|
||||||
|
[[ $# -ne 1 ]] && echo 'Supply a variable name as an argument'>&2 && return 2
|
||||||
|
local var=$1
|
||||||
|
# use a variable to avoid having to escape spaces
|
||||||
|
local regex="^declare -[aA] ${var}(=|$)"
|
||||||
|
[[ $(declare -p "$var" 2> /dev/null) =~ $regex ]] && return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# If VERSION_ALIAS exists, create a 1-element array, VERSION_ALIASES, from VERSION_ALIAS
|
||||||
|
if [ -n "${VERSION_ALIAS}" ]; then
|
||||||
|
# Make sure VERSION_ALIASES doesn't already exist
|
||||||
|
# If it does, print an error about defining only one of VERSION_ALIAS or VERSION_ALIASES
|
||||||
|
if is_array VERSION_ALIASES; then
|
||||||
|
echo "Define only one of VERSION_ALIAS or VERSION_ALIASES" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION_ALIASES=("${VERSION_ALIAS}")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If VERSION_ALIASES exists, make sure it has the same number of elements as DEFINITIONS
|
||||||
|
|
||||||
|
if is_array VERSION_ALIASES; then
|
||||||
|
if [[ "${#VERSION_ALIASES[@]}" -ne "${#DEFINITIONS[@]}" ]]; then
|
||||||
|
echo "VERSION_ALIASES must have the same number of elements as DEFINITIONS" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Define `before_install` and `after_install` functions that allow
|
# Define `before_install` and `after_install` functions that allow
|
||||||
# plugin hooks to register a string of code for execution before or
|
# plugin hooks to register a string of code for execution before or
|
||||||
# after the installation process.
|
# after the installation process.
|
||||||
|
@ -152,7 +182,12 @@ IFS="$OLDIFS"
|
||||||
for script in "${scripts[@]}"; do source "$script"; done
|
for script in "${scripts[@]}"; do source "$script"; done
|
||||||
|
|
||||||
COMBINED_STATUS=0
|
COMBINED_STATUS=0
|
||||||
for DEFINITION in "${DEFINITIONS[@]}"; do
|
for i in "${!DEFINITIONS[@]}"; do
|
||||||
|
DEFINITION="${DEFINITIONS[$i]}"
|
||||||
|
if is_array VERSION_ALIASES; then
|
||||||
|
VERSION_ALIAS="${VERSION_ALIASES[$i]}"
|
||||||
|
fi
|
||||||
|
|
||||||
STATUS=0
|
STATUS=0
|
||||||
|
|
||||||
# Try to resolve a prefix if user indeed gave a prefix.
|
# Try to resolve a prefix if user indeed gave a prefix.
|
||||||
|
@ -160,8 +195,9 @@ for DEFINITION in "${DEFINITIONS[@]}"; do
|
||||||
# and hooks also see the resolved name
|
# and hooks also see the resolved name
|
||||||
DEFINITION="$(pyenv-latest -q -k "$DEFINITION" || echo "$DEFINITION")"
|
DEFINITION="$(pyenv-latest -q -k "$DEFINITION" || echo "$DEFINITION")"
|
||||||
|
|
||||||
# Set VERSION_NAME from $DEFINITION. Then compute the installation prefix.
|
# Set VERSION_NAME from $VERSION_ALIAS if it is defined, else $DEFINITION.
|
||||||
VERSION_NAME="${DEFINITION##*/}"
|
# Then compute the installation prefix.
|
||||||
|
VERSION_NAME="${VERSION_ALIAS:-$DEFINITION##*/}"
|
||||||
[ -n "$DEBUG" ] && VERSION_NAME="${VERSION_NAME}-debug"
|
[ -n "$DEBUG" ] && VERSION_NAME="${VERSION_NAME}-debug"
|
||||||
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
|
PREFIX="${PYENV_ROOT}/versions/${VERSION_NAME}"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue