mirror of
https://github.com/pyenv/pyenv.git
synced 2024-12-23 07:42:57 +00:00
e80886e9be
Useful in combination with `--bare` to list just the unique version numbers without the extra directory entries that are symlinks to other version numbers in the same directory.
104 lines
2.2 KiB
Bash
Executable file
104 lines
2.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Summary: List all Ruby versions available to rbenv
|
|
# Usage: rbenv versions [--bare] [--skip-aliases]
|
|
#
|
|
# Lists all Ruby versions found in `$RBENV_ROOT/versions/*'.
|
|
|
|
set -e
|
|
[ -n "$RBENV_DEBUG" ] && set -x
|
|
|
|
unset bare
|
|
unset skip_aliases
|
|
for arg; do
|
|
case "$arg" in
|
|
--bare ) bare=1 ;;
|
|
--skip-aliases ) skip_aliases=1 ;;
|
|
* )
|
|
rbenv-help --usage versions >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
versions_dir="${RBENV_ROOT}/versions"
|
|
|
|
if ! enable -f "${BASH_SOURCE%/*}"/../libexec/rbenv-realpath.dylib realpath 2>/dev/null; then
|
|
if [ -n "$RBENV_NATIVE_EXT" ]; then
|
|
echo "rbenv: failed to load \`realpath' builtin" >&2
|
|
exit 1
|
|
fi
|
|
|
|
READLINK=$(type -p greadlink readlink | head -1)
|
|
if [ -z "$READLINK" ]; then
|
|
echo "rbenv: cannot find readlink - are you missing GNU coreutils?" >&2
|
|
exit 1
|
|
fi
|
|
|
|
resolve_link() {
|
|
$READLINK "$1"
|
|
}
|
|
|
|
realpath() {
|
|
local cwd="$PWD"
|
|
local path="$1"
|
|
local name
|
|
|
|
while [ -n "$path" ]; do
|
|
name="${path##*/}"
|
|
[ "$name" = "$path" ] || cd "${path%/*}"
|
|
path="$(resolve_link "$name" || true)"
|
|
done
|
|
|
|
echo "${PWD}/$name"
|
|
cd "$cwd"
|
|
}
|
|
fi
|
|
|
|
if [ -d "$versions_dir" ]; then
|
|
versions_dir="$(realpath "$versions_dir")"
|
|
fi
|
|
|
|
if [ -n "$bare" ]; then
|
|
hit_prefix=""
|
|
miss_prefix=""
|
|
current_version=""
|
|
include_system=""
|
|
else
|
|
hit_prefix="* "
|
|
miss_prefix=" "
|
|
current_version="$(rbenv-version-name || true)"
|
|
include_system="1"
|
|
fi
|
|
|
|
num_versions=0
|
|
|
|
print_version() {
|
|
if [ "$1" == "$current_version" ]; then
|
|
echo "${hit_prefix}$(rbenv-version 2>/dev/null)"
|
|
else
|
|
echo "${miss_prefix}$1"
|
|
fi
|
|
num_versions=$((num_versions + 1))
|
|
}
|
|
|
|
# Include "system" in the non-bare output, if it exists
|
|
if [ -n "$include_system" ] && RBENV_VERSION=system rbenv-which ruby >/dev/null 2>&1; then
|
|
print_version system
|
|
fi
|
|
|
|
shopt -s nullglob
|
|
for path in "$versions_dir"/*; do
|
|
if [ -d "$path" ]; then
|
|
if [ -n "$skip_aliases" ] && [ -L "$path" ]; then
|
|
target="$(realpath "$path")"
|
|
[ "${target%/*}" != "$versions_dir" ] || continue
|
|
fi
|
|
print_version "${path##*/}"
|
|
fi
|
|
done
|
|
shopt -u nullglob
|
|
|
|
if [ "$num_versions" -eq 0 ] && [ -n "$include_system" ]; then
|
|
echo "Warning: no Ruby detected on the system" >&2
|
|
exit 1
|
|
fi
|