123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506 |
- #!/usr/bin/env bash
- source "${rvm_scripts_path}/functions/selector_gemsets"
- source "${rvm_scripts_path}/functions/selector_late"
- source "${rvm_scripts_path}/functions/selector_parse"
- source "${rvm_scripts_path}/functions/selector_interpreters"
- __rvm_select_set_variable_defaults()
- {
- export GEM_HOME GEM_PATH MY_RUBY_HOME RUBY_VERSION IRBRC
- export rvm_env_string rvm_action rvm_alias_expanded rvm_archive_extension rvm_bin_flag rvm_bin_path rvm_debug_flag rvm_default_flag rvm_delete_flag rvm_docs_type rvm_dump_environment_flag rvm_error_message rvm_expanding_aliases rvm_file_name rvm_gemdir_flag rvm_gemset_name rvm_gemstone_package_file rvm_gemstone_url rvm_head_flag rvm_hook rvm_install_on_use_flag rvm_llvm_flag rvm_loaded_flag rvm_niceness rvm_nightly_flag rvm_only_path_flag rvm_parse_break rvm_patch_original_pwd rvm_pretty_print_flag rvm_proxy rvm_quiet_flag rvm_reload_flag rvm_remove_flag rvm_ruby_alias rvm_ruby_args rvm_ruby_binary rvm_ruby_bits rvm_ruby_configure rvm_ruby_file rvm_ruby_gem_home rvm_ruby_gem_path rvm_ruby_global_gems_path rvm_ruby_home rvm_ruby_interpreter rvm_ruby_irbrc rvm_ruby_major_version rvm_ruby_make rvm_ruby_make_install rvm_ruby_minor_version rvm_ruby_mode rvm_ruby_name rvm_ruby_package_file rvm_ruby_package_name rvm_ruby_patch rvm_ruby_patch_level rvm_ruby_release_version rvm_ruby_repo_url rvm_ruby_revision rvm_ruby_selected_flag rvm_ruby_sha rvm_ruby_string rvm_ruby_strings rvm_ruby_tag rvm_ruby_url rvm_ruby_user_tag rvm_ruby_version rvm_script_name rvm_sdk rvm_silent_flag rvm_sticky_flag rvm_system_flag rvm_token rvm_trace_flag rvm_use_flag rvm_user_flag rvm_verbose_flag rvm_ruby_repo_tag
- }
- __rvm_select_detect_ruby_string()
- {
- rvm_ruby_string="${1:-${rvm_ruby_string:-${rvm_env_string:-}}}"
- if
- [[ -z "${rvm_ruby_string:-}" ]]
- then
- rvm_ruby_string="${rvm_ruby_interpreter:-}"
- rvm_ruby_string="${rvm_ruby_string:-}${rvm_ruby_version:+-}${rvm_ruby_version:-}"
- rvm_ruby_string="${rvm_ruby_string:-}${rvm_ruby_patch_level:+-}${rvm_ruby_patch_level:-}"
- rvm_ruby_string="${rvm_ruby_string:-}${rvm_ruby_revision:+-}${rvm_ruby_revision:-}"
- if [[ -n "${rvm_ruby_name:-}" ]]
- then rvm_ruby_name="$rvm_ruby_string-$rvm_ruby_name"
- fi
- fi
- }
- __rvm_select_interpreter_variables()
- {
- rvm_archive_extension="tar.gz"
- if [[ -z "${rvm_ruby_interpreter:-}" ]]
- then rvm_ruby_interpreter="${rvm_ruby_string//-*/}"
- fi
- rvm_ruby_interpreter="${rvm_ruby_interpreter:-missing}"
- if
- is_a_function __rvm_select_interpreter_${rvm_ruby_interpreter}
- then
- __rvm_select_interpreter_${rvm_ruby_interpreter} || return $?
- elif
- [[ -n "${MY_RUBY_HOME:-""}" ]]
- then
- __rvm_select "${MY_RUBY_HOME##*/}" || return $?
- elif
- [[ -z "${rvm_ruby_string:-""}" ]]
- then
- rvm_error "Ruby implementation '$rvm_ruby_interpreter' is not known."
- return 1
- fi
- }
- __rvm_select_version_variables()
- {
- case "$rvm_ruby_version" in
- (+([0-9]).+([0-9]).+([0-9]))
- rvm_ruby_release_version="${rvm_ruby_version/.*/}"
- rvm_ruby_major_version=${rvm_ruby_version%.*}
- rvm_ruby_major_version=${rvm_ruby_major_version#*.}
- rvm_ruby_minor_version="${rvm_ruby_version//*.}"
- ;;
- (+([0-9]).+([0-9]))
- rvm_ruby_release_version="${rvm_ruby_version/.*/}"
- rvm_ruby_major_version="${rvm_ruby_version#*.}"
- rvm_ruby_minor_version=""
- ;;
- esac
- }
- __rvm_select_default_variables()
- {
- if [[ "${rvm_ruby_interpreter}" != ext ]]
- then rvm_ruby_package_name="${rvm_ruby_package_name:-${rvm_ruby_string//-n*}}"
- fi
- rvm_ruby_home="$rvm_rubies_path/$rvm_ruby_string"
- rvm_ruby_binary="$rvm_ruby_home/bin/ruby"
- rvm_ruby_irbrc="$rvm_ruby_home/.irbrc"
- }
- # __rvm_select implementation-version-patch_level
- __rvm_select()
- {
- true ${rvm_gemset_name:=}
- __rvm_select_set_variable_defaults &&
- __rvm_select_detect_ruby_string "${1:-}" &&
- __rvm_ruby_string &&
- __rvm_select_after_parse ||
- return $?
- }
- __rvm_select_after_parse()
- {
- __rvm_select_interpreter_variables &&
- __rvm_select_version_variables &&
- __rvm_select_default_variables ||
- return $?
- [[ "system" == "$rvm_ruby_interpreter" ]] || __rvm_gemset_select ||
- return $result
- rvm_ruby_selected_flag=1
- }
- __rvm_use_system() {
- unset GEM_HOME GEM_PATH MY_RUBY_HOME RUBY_VERSION IRBRC
- if
- [[ -s "$rvm_path/config/system" ]]
- then
- if
- __rvm_grep "MY_RUBY_HOME='$rvm_rubies_path" "$rvm_path/config/system" > /dev/null
- then
- # 'system' should *not* point to an rvm ruby.
- if [[ -f "$rvm_path/config/system" ]]
- then \command \rm -f "$rvm_path/config/system"
- fi
- else
- source "$rvm_path/config/system"
- fi
- fi
- if
- (( ${rvm_default_flag:=0} == 1 ))
- then
- "$rvm_scripts_path/alias" delete default &> /dev/null
- __rvm_find "${rvm_bin_path}" -maxdepth 0 -name 'default_*' -exec rm '{}' \;
- \command \rm -f "$rvm_path/config/default"
- \command \rm -f "$rvm_environments_path/default"
- __rvm_rm_rf "$rvm_wrappers_path/default"
- fi
- rvm_verbose_log "Now using system ruby."
- __path_prefix=""
- __path_suffix="${rvm_bin_path}"
- export rvm_ruby_string="system"
- }
- __rvm_use()
- {
- \typeset binary full_binary_path rvm_ruby_gem_home __path_prefix __path_suffix
- __rvm_select "$@" || return $?
- if [[ "system" == ${rvm_ruby_interpreter:="system"} ]]
- then __rvm_use_system
- else __rvm_use_ || return $?
- fi
- __rvm_use_common
- }
- __rvm_use_()
- {
- rvm_ruby_home="${rvm_ruby_home%%@*}"
- if
- [[ ! -d "$rvm_ruby_home" ]]
- then
- if
- [[ ${rvm_install_on_use_flag:-0} -eq 1 ]]
- then
- rvm_warn "Required $rvm_ruby_string is not installed - installing."
- __rvm_run_wrapper manage "install" "$rvm_ruby_string"
- else
- rvm_error "Required $rvm_ruby_string is not installed."
- rvm_log "To install do: 'rvm install \"$rvm_ruby_string\"'"
- export rvm_recommended_ruby="rvm install $rvm_ruby_string"
- return 1
- fi
- fi
- __rvm_gemset_use_ensure || return $?
- export GEM_HOME GEM_PATH MY_RUBY_HOME RUBY_VERSION IRBRC
- GEM_HOME="$rvm_ruby_gem_home"
- GEM_PATH="$rvm_ruby_gem_path"
- MY_RUBY_HOME="$rvm_ruby_home"
- RUBY_VERSION="$rvm_ruby_string"
- IRBRC="$rvm_ruby_irbrc"
- unset BUNDLE_PATH # Ensure that BUNDLE_PATH is not set!
- # Handle MagLev pre-installed gems
- if [[ "maglev" == "$rvm_ruby_interpreter" ]]
- then GEM_PATH="$GEM_PATH:$MAGLEV_HOME/lib/maglev/gems/1.8/"
- fi
- [[ -n "${IRBRC:-}" ]] || unset IRBRC
- if
- (( ${rvm_use_flag:-1} >= 2 && ${rvm_internal_use_flag:-0} == 0 )) ||
- (( ${rvm_use_flag:-1} == 1 && ${rvm_verbose_flag:-0} == 1 ))
- then
- rvm_log "Using ${GEM_HOME/${rvm_gemset_separator:-'@'}/ with gemset }"
- fi
- if [[ "$GEM_HOME" != "$rvm_ruby_global_gems_path" ]]
- then __path_prefix="$GEM_HOME/bin:$rvm_ruby_global_gems_path/bin:${rvm_ruby_binary%/*}:${rvm_bin_path}"
- else __path_prefix="$GEM_HOME/bin:${rvm_ruby_binary%/*}:${rvm_bin_path}"
- fi
- __path_suffix=""
- }
- __rvm_use_common()
- {
- [[ -z "${rvm_ruby_string:-}" ]] || export rvm_ruby_string
- [[ -z "${rvm_gemset_name:-}" ]] || export rvm_gemset_name
- \typeset __save_PATH
- __rvm_remove_rvm_from_path
- __save_PATH=$PATH
- if
- [[ -n "${_OLD_VIRTUAL_PATH}" ]]
- then
- # _OLD_VIRTUAL_PATH means we deal with virtualenv - see #2585,
- # PATH is saved in __save_PATH, use __rvm_remove_rvm_from_path to
- # clean _OLD_VIRTUAL_PATH via PATH ... a trick so we can transform
- # _OLD_VIRTUAL_PATH the same way like PATH for new ruby, from now on
- # any virtualenv operations will be aware of rvm
- PATH="${_OLD_VIRTUAL_PATH}"
- __rvm_remove_rvm_from_path
- _OLD_VIRTUAL_PATH="${__path_prefix:-}${__path_prefix:+:}${PATH}${__path_suffix:+:}${__path_suffix:-}"
- fi
- PATH="${__path_prefix:-}${__path_prefix:+:}$__save_PATH${__path_suffix:+:}${__path_suffix:-}"
- export PATH
- builtin hash -r
- if
- [[ "$rvm_ruby_string" != "system" ]]
- then
- case "${rvm_rvmrc_flag:-0}" in
- (rvmrc|versions_conf|ruby_version) __rvm_set_${rvm_rvmrc_flag} ;;
- esac
- \typeset environment_id
- environment_id="$(__rvm_env_string)"
- if
- (( ${rvm_default_flag:=0} == 1 )) &&
- [[ "default" != "${rvm_ruby_interpreter:-}" ]] &&
- [[ "system" != "${rvm_ruby_interpreter:-}" ]]
- then
- # Switch the default alias to the new environment id
- "$rvm_scripts_path/alias" delete default &> /dev/null
- "$rvm_scripts_path/alias" create default "$environment_id" >& /dev/null
- fi
- rvm_default_flag=0
- if
- [[ -n "${rvm_ruby_alias:-}" ]]
- then
- rvm_log "Attempting to alias $environment_id to $rvm_ruby_alias"
- "$rvm_scripts_path/alias" delete "$rvm_ruby_alias" > /dev/null 2>&1
- rvm_alias_expanded=1 "$rvm_scripts_path/alias" create "$rvm_ruby_alias" "$environment_id" > /dev/null 2>&1
- ruby_alias="" ; rvm_ruby_alias=""
- fi
- else
- if
- (( ${rvm_default_flag:=0} == 1 ))
- then
- builtin command -v __rvm_reset >> /dev/null 2>&1 || source "$rvm_scripts_path/functions/reset"
- __rvm_reset
- fi
- fi
- rvm_hook="after_use"
- source "$rvm_scripts_path/hook"
- return 0
- }
- __rvm_ruby_string_installed()
- {
- \typeset __ruby_inst_dir="$rvm_rubies_path/${rvm_ruby_string}"
- if [[ -n "${rvm_ruby_name:-}" && ! "${rvm_ruby_string}" == *"-${rvm_ruby_name}" ]]
- then __ruby_inst_dir="${__ruby_inst_dir}-${rvm_ruby_name}"
- fi
- [[ -n "$rvm_ruby_interpreter" && -n "${rvm_ruby_string}" &&
- -d "${__ruby_inst_dir}"
- ]] &&
- [[ -z "${rvm_gemset_name}" || ${rvm_create_flag:-0} -eq 1 ||
- -d "${__ruby_inst_dir}${rvm_gemset_separator}${rvm_gemset_name}"
- ]]
- }
- __rvm_ruby_string_remotely_available()
- {
- (( ${rvm_remote_flag:-0} == 1 )) &&
- [[ -n "$rvm_ruby_interpreter" && -n "${rvm_ruby_string}" ]] &&
- __rvm_remote_server_path "${rvm_ruby_string}" >/dev/null
- }
- __rvm_ruby_string()
- {
- # rvm_ruby_string may designate any of the following items:
- # * rvm_gemset_name
- # * rvm_ruby_interpreter
- # * rvm_ruby_version
- # * rvm_ruby_patch_level
- # * rvm_ruby_revision
- # * rvm_ruby_tag
- true ${rvm_head_flag:=0} ${rvm_delete_flag:=0}
- rvm_expanding_aliases=''
- true \
- "${rvm_ruby_version:=}" "${rvm_gemset_name:=}" "${rvm_ruby_interpreter:=}"\
- "${rvm_ruby_version:=}" "${rvm_ruby_tag:=}" "${rvm_ruby_patch_level:=}"\
- "${rvm_ruby_revision:=}" ${rvm_gemset_separator:="@"} "${rvm_ruby_string:=}"\
- ${rvm_expanding_aliases:=0} ${rvm_head_flag:=0}
- if
- [[ "$rvm_ruby_string" == *"${rvm_gemset_separator}"* ]]
- then
- rvm_gemset_name="${rvm_ruby_string/*${rvm_gemset_separator}/}"
- rvm_ruby_string="${rvm_ruby_string/${rvm_gemset_separator}*/}"
- fi
- # known ruby aliases
- if
- (( rvm_expanding_aliases == 0 )) &&
- [[ -n "${rvm_ruby_string}" && "$rvm_ruby_string" != "system" ]]
- then
- if
- [[ -f "$rvm_path/config/known_aliases" && -s "$rvm_path/config/known_aliases" ]] &&
- expanded_alias_name="$(__rvm_db_ "$rvm_path/config/known_aliases" "$rvm_ruby_string")" &&
- [[ -n "$expanded_alias_name" ]]
- then
- rvm_ruby_string="$expanded_alias_name"
- fi
- fi
- # Alias'd rubies
- if
- (( rvm_expanding_aliases == 0 )) &&
- [[ -n "${rvm_ruby_string}" && "$rvm_ruby_string" != "system" ]]
- then
- if
- [[ -f "$rvm_path/config/alias" && -s "$rvm_path/config/alias" ]] &&
- expanded_alias_name="$(__rvm_db_ "$rvm_path/config/alias" "$rvm_ruby_string")" &&
- [[ -n "$expanded_alias_name" ]]
- then
- rvm_ruby_string="$expanded_alias_name"
- elif
- [[ "$rvm_ruby_string" == default ]]
- then
- # Default is not a known value. Instead, we need to therefore set it to system.
- rvm_ruby_string="system"
- fi
- if
- [[ "$rvm_ruby_string" == *"${rvm_gemset_separator}"* ]]
- then
- rvm_gemset_name="${rvm_ruby_string/*${rvm_gemset_separator}/}"
- rvm_ruby_string="${rvm_ruby_string/${rvm_gemset_separator}*/}"
- fi
- fi
- if
- [[ -n "$gemset_name" ]]
- then
- rvm_gemset_name="$gemset_name"
- rvm_sticky_flag=1 # <- not sold on this.
- fi
- __rvm_ruby_string_parse || return $?
- __rvm_ruby_string_find
- # record the name for validation of -n option
- detected_rvm_ruby_name="${rvm_ruby_name:-}"
- # clean the name so it is not added again (rbx -n install problem)
- rvm_ruby_name=""
- true
- }
- __rvm_ruby_string_find()
- {
- if
- __rvm_ruby_string_installed
- then
- true # use the selected/detected rvm_ruby_string
- elif
- __rvm_ruby_string_remotely_available
- then
- true # use the selected/detected rvm_ruby_string
- else
- __rvm_ruby_string_autodetect
- case "${rvm_ruby_string}" in
- (ruby-+([1-9])|ruby-+([1-9]).+([0-9])|ruby-1.+([1-9]).+([0-9])|jruby-[19]*)
- __rvm_ruby_string_latest &&
- __rvm_ruby_string_parse_ ||
- return $?
- ;;
- esac
- fi
- if [[ -n "${rvm_ruby_name:-}" && ! "${rvm_ruby_string}" == *"-${rvm_ruby_name}" ]]
- then rvm_ruby_string="${rvm_ruby_string}${rvm_ruby_name:+-}${rvm_ruby_name:-}"
- fi
- }
- __rvm_ruby_string_autodetect()
- {
- if
- [[ -z "${rvm_ruby_version:-}" &&
- "${rvm_ruby_interpreter}" != "ext" &&
- "${rvm_ruby_interpreter}" != "system"
- ]] &&
- (( ${rvm_head_flag:=0} == 0 ))
- then
- if
- (( ${rvm_fuzzy_flag:-0} == 1 ))
- then
- rvm_ruby_version="$(
- __rvm_list_strings |
- __rvm_grep "^${rvm_ruby_interpreter}-.*${rvm_ruby_name:-}" |
- __rvm_awk -F- '{print $2}' |
- __rvm_version_sort |
- __rvm_tail -n 1
- )"
- fi
- rvm_ruby_version="${rvm_ruby_version:-"$(
- __rvm_db "${rvm_ruby_interpreter}_version"
- )"}"
- fi
- if
- (( ${rvm_head_flag:=0} )) &&
- [[ "${rvm_ruby_interpreter}" == "ruby" ]] &&
- __rvm_version_compare "${rvm_ruby_version}" -ge 2.1
- then
- __rvm_take_n rvm_ruby_version 2 .
- fi
- rvm_ruby_string="${rvm_ruby_interpreter}${rvm_ruby_version:+-}${rvm_ruby_version:-}"
- if
- [[ "${rvm_ruby_interpreter}" == "ext" ]]
- then
- true # skip checking for external rubies
- elif
- [[ "${rvm_head_flag:=0}" == "1" || -n "${rvm_ruby_sha:-}" || -n "${rvm_ruby_tag:-}" || -n "${rvm_ruby_repo_tag:-}" ]]
- then
- if [[ "${rvm_head_flag:=0}" == "1" ]]
- then rvm_ruby_string="${rvm_ruby_string}-head"
- fi
- if [[ -n "${rvm_ruby_sha:-}" ]]
- then rvm_ruby_string="${rvm_ruby_string}-s${rvm_ruby_sha}"
- elif [[ -n "${rvm_ruby_repo_tag:-}" ]]
- then rvm_ruby_string="${rvm_ruby_string}-tag${rvm_ruby_repo_tag}"
- elif [[ -n "${rvm_ruby_tag:-}" ]]
- then rvm_ruby_string="${rvm_ruby_string}-${rvm_ruby_tag}"
- fi
- if
- [[ ! -d "${rvm_rubies_path}/${rvm_ruby_string}" ]] &&
- (( ${rvm_fuzzy_flag:-0} == 1 ))
- then
- \typeset new_ruby_string
- new_ruby_string="$(
- __rvm_list_strings |
- __rvm_grep "^${rvm_ruby_string}.*${rvm_ruby_name:-}" |
- __rvm_version_sort |
- __rvm_tail -n 1
- )"
- rvm_ruby_string="${new_ruby_string:-$rvm_ruby_string}"
- fi
- elif
- [[ -n "${rvm_ruby_revision:-}" ]]
- then
- rvm_ruby_string="${rvm_ruby_string}-${rvm_ruby_revision}"
- elif
- [[ -n "${rvm_ruby_patch_level:-}" ]]
- then
- rvm_ruby_string="${rvm_ruby_string}-${rvm_ruby_patch_level}"
- elif
- [[ -n "${rvm_ruby_user_tag:-}" ]]
- then
- rvm_ruby_string="${rvm_ruby_string}-${rvm_ruby_user_tag}"
- else
- if
- (( ${rvm_fuzzy_flag:-0} == 1 )) &&
- [[ "${rvm_ruby_interpreter}" == "ruby" || "${rvm_ruby_interpreter}" == "ree" ]]
- then
- rvm_ruby_patch_level="$(
- __rvm_list_strings |
- __rvm_grep "^${rvm_ruby_interpreter}-${rvm_ruby_version}-.*${rvm_ruby_name:-}" |
- __rvm_awk -F- '{print $3}' |
- __rvm_version_sort |
- __rvm_tail -n 1
- )"
- fi
- [[ -n "${rvm_ruby_patch_level:-""}" ]] ||
- __rvm_db_system \
- "${rvm_ruby_interpreter}_${rvm_ruby_version}_patch_level" \
- rvm_ruby_patch_level
- if [[ -n "${rvm_ruby_patch_level:-""}" ]]
- then rvm_ruby_string="${rvm_ruby_string}-${rvm_ruby_patch_level}"
- fi
- fi
- true # OSX --trace FIX
- }
- __rvm_ruby_strings_exist()
- {
- for rvm_ruby_string in ${@//,/ }
- do
- rvm_gemset_name=""
- rvm_verbose_flag=0 __rvm_use "${rvm_ruby_string}" >/dev/null 2>&1 || return $?
- true rvm_gemset_name:${rvm_gemset_name:=${rvm_expected_gemset_name}}
- printf "%b" "${rvm_ruby_string}${rvm_gemset_name:+@}${rvm_gemset_name:-}\n"
- done
- unset rvm_ruby_string
- }
|