#!/usr/bin/env bash
__rvm_env_string()
{
\typeset _string
_string="${GEM_HOME:-}"
_string="${_string##*/}"
printf "%b" "${_string:-system}\n"
}
__rvm_expand_ruby_string()
{
\typeset string current_ruby
string="$1"
case "${string:-all}" in
all)
__rvm_list_strings | \command \tr ' ' "\n"
;;
all-gemsets)
__rvm_list_gemset_strings
;;
default-with-rvmrc|rvmrc)
"$rvm_scripts_path/tools" path-identifier "$PWD"
;;
all-rubies|rubies)
__rvm_list_strings
;;
current-ruby|gemsets)
current_ruby="$(__rvm_env_string)"
current_ruby="${current_ruby%@*}"
rvm_silence_logging=1 "$rvm_scripts_path/gemsets" list strings \
| __rvm_sed "s/ (default)//; s/^/$current_ruby${rvm_gemset_separator:-@}/ ; s/@default// ;"
;;
current)
__rvm_env_string
;;
aliases)
__rvm_awk -F= '{print $string}' < "$rvm_path/config/alias"
;;
*)
__rvm_ruby_strings_exist $( echo "$string" | \command \tr "," "\n" | __rvm_strip )
;;
esac
}
__rvm_become()
{
# set rvm_rvmrc_flag=0 to not create .rvmrc in random places of code
\typeset string rvm_rvmrc_flag
string="$1"
rvm_rvmrc_flag=0
[[ -n "$string" ]] && {
rvm_ruby_string="$string"
rvm_gemset_name=""
}
__rvm_use >/dev/null || return $?
rvm_ruby_string="${rvm_ruby_string}${rvm_gemset_name:+${rvm_gemset_separator:-'@'}}${rvm_gemset_name:-}"
return 0
}
__rvm_ensure_has_environment_files()
{
\typeset file_name variable value environment_id __path __gem_home
__gem_home="${rvm_ruby_gem_home}"
file_name="${__gem_home}/environment"
__path=""
if [[ "${__gem_home##*@}" != "global" ]]
then __path+="${__gem_home}/bin:"
fi
__path+="${rvm_ruby_global_gems_path}/bin:${rvm_ruby_home}/bin"
\command \rm -f "$file_name"
\command \mkdir -p "${__gem_home}/wrappers" "${rvm_environments_path}" "${rvm_wrappers_path}"
printf "%b" "export PATH=\"${__path}:\$PATH\"\n" > "$file_name"
for variable in GEM_HOME GEM_PATH MY_RUBY_HOME IRBRC MAGLEV_HOME RBXOPT RUBY_VERSION
do
eval "value=\${${variable}:-""}"
if [[ -n "$value" ]]
then printf "export %b='%b'\n" "${variable}" "${value}" >> "$file_name"
else printf "unset %b\n" "${variable}" >> "$file_name"
fi
done
environment_id="${__gem_home##*/}"
[[ -L "${rvm_environments_path}/${environment_id}" ]] ||
{
if [[ -f "${rvm_environments_path}/${environment_id}" ]]
then rm -rf "${rvm_environments_path}/${environment_id}"
fi
ln -nfs "${__gem_home}/environment" "${rvm_environments_path}/${environment_id}"
}
ln -nfs "${__gem_home}/wrappers" "$rvm_wrappers_path/${environment_id}"
return 0
}
# Runs a command in a given env.
__rvm_with()
(
unset rvm_rvmrc_flag
export rvm_create_flag=1
export rvm_delete_flag=0
export rvm_internal_use_flag=1
export rvm_use_flag=0
__rvm_use "$1" || return $?
shift
"$@" || return $?
)
__variables_definition()
{
\typeset -a __variables_list __array_list
\typeset __method
__method="$1"
# NOTE: Removing rvm_bin_path here causes system wide installations to generate
# a corrupt PATH, breaking the RVM installation.
__variables_list=(
rvm_head_flag rvm_ruby_selected_flag rvm_user_install_flag rvm_path_flag rvm_cron_flag
rvm_static_flag rvm_default_flag rvm_loaded_flag rvm_llvm_flag rvm_skip_autoreconf_flag rvm_dynamic_extensions_flag
rvm_18_flag rvm_19_flag rvm_20_flag rvm_21_flag
rvm_force_autoconf_flag rvm_dump_environment_flag rvm_curl_flags rvm_rubygems_version
rvm_verbose_flag rvm_debug_flag rvm_trace_flag __array_start rvm_skip_pristine_flag
rvm_create_flag rvm_remove_flag rvm_movable_flag rvm_archive_flag
rvm_gemdir_flag rvm_reload_flag rvm_auto_reload_flag rvm_disable_binary_flag
rvm_ignore_gemsets_flag rvm_skip_gemsets_flag rvm_install_on_use_flag rvm_remote_flag
rvm_verify_downloads_flag rvm_skip_openssl_flag rvm_gems_cache_path rvm_gems_path
rvm_man_path rvm_ruby_gem_path rvm_ruby_log_path rvm_gems_cache_path rvm_archives_path
rvm_docs_path rvm_environments_path rvm_examples_path rvm_gems_path rvm_gemsets_path
rvm_help_path rvm_hooks_path rvm_lib_path rvm_log_path rvm_patches_path rvm_repos_path
rvm_rubies_path rvm_scripts_path rvm_src_path rvm_tmp_path rvm_user_path rvm_usr_path
rvm_wrappers_path rvm_stored_errexit rvm_ruby_strings rvm_ruby_binary
rvm_ruby_gem_home rvm_ruby_home rvm_ruby_interpreter rvm_ruby_irbrc rvm_ruby_major_version
rvm_ruby_minor_version rvm_ruby_package_name rvm_ruby_patch_level rvm_ruby_release_version
rvm_ruby_repo_url rvm_ruby_repo_branch rvm_ruby_revision rvm_ruby_tag rvm_ruby_sha rvm_ruby_repo_tag
rvm_ruby_version rvm_ruby_package_file rvm_ruby_name rvm_ruby_name rvm_ruby_args
rvm_ruby_user_tag rvm_ruby_patch detected_rvm_ruby_name __rvm_env_loaded next_token
rvm_error_message rvm_gemset_name rvm_parse_break rvm_token rvm_action rvm_export_args
rvm_gemset_separator rvm_expanding_aliases rvm_tar_command rvm_tar_options
rvm_patch_original_pwd rvm_project_rvmrc rvm_archive_extension rvm_autoinstall_bundler_flag
rvm_codesign_identity rvm_expected_gemset_name
rvm_without_gems rvm_with_gems rvm_with_default_gems
rvm_ignore_dotfiles_flag rvm_fuzzy_flag rvm_autolibs_flag
rvm_autolibs_flag_number rvm_autolibs_flag_runner rvm_quiet_curl_flag rvm_max_time_flag
rvm_error_clr rvm_warn_clr rvm_debug_clr rvm_notify_clr rvm_code_clr rvm_comment_clr rvm_reset_clr
rvm_error_color rvm_warn_color rvm_debug_color rvm_notify_color rvm_code_color rvm_comment_color rvm_reset_color
rvm_log_timestamp rvm_log_filesystem rvm_log_namelen rvm_show_log_lines_on_error
)
__array_list=(
rvm_patch_names rvm_ree_options rvm_autoconf_flags rvm_architectures
)
case "${__method}" in
(export) true ;;
(unset) unset "${__array_list[@]}" || true ;;
(*)
rvm_error "Unknown action given to __variables_definition: ${__method}"
return 1
;;
esac
${__method} "${__variables_list[@]}" || true
# prevent errors with bash "set -a", see https://github.com/rvm/rvm/issues/2872
if [[ -n "${BASH_VERSION:-}" ]]
then export -fn __rvm_select_version_variables __rvm_ruby_string_parse_ __rvm_rm_rf_verbose __rvm_parse_args __rvm_ruby_string_find __rvm_file_load_env __rvm_remove_without_gems 2>/dev/null || true
fi
}
# Set shell options that RVM needs temporarily, these are reverted by __rvm_teardown.
# see the top of ./scripts/initialize for settings that are needed all the time.
# Setup must be always called after initialize, otherwise it does nothing ... except exporting.
__rvm_setup()
{
__variables_definition export
# Setup only on first load.
if (( __rvm_env_loaded != 1 ))
then return 0
fi
if
[[ -n "${BASH_VERSION:-}" ]] && ! __function_on_stack cd pushd popd
then
export rvm_shell_nounset
if __rvm_has_opt "nounset"
then rvm_bash_nounset=1
else rvm_bash_nounset=0
fi
set +o nounset
_rvm_old_traps=$( trap | __rvm_grep -E 'EXIT|HUP|INT|QUIT|TERM' || true )
trap '__rvm_teardown_final ; set +x' EXIT HUP INT QUIT TERM
fi
if [[ -n "${ZSH_VERSION:-}" ]]
then
export rvm_zsh_clobber rvm_zsh_nomatch
# Set clobber for zsh users, for compatibility with bash's append operator ( >> file ) behavior
if setopt | __rvm_grep -s '^noclobber$' >/dev/null 2>&1
then rvm_zsh_clobber=0
else rvm_zsh_clobber=1
fi
setopt clobber
# Set no_nomatch so globs that don't match any files don't print out a warning
if setopt | __rvm_grep -s '^nonomatch$' >/dev/null 2>&1
then rvm_zsh_nomatch=0
else rvm_zsh_nomatch=1
fi
setopt no_nomatch
fi
}
__rvm_teardown()
{
if builtin command -v __rvm_cleanup_tmp >/dev/null 2>&1
then __rvm_cleanup_tmp
fi
export __rvm_env_loaded
# if __rvm_env_loaded is not set - detect it via rvm_tmp_path
: __rvm_env_loaded:${__rvm_env_loaded:=${rvm_tmp_path:+1}}:
# if not loaded then fallback to 0
: __rvm_env_loaded:${__rvm_env_loaded:=0}:
# decrease load count counter
: __rvm_env_loaded:$(( __rvm_env_loaded-=1 )):
# skip teardown when already done or when not yet finished
if [[ -z "${rvm_tmp_path:-}" ]] || (( __rvm_env_loaded > 0 ))
then return 0
fi
if
[[ -n "${BASH_VERSION:-}" ]]
then
trap - EXIT HUP INT QUIT TERM # Clear all traps, we do not want to go into an loop.
if
[[ -n "${_rvm_old_traps:-}" ]]
then
eval "${_rvm_old_traps}"
fi
(( rvm_bash_nounset == 1 )) && set -o nounset
unset rvm_bash_nounset
fi
if
[[ -n "${ZSH_VERSION:-""}" ]]
then
# If rvm_zsh_clobber is 0 then "setopt" contained "noclobber" before rvm performed "setopt clobber".
(( rvm_zsh_clobber == 0 )) && setopt noclobber
# If rvm_zsh_nomatch is 0 then "setopt" contained "nonomatch" before rvm performed "setopt nonomatch".
(( rvm_zsh_nomatch == 0 )) || setopt nomatch
unset rvm_zsh_clobber rvm_zsh_nomatch
fi
if
[[ -n "${rvm_stored_umask:-}" ]]
then
umask ${rvm_stored_umask}
unset rvm_stored_umask
fi
if builtin command -v __rvm_cleanup_download >/dev/null 2>&1
then __rvm_cleanup_download
fi
if [[ "${rvm_stored_errexit:-""}" == "1" ]]
then set -e
fi
__variables_definition unset
unset _system_arch _system_name _system_type _system_version
return 0
}
__rvm_teardown_if_broken()
{
if
__function_on_stack __rvm_load_project_config ||
__function_on_stack __rvm_with
then
true # inside of loading .rvmrc / __rvm_with
elif
(( ${__rvm_env_loaded:-0} > 0 ))
then
__rvm_teardown_final
fi
}
__rvm_teardown_final()
{
__rvm_env_loaded=1
unset __rvm_project_rvmrc_lock
__rvm_teardown
}
__rvm_do_with_env_before()
{
if [[ -n "${rvm_scripts_path:-}" || -n "${rvm_path:-}" ]]
then
# Load env - setup all required variables, __rvm_teardown is called on the end
source "${rvm_scripts_path:-"$rvm_path/scripts"}/initialize"
__rvm_setup
fi
}
__rvm_do_with_env_after()
{
__rvm_teardown
}
__rvm_do_with_env()
{
\typeset result
__rvm_do_with_env_before
"$@"
result=$?
__rvm_do_with_env_after
return ${result:-0}
}
__rvm_conditionally_do_with_env()
{
if (( __rvm_env_loaded > 0 ))
then
"$@"
else
__rvm_do_with_env "$@"
fi
}
__rvm_ensure_is_a_function()
{
if [[ ${rvm_reload_flag:=0} == 1 ]] || ! is_a_function rvm
then
for script in functions/version functions/selector cd functions/cli cli override_gem
do
if [[ -f "$rvm_scripts_path/$script" ]]
then
source "$rvm_scripts_path/$script"
else
printf "%b" \
"WARNING:
Could not source '$rvm_scripts_path/$script' as file does not exist.
RVM will likely not work as expected.\n"
fi
done
fi
}
__rvm_call_with_restored_umask()
{
rvm_umask="$(umask)"
if [[ -n "${rvm_stored_umask:-}" ]];
then
umask ${rvm_stored_umask}
fi
"$@"
umask "${rvm_umask}"
unset rvm_umask
}