#!/usr/bin/env bash
rvm_base_except="selector"
source "$rvm_scripts_path/base"
source "$rvm_scripts_path/functions/list"
__rvm_list_remote()
{
\typeset version
rubies=($(
__list_remote_all |
__rvm_sed -e 's/.tar.*$//' -e 's/jruby-bin-/jruby-/' |
__rvm_awk -F/ '{print $NF}' |
\command \sort -u
))
if
(( ${#rubies[@]} == 0 ))
then
rvm_error "
# No remote rubies available
# Check 'rvm list known' for what can be installed.
"
return 1
fi
printf "%b" "\n# Remote rubies available:\n\n"
for version in "${rubies[@]}"
do
if [[ -r "$rvm_rubies_path/$version/bin/ruby" ]]
then rvm_log " * $version"
else rvm_log " $version"
fi
done
rvm_log "\n# * - installed already\n"
rvm_log "# To download and install: rvm install {name} --binary
\n\n"
}
__rvm_list_detect_arch()
{
if
[[ -d "$rvm_gems_path/${__version}" && ! -d "$rvm_rubies_path/${__version%%@*}" ]]
then
__arch="ruby not installed"
elif
[[ ! -x "$rvm_rubies_path/${__version%%@*}/bin/ruby" ]]
then
__arch="missing bin/ruby"
elif
[[ -f "$rvm_rubies_path/${__version%%@*}/config" ]]
then
__arch="$(
__rvm_awk -F= "\$1==\"target_cpu\" {gsub(/[\"']/,\"\"); print \$2}" < \
$rvm_rubies_path/${__version%%@*}/config
)" #'
else
__arch="$( __rvm_ruby_config_get "target_cpu" "$rvm_rubies_path/${__version%%@*}/bin/ruby" )"
fi
if
[[ -z "${__arch}" ]]
then
case "${__version}" in
(maglev-*|macruby-*) __arch="x86_64" ;;
(mruby|mruby-*) __arch="x86_64" ;;
(*) __arch="broken" ;;
esac
fi
}
__rvm_list_show_version_with_arch()
{
\typeset __arch __prefix __version __suffix
__prefix="$1"
__version="$2"
__suffix="${3:-}"
__rvm_list_detect_arch
if rvm_pretty_print stdout
then __version="${rvm_notify_clr:-}${__version}${rvm_reset_clr:-}"
fi
printf "%b" "${__prefix}${__version} [ ${__arch} ]${__suffix}"
}
__rvm_list_gemsets()
{
\typeset all_rubies version versions ruby_version_name current_ruby selected system_ruby system_version string binary prefix
if [[ "${1:-""}" == "strings" ]]
then
__rvm_list_gemset_strings
return 0
fi
current_ruby="$(__rvm_env_string)"
all_rubies="$(__rvm_list_strings | sort)"
printf "%b" "\nrvm gemsets\n"
versions=($(
__rvm_cd "${rvm_gems_path:-"$rvm_path/gems"}/"
__rvm_find . -maxdepth 1 -mindepth 1 -print 2> /dev/null |
__rvm_awk '/[a-z]*-.*/ {print $NF}' | sort
))
for version in "${versions[@]//.\/}"
do
ruby_version_name="$(echo "$version" | __rvm_awk -F"${rvm_gemset_separator:-"@"}" '{print $1}')"
if [[ "$all_rubies" != *"$ruby_version_name"* ]]
then continue
fi
if [[ "$version" == "$current_ruby" ]]
then prefix="=> "
else prefix=" "
fi
__rvm_list_show_version_with_arch "\n${prefix}" "$version"
done
if [[ -f "$rvm_path/config/default" && -s "$rvm_path/config/default" ]]
then
version=$(
__rvm_grep 'MY_RUBY_HOME' "$rvm_path/config/default" |
\command \head -1 | __rvm_awk -F"'" '{print $2}' | __rvm_xargs basename --
)
if
[[ -n "$version" ]]
then
printf "%b" "\nDefault Ruby (for new shells)\n"
__rvm_list_show_version_with_arch "\n " "$version" "\n"
fi
fi
printf "%b" "\n\n"
return 0
}
__rvm_list_default()
{
\typeset version string
if
[[ "$1" == "string" ]]
then
"$rvm_scripts_path/alias" show default 2>/dev/null |
__rvm_awk -F"${rvm_gemset_separator:-"@"}" '{print $1}' |
__rvm_xargs basename --
else
if
[[ -L "$rvm_rubies_path/default" ]]
then
version=$(
"$rvm_scripts_path/alias" show default 2>/dev/null |
__rvm_awk -F"${rvm_gemset_separator:-"@"}" '{print $1}' |
__rvm_xargs basename --
)
if
[[ -n "$version" ]]
then
printf "%b" "\nDefault Ruby (for new shells)\n"
__rvm_list_show_version_with_arch "\n " "$version" "\n"
fi
fi
fi
printf "%b" "\n"
return 0
}
__rvm_list_ruby_svn_tags()
{
\typeset -a tags
\typeset prefix tag
__rvm_read_lines tags <(
svn list http://svn.ruby-lang.org/repos/ruby/tags/ | __rvm_awk '/^v1_[8|9]/{print}'
)
for tag in "${tags[@]}"
do
prefix="$(
echo ${tag/\//} |
__rvm_sed 's#^v1_##' |
__rvm_awk -F'_' '{print "(ruby-)1."$1"."$2}' |
__rvm_sed 's#p$##'
)"
echo "${prefix}-t${tag/\//}"
done
return 0
}
__rvm_list_known()
{
if [[ "${1:-""}" == "strings" ]]
then
__rvm_list_known_strings
return 0
fi
if [[ -t 0 ]]
then
__rvm_pager_or_cat_v "$rvm_path/config/known"
else
\command \cat "$rvm_path/config/known"
fi
return $?
}
__rvm_list_rubies()
{
\typeset current_ruby rubies version selected system_ruby system_version \
default_ruby string binary prefix
if [[ "${1:-""}" == "strings" ]]
then
__rvm_list_strings
return 0
fi
current_ruby="$( __rvm_env_string )"
current_ruby="${current_ruby%${rvm_gemset_separator:-"@"}*}"
default_ruby="$( "$rvm_scripts_path/alias" show default 2>/dev/null )"
default_ruby="${default_ruby%${rvm_gemset_separator:-"@"}*}"
rubies=($(
__rvm_cd "$rvm_rubies_path/"
__rvm_find . -maxdepth 1 -mindepth 1 -type d 2> /dev/null | sort
))
for version in "${rubies[@]//.\/}"
do
if
[[ "$version" == "$current_ruby" && "$version" == "$default_ruby" ]]
then
prefix="=* "
elif
[[ "$version" == "$current_ruby" ]]
then
prefix="=> "
elif
[[ "$version" == "$default_ruby" ]]
then
prefix=" * "
else
prefix=" "
fi
__rvm_list_show_version_with_arch "${prefix}" "$version" "\n"
done
if (( ${#rubies[@]} == 0 ))
then
printf "%b" "
# No rvm rubies installed yet. Try 'rvm help install'.
"
else
if [[ -z "${default_ruby}" ]]
then
printf "%b" "
# Default ruby not set. Try 'rvm alias create default '.
"
fi
printf "%b" "
# => - current
# =* - current && default
# * - default
"
fi
printf "%b" "\n"
return 0
}
# List all rvm installed rubies, default ruby and system ruby.
# Display the rubies, indicate their architecture and indicate which is currently used.
# This is not meant to be used with scripting. This is for interactive mode usage only.
__rvm_list()
{
\typeset action="${1:-rubies}"
shift
case "${action}" in
-r|--remote|remote)
__rvm_list_remote "$@"
;;
known|known_strings|gemsets|default|rubies|strings|ruby_svn_tags)
__rvm_list_${action} "$@"
;;
help)
rvm_help list "${action}" "$@"
;;
*)
rvm_error_help "Unknown action '$action' for 'rvm list'." list "${action}" "$@"
return 1
;;
esac
}
__rvm_list "$@"