123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- #!/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
- }
|