scripts/utility in rvm-1.0.11 vs scripts/utility in rvm-1.0.13

- old
+ new

@@ -1,8 +1,9 @@ #!/usr/bin/env bash -__rvm_setup() { +__rvm_setup() +{ # ZSH has 1 based array indexing, bash has 0 based. if [[ -n "${ZSH_VERSION:-""}" ]] ; then __shell_array_start=1 # Set clobber for zsh users, for compatibility with bash's append operator ( >> file ) behavior setopt | \grep -qs '^noclobber$' @@ -11,12 +12,12 @@ else __shell_array_start=0 # bash array indexes are 0 based. fi ; export __shell_array_start } -__rvm_teardown() { - +__rvm_teardown() +{ if [[ -n "${ZSH_VERSION:-""}" ]] ; then if [[ ${rvm_zsh_clobber:-0} -eq 0 ]] ; then setopt noclobber @@ -53,27 +54,29 @@ return 0 } # Dump the current environment to a file. -__rvm_dump_environment() { - +__rvm_dump_environment() +{ # Note: This assumes that there is a ',' local dump_environment_file dump_environment_type rvm_dump_environment_flag dump_environment_file="${rvm_dump_environment_flag/,*/}" dump_environment_type="${rvm_dump_environment_flag/*,/}" if [[ -n "$dump_environment_file" && -n "$dump_environment_type" ]]; then - if [[ "$dump_environment_type" == "atheis"* ]] && [[ -f "$dump_environment_file" ]] ; then + if [[ "$dump_environment_type" == "atheis"* && -f "$dump_environment_file" ]] ; then # TODO: Query Darcy about the ln. - \rm -f "$dump_environment_file" && ln -s /dev/null "$dump_environment_file" >/dev/null 2>&1 + \rm -f "$dump_environment_file" \ + && ln -s /dev/null "$dump_environment_file" >/dev/null 2>&1 else - "$rvm_path/scripts/environment-convertor" "$dump_environment_type" "$(__rvm_environment_identifier)" > "$dump_environment_file" + "$rvm_path/scripts/environment-convertor" "$dump_environment_type" \ + "$(__rvm_environment_identifier)" > "$dump_environment_file" if [[ "$?" -gt 0 && -f "$dump_environment_file" ]] ; then \rm -f "$dump_environment_file" fi fi fi @@ -81,11 +84,12 @@ return 0 } # Return a list of directories under a given base path. # Derived from rvm_ruby_string. -__rvm_ruby_string_paths_under() { +__rvm_ruby_string_paths_under() +{ local path part parts path="${1%/}" # Strip off any trailing slash parts=(${rvm_ruby_string//-/ }) # Strip white space. @@ -103,11 +107,12 @@ return 0 } # Query the rvm key-value database for a specific key # Allow overrides from user specifications in $rvm_path/config/user -__rvm_db() { +__rvm_db() +{ local value key variable key=${1:-""} variable=${2:-""} @@ -130,18 +135,20 @@ return 0 } is_a_function() { type $1 | head -n 1 | \grep -q "function" ; } -__rvm_quote_args() { +__rvm_quote_args() +{ local quoted_string="" for quoted_argument in "$@"; do if printf "%s" "$quoted_argument" | \grep -vq "^[[:alnum:]]$"; then - quoted_string="$quoted_string '$(printf "%s" "$quoted_argument" | sed "s/'/\'\\\'\'/g")'" + quoted_string="$quoted_string '$(printf "%s" "$quoted_argument" \ + | sed "s/'/\'\\\'\'/g")'" else quoted_string="$quoted_string $quoted_argument" fi done @@ -149,12 +156,12 @@ echo "$quoted_string" | sed -e 's/^ *//g' -e 's/ *$//g' return 0 } -__rvm_quote_args_with_shift() { - +__rvm_quote_args_with_shift() +{ local shift_value="$1"; shift while [[ "$shift_value" -gt 0 && $# -gt 0 ]]; do shift @@ -166,22 +173,24 @@ __rvm_quote_args "$@" return 0 } -__rvm_warn_on_rubyopt() { - +__rvm_warn_on_rubyopt() +{ if [[ -n "${RUBYOPT:-""}" ]]; then "$rvm_path/scripts"/log "warn" \ - "Please note: You have the RUBYOPT environment variable set and this may interfere with normal rvm operations. We sugges unsetting it." + "Please note: You have the RUBYOPT environment variable set and this \ + may interfere with normal rvm operations. We sugges unsetting it." return 1 else return 0 fi } -__rvm_strings() { +__rvm_strings() +{ local strings ruby_strings ruby_strings=($(echo ${rvm_ruby_args:-$rvm_ruby_string})) for rvm_ruby_string in "${ruby_strings[@]}" ; do @@ -192,12 +201,12 @@ return 0 } # Push an item onto a given array. -__rvm_push() { - +__rvm_push() +{ local array item array=$1 ; shift ; item=$2 # TODO: allow loop over more arguments. @@ -207,32 +216,35 @@ return 0 } # Clean all *duplicate* items out of the path. (keep first occurrence of each) -__rvm_clean_path() { +__rvm_clean_path() +{ + PATH="$(printf "$PATH" | \tr -s ':' '\n' | awk '!($0 in a){a[$0];print}' \ + | \tr -s '\n' ':' | sed 's#:$##')" - PATH="$(printf "$PATH" | \tr -s ':' '\n' | awk '!($0 in a){a[$0];print}' | \tr -s '\n' ':' | sed 's#:$##')" - export PATH builtin hash -r } # Clean all rvm items out of the current working path. -__rvm_remove_rvm_from_path() { +__rvm_remove_rvm_from_path() +{ + PATH="$(printf "$PATH" \ + | awk -v RS=: -v ORS=: "/${rvm_path//\//\/}/ {next} {print}" \ + | sed -e 's#:$##')" - PATH="$(printf "$PATH" | awk -v RS=: -v ORS=: "/${rvm_path//\//\/}/ {next} {print}" | sed -e 's#:$##')" - export PATH builtin hash -r } # Run a specified command and log it. -__rvm_run() { - +__rvm_run() +{ local name log path command message name="${1:-""}" command="${2:-""}" message="${3:-""}" @@ -280,12 +292,12 @@ return ${result:-0} } # Runs a command in a given env. -__rvm_run_with_env() { - +__rvm_run_with_env() +{ local name environment command message log path name="${1:-""}" environment="${2:-""}" command="${3:-""}" @@ -298,11 +310,12 @@ if [[ -n "$message" ]] ; then "$rvm_path/scripts/log" "info" "$message" fi if [[ ${rvm_debug_flag:-0} -gt 0 ]] ; then - "$rvm_path/scripts/log" "debug" "Executing: $command in environment "$environment"" + "$rvm_path/scripts/log" "debug" \ + "Executing: $command in environment $environment" fi path="${rvm_log_path:-"$rvm_path/log"}/$rvm_ruby_string" log="$path/$name.log" @@ -333,40 +346,49 @@ result=$? if [[ $result -gt 0 ]] ; then "$rvm_path/scripts/log" "error" \ - "Error running '$command' under $env_name, please check ${log/%log/error.log}" + "Error running '$command' under $env_name,\ + \nplease check ${log/%log/error.log}" fi return ${result:-0} } -__rvm_nuke_rvm_variables() { +__rvm_nuke_rvm_variables() +{ unset rvm_head_flag $(env | awk -F= '/^rvm_/{print $1" "}') } # Unset ruby-specific variables -__rvm_unset_ruby_variables() { +__rvm_unset_ruby_variables() +{ unset rvm_ruby_flag $(env | awk -F= '/^rvm_ruby_/{printf $1" "}') } # TODO: Should be able to... # Unset both rvm variables as well as ruby-specific variables -# Preserve gemset if 'rvm_sticky' is set (persist gemset unless clear is explicitely called). -__rvm_cleanse_variables() { - +# Preserve gemset if 'rvm_sticky' is set +# (persist gemset unless clear is explicitely called). +__rvm_cleanse_variables() +{ __rvm_unset_ruby_variables - if [[ ${rvm_sticky_flag:-0} -eq 1 ]] ; then export rvm_gemset_name ; else unset rvm_gemset_name ; fi + if [[ ${rvm_sticky_flag:-0} -eq 1 ]] ; then + export rvm_gemset_name + else + unset rvm_gemset_name + fi unset rvm_action rvm_irbrc_file rvm_command rvm_error_message rvm_force_flag rvm_all_flag rvm_reconfigure_flag rvm_make_flags rvm_bin_flag rvm_import_flag rvm_export_flag rvm_self_flag rvm_gem_flag rvm_rubygems_flag rvm_debug_flag rvm_delete_flag rvm_summary_flag rvm_test_flag _rvm_spec_flag rvm_json_flag rvm_yaml_flag rvm_shebang_flag rvm_env_flag rvm_tail_flag rvm_use_flag rvm_dir_flag rvm_list_flag rvm_empty_flag rvm_file_name rvm_benchmark_flag rvm_clear_flag rvm_name_flag rvm_verbose_flag rvm_user_flag rvm_system_flag rvm_configure_flags rvm_uninstall_flag rvm_install_flag rvm_llvm_flag rvm_ruby_bits rvm_sticky_flag rvm_rvmrc_flag rvm_gems_flag rvm_only_path_flag rvm_docs_flag rvm_ruby_aliases rvm_patch_names rvm_clang_flag rvm_install_arguments rvm_dump_environment_flag rvm_ruby_alias } # Returns the first 1.8.7-compatible (partly) ruby for use # with things like rbx etc which require a ruby be installed. -__rvm_18_compat_ruby() { +__rvm_18_compat_ruby() +{ local rubies ruby_name rubies=($( cd "$rvm_path/rubies" ; find . -maxdepth 1 -mindepth 1 -type d )) for ruby_name in "${rubies[@]//.\/}"; do @@ -382,21 +404,22 @@ echo $rubies | \tr ' ' '\n' | \sort | \tail -n1 return 0 } -__rvm_ensure_has_18_compat_ruby() { - +__rvm_ensure_has_18_compat_ruby() +{ if [[ -z "$(__rvm_18_compat_ruby)" ]]; then # TODO: install currently doesn't return the correct status. local compat_result=0 if ! ( "$rvm_path/scripts/manage" install 1.8.7 ); then "$rvm_path/scripts/log" "fail" \ - "To proceed rvm requires a 1.8-compatible ruby is installed. We attempted to install 1.8.7 automatically but it failed.\ - Please install it manually (or a compatible alternative) to proceed." + "To proceed rvm requires a 1.8-compatible ruby is installed.\ + \nWe attempted to install 1.8.7 automatically but it failed.\ + \nPlease install it manually (or a compatible alternative) to proceed." compat_result=1 fi # unset original_ruby @@ -407,12 +430,12 @@ return 0 } # Cleans up temp folders for a given prefix ($1), # typically the current process id. -__rvm_cleanup_temp_for() { - +__rvm_cleanup_temp_for() +{ result=$? # Capture last command status [[ -z "${1:-""}" ]] && return 1 if [[ -d "${rvm_tmp_path:-"$rvm_path/tmp"}/" ]]; then @@ -422,12 +445,12 @@ fi return $result } -__rvm_set_rvmrc() { - +__rvm_set_rvmrc() +{ local flags if [[ "$HOME" != "$PWD" ]] ; then if [[ ${rvm_verbose_flag:-0} -gt 0 ]] ; then @@ -444,34 +467,39 @@ fi local identifier=$(__rvm_environment_identifier) printf " -if [[ -d \"\$rvm_path/environments\" && -s \"\$rvm_path/environments/$identifier\" ]] ; then - \\. \"\$rvm_path/environments/$identifier\" +if [[ -d \"\${rvm_path:-\$HOME/.rvm}/environments\" \\ + && -s \"\${rvm_path:-\$HOME/.rvm}/environments/$identifier\" ]] ; then + \\. \"\${rvm_path:-\$HOME/.rvm}/environments/$identifier\" else rvm --create $flags \"$identifier\" fi " >> .rvmrc else "$rvm_path/scripts/log" "error" \ - ".rvmrc cannot be set in your home directory. \n The home .rvmrc is for global rvm settings only." + ".rvmrc cannot be set in your home directory.\ + \nThe home .rvmrc is for global rvm settings only." fi } -__rvm_load_rvmrc() { +__rvm_load_rvmrc() +{ [[ ${rvm_ignore_rvmrc:-0} -eq 1 ]] && return 0 for rvmrc in /etc/rvmrc $HOME/.rvmrc ; do if [[ -f "$rvmrc" ]] ; then if \grep -q '^\s*rvm .*$' $rvmrc ; then "$rvm_path/scripts/log" "error" \ - "$rvmrc is for rvm settings only.\nrvm CLI may NOT be called from within $rvmrc. \nSkipping the loading of $rvmrc" + "$rvmrc is for rvm settings only.\ + \nrvm CLI may NOT be called from within $rvmrc.\ + \nSkipping the loading of $rvmrc" return 1 else @@ -485,15 +513,17 @@ return 0 } # Wrap the specified ruby code file in a Benchmark.bmbm block and execute it. -__rvm_benchmark() { - +__rvm_benchmark() +{ local old_rvm_ruby_string - code="require \"benchmark\" \n Benchmark.bmbm do |benchmark| \n benchmark.report(\"${rvm_ruby_file}\") do \n" + code="require \"benchmark\" \n \ + Benchmark.bmbm do |benchmark| \n \ + benchmark.report(\"${rvm_ruby_file}\") do \n" printf "\n$code" > "${rvm_tmp_path:-"$rvm_path/tmp"}/$$.rb" unset code @@ -507,19 +537,21 @@ rvm_action="ruby" if [[ ${rvm_debug_flag:0} -gt 0 ]] ; then - printf "\n${rvm_tmp_path:-"$rvm_path/tmp"}/$$.rb:\n$(cat ${rvm_tmp_path:-"$rvm_path/tmp"}/$$.rb)" + printf "\n${rvm_tmp_path:-"$rvm_path/tmp"}/$$.rb:\n\ + $(cat ${rvm_tmp_path:-"$rvm_path/tmp"}/$$.rb)" fi # Override ruby string stuff, pass through. old_rvm_ruby_string=$rvm_ruby_string - # TODO: We can likely do this in a subshell in order to preserve the original environment? + # TODO: We can likely do this in a subshell in order to + # preserve the original environment? unset rvm_ruby_string export rvm_ruby_strings @@ -530,17 +562,18 @@ return ${result:-0} } # Loop over the currently installed rubies and refresh their binscripts. -__rvm_bin_scripts() { - +__rvm_bin_scripts() +{ for rvm_ruby_binary in "$rvm_path/rubies"/*/bin/ruby ; do if [[ -x "$rvm_ruby_binary" ]] ; then - rvm_ruby_string=$(dirname "$rvm_ruby_binary" | xargs dirname | xargs basename) + rvm_ruby_string=$(dirname "$rvm_ruby_binary" \ + | xargs dirname | xargs basename) __rvm_select __rvm_bin_script @@ -550,43 +583,43 @@ return 0 } # Write the bin/ wrapper script for currently selected ruby. -# TODO: Adjust binscript to be able to handle all rubies not just the standard interpreteres. -__rvm_bin_script() { - +# TODO: Adjust binscript to be able to handle all rubies, +# not just the standard interpreteres. +__rvm_bin_script() +{ "$rvm_path/scripts/wrapper" "$rvm_ruby_string" return $? } # Add bin path if not present -__rvm_conditionally_add_bin_path() { +__rvm_conditionally_add_bin_path() +{ + if printf "${PATH//:/ }" | \grep -vqF "${rvm_bin_path:-"$rvm_path/bin"} " ; then - if echo "${PATH//:/ }" | \grep -vqF "${rvm_bin_path:-"$rvm_path/bin"} " ; then + case "${rvm_ruby_string:-"system"}" in + system) + PATH="$PATH:${rvm_bin_path:-"$rvm_path/bin"}" + ;; + *) + PATH="${rvm_bin_path:-"$rvm_path/bin"}:$PATH" + ;; + esac - if [[ "${rvm_ruby_string:-"system"}" != "system" ]] ; then - - PATH="${rvm_bin_path:-"$rvm_path/bin"}:$PATH" - - else - - PATH="$PATH:${rvm_bin_path:-"$rvm_path/bin"}" - - fi - builtin hash -r fi return 0 } # Reset any rvm gathered information about the system and its state. # rvm will refresh the stored information the next time it is called after reset. -__rvm_reset() { - +__rvm_reset() +{ local flag flags file files config configs variable __rvm_remove_rvm_from_path ; __rvm_conditionally_add_bin_path export PATH @@ -601,15 +634,21 @@ done for file in system default ; do - [[ -f "$rvm_path/${file}" ]] && \rm -f "$rvm_path/${file}" + if [[ -f "$rvm_path/${file}" ]] ; then + \rm -f "$rvm_path/${file}" + fi - [[ -f "$rvm_path/config/${file}" ]] && \rm -f "$rvm_path/config/${file}" + if [[ -f "$rvm_path/config/${file}" ]] ; then + \rm -f "$rvm_path/config/${file}" + fi - [[ -f "$rvm_path/environments/${file}" ]] && \rm -f "$rvm_path/environments/${file}" + if [[ -f "$rvm_path/environments/${file}" ]] ; then + \rm -f "$rvm_path/environments/${file}" + fi done # Go back to a clean state. __rvm_become "system" @@ -622,11 +661,13 @@ "$rvm_path/scripts/db" "$rvm_path/config/user" "$system_config" "delete" done - files=(ruby gem rake irb $(cd "${rvm_bin_path:-"$rvm_path/bin"}" ; find . -iname 'default*' --mindepth 1 --maxdepth 1 -type f | sed -e 's#./##g')) + files=(ruby gem rake irb $(cd "${rvm_bin_path:-"$rvm_path/bin"}" ; \ + find . -mindepth 1 -maxdepth 1 -iname 'default*' -type f \ + | sed -e 's#./##g')) for file in "${files[@]}"; do if [[ -f "${rvm_bin_path:-"$rvm_path/bin"}/$file" ]] ; then @@ -638,16 +679,18 @@ return 0 } # Implode removes the entire rvm installation under $rvm_path. -__rvm_implode() { - +__rvm_implode() +{ while : ; do "$rvm_path/scripts/log" "warn" \ - "Are you SURE you wish for rvm to implode? This will remove $rvm_path ? (type 'yes' or 'no')" + "Are you SURE you wish for rvm to implode?\ + \nThis will recursively remove $rvm_path ?\ + \n(type 'yes' or 'no')> " read response if [[ "yes" = "$response" ]] ; then @@ -687,12 +730,12 @@ return 0 } # Output the current ruby's rvm source path. -__rvm_source_dir() { - +__rvm_source_dir() +{ if [[ ${rvm_ruby_selected_flag:-0} -eq 0 ]] ; then __rvm_select ; fi if [[ -z "$rvm_ruby_src_path" ]] ; then "$rvm_path/scripts/log" "fail" \ @@ -706,11 +749,12 @@ return 0 } # Initialize rvm, ensuring that the path and directories are as expected. -__rvm_initialize() { +__rvm_initialize() +{ rvm_ruby_load_path="." rvm_ruby_require="" __rvm_clean_path ; __rvm_conditionally_add_bin_path ; export PATH @@ -720,32 +764,40 @@ return 0 } # Update rubygems or binscripts based on CLI selection. -__rvm_update() { +__rvm_update() +{ ( builtin cd "$rvm_path" - if [[ ${rvm_head_flag:-0} -eq 1 || ${rvm_self_flag:-0} -eq 1 || "update" = "${rvm_action:-""}" || ${rvm_update_flag:-0} -eq 1 ]] ; then + if [[ ${rvm_head_flag:-0} -eq 1 || ${rvm_self_flag:-0} -eq 1 \ + || "update" = "${rvm_action:-""}" || ${rvm_update_flag:-0} -eq 1 ]] ; then __rvm_version __rvm_update_rvm fi - [[ ${rvm_bin_flag:-0} -eq 1 ]] && __rvm_bin_scripts + if [[ ${rvm_bin_flag:-0} -eq 1 ]] ; then + __rvm_bin_scripts + fi # Update to the latest rubygems. - [[ ${rvm_rubygems_flag:-0} -eq 1 ]] && "$rvm_path/scripts/rubygems" current - + if [[ ${rvm_rubygems_flag:-0} -eq 1 ]] ; then + "$rvm_path/scripts/rubygems" current + fi ) - unset rvm_update_flag rvm_action rvm_self_flag rvm_ruby_revision rvm_bin_flag rvm_rubygems_flag + unset rvm_update_flag rvm_action rvm_self_flag \ + rvm_ruby_revision rvm_bin_flag rvm_rubygems_flag + return 0 } # Update rvm using rubygems # If --head was specified, update from git repository master branch. -__rvm_update_rvm() { +__rvm_update_rvm() +{ ( if [[ ! -d "${rvm_src_path:-"$rvm_path/src"}" ]] ; then \mkdir -p "${rvm_src_path:-"$rvm_path/src"}" fi @@ -765,33 +817,42 @@ ( git clone --depth 1 git://github.com/wayneeseguin/rvm.git || \ git clone http://github.com/wayneeseguin/rvm.git ) && \ builtin cd rvm/ && ./scripts/install fi else - stable_version="$(curl -s http://rvm.beginrescueend.com/releases/stable-version.txt)" + version_url="http://rvm.beginrescueend.com/releases/stable-version.txt" + stable_version="$(curl -s $version_url)" + __rvm_run "fetch" \ - "$rvm_path/scripts/fetch 'http://rvm.beginrescueend.com/releases/rvm-${stable_version}.tar.gz'" \ + "$rvm_path/scripts/fetch \ + 'http://rvm.beginrescueend.com/releases/rvm-${stable_version}.tar.gz'" \ "fetching rvm-${stable_version}.tar.gz" __rvm_run "extract" \ - "gunzip < \"${rvm_archives_path:-"$rvm_path/archives"}/rvm-${stable_version}.tar.gz\" | tar xf - -C ${rvm_src_path:-"$rvm_path/src"}" \ + "gunzip < \ + \"${rvm_archives_path:-"$rvm_path/archives"}/rvm-${stable_version}.tar.gz\" \ + | tar xf - -C ${rvm_src_path:-"$rvm_path/src"}" \ "Extracting rvm-${stable_version}.tar.gz ..." __rvm_run "install" \ - "builtin cd ${rvm_src_path:-"$rvm_path/src"}/rvm-${stable_version}/ ; ./install" \ + "builtin cd ${rvm_src_path:-"$rvm_path/src"}/rvm-${stable_version}/;\ + ./install" \ "Installing rvm-${stable_version}..." fi ) rvm_hook="after_update" ; source "$rvm_path/scripts/hook" return 0 } -__rvm_reboot() { - "$rvm_path/scripts/log" "warn" "Do you wish to reboot rvm? ('yes', or 'no')" +__rvm_reboot() +{ + "$rvm_path/scripts/log" "warn" \ + "Do you wish to reboot rvm?\ + \n('yes', or 'no')> " local response="no" read response @@ -819,157 +880,245 @@ return 0 } # Create the irbrc for the currently selected ruby installation. -__rvm_irbrc() { +__rvm_irbrc() +{ if [[ -d "$rvm_ruby_home" && ! -s "$rvm_ruby_irbrc" ]] ; then \cp "$rvm_path/scripts/irbrc" "$rvm_ruby_irbrc" fi return $? } # Save or restore the rvm's state. This is a toggle action. -# Meant for use before and after an operation that might reset the currently selected ruby. -__rvm_state() { +# Meant for use before and after an operation that might reset +# the currently selected ruby. +# TODO: Determine if we should a) yank this out or b) actually use it :) +__rvm_state() +{ if [[ -z "$rvm_state" ]] ; then + rvm_state="$(__rvm_environment_identifier)" + rvm_state="${rvm_state:-"system"}" + if [[ -n "$1" ]]; then + rvm_ruby_string="$1" + __rvm_select + __rvm_use + fi + else + rvm_ruby_string="$rvm_state" + __rvm_select + __rvm_use + unset rvm_state + fi return 0 } # Output an inspection of selected 'binary' scripts, based on CLI selection. -__rvm_inspect() { - +__rvm_inspect() +{ for binary in $rvm_ruby_args ; do + actual_file="$(unset -f gem ; command -v gem )" "$rvm_path/scripts/log" "info" "$actual_file:" - if [[ ${rvm_shebang_flag:-0} -eq 1 ]] ; then \head -n 1 < "$actual_file" ; fi - if [[ ${rvm_env_flag:-0} -eq 1 ]] ; then \awk '/ENV/' < "$actual_file" ; fi - if [[ ${rvm_path_flag:-0} -eq 1 ]] ; then \awk '/PATH/' < "$actual_file" ; fi - if [[ ${rvm_head_flag:-0} -eq 1 ]] ; then \head -n 5 < "$actual_file" ; fi - if [[ ${rvm_tail_flag:-0} -eq 1 ]] ; then \tail -n 5 < "$actual_file" ; fi - if [[ ${rvm_all_flag:-0} -eq 1 ]] ; then \cat $actual_file ; fi + if [[ ${rvm_shebang_flag:-0} -eq 1 ]] ; then + \head -n 1 < "$actual_file" + fi + + if [[ ${rvm_env_flag:-0} -eq 1 ]] ; then + \awk '/ENV/' < "$actual_file" + fi + + if [[ ${rvm_path_flag:-0} -eq 1 ]] ; then + \awk '/PATH/' < "$actual_file" + fi + + if [[ ${rvm_head_flag:-0} -eq 1 ]] ; then + \head -n 5 < "$actual_file" + fi + + if [[ ${rvm_tail_flag:-0} -eq 1 ]] ; then + \tail -n 5 < "$actual_file" + fi + + if [[ ${rvm_all_flag:-0} -eq 1 ]] ; then + \cat $actual_file + fi + done return 0 } # Attempt to override the Darwin build settings for rubies -# This should only be used in extreme edge cases that will not work via the default way. -__rvm_make_flags() { +# This should only be used in extreme edge cases that +# will not work via the default way. +__rvm_make_flags() +{ # This is only an issue with Darwin :/ if [[ "Darwin" = "$(uname)" ]] ; then # \ls /usr/lib/gcc/x86_64-apple-darwin10 # Set the build & host type if [[ "Power Macintosh" = "$(sysctl -n hw.machine)" ]] ; then + : # Do nothing ? - elif [[ "$(sysctl -n hw.cpu64bit_capable)" = 1 || "$(sysctl -n hw.optional.x86_64)" = 1 ]] ; then + + elif [[ "$(sysctl -n hw.cpu64bit_capable)" = 1 \ + || "$(sysctl -n hw.optional.x86_64)" = 1 ]] ; then + # 64 bit capable + if [[ "-arch x86_64" = "${rvm_archflags:-""}" ]] ; then - rvm_configure_flags="${rvm_configure_flags} --build=x86_64-apple-darwin$(uname -r) --host=x86_64-apple-darwin$(uname -r)" + + rvm_configure_flags="${rvm_configure_flags} \ + --build=x86_64-apple-darwin$(uname -r) \ + --host=x86_64-apple-darwin$(uname -r)" + elif [[ "-arch i386" = "${rvm_archflags:-""}" ]] ; then - rvm_configure_flags="${rvm_configure_flags} --build=i386-apple-darwin$(uname -r) --host=i386-apple-darwin$(uname -r)" + + rvm_configure_flags="${rvm_configure_flags} \ + --build=i386-apple-darwin$(uname -r) \ + --host=i386-apple-darwin$(uname -r)" + else + rvm_archflags="-arch x86_64" - rvm_configure_flags="${rvm_configure_flags} --build=x86_64-apple-darwin$(uname -r) --host=x86_64-apple-darwin$(uname -r)" + + rvm_configure_flags="${rvm_configure_flags} \ + --build=x86_64-apple-darwin$(uname -r) \ + --host=x86_64-apple-darwin$(uname -r)" + fi + fi if [[ -n "${rvm_archflags:-""}" ]] ; then + ARCHFLAGS="$rvm_archflags" ; export ARCHFLAGS + # Use the latest sdk available. if [[ -z "${rvm_sdk:-""}" ]] ; then - rvm_sdk="$(/usr/bin/basename -a /Developer/SDKs/* | awk '/^M/' | \sort | \tail -n 1)" + + rvm_sdk="$(/usr/bin/basename -a /Developer/SDKs/* \ + | awk '/^M/' | \sort | \tail -n 1)" + fi - CFLAGS="${CFLAGS:-"-isysroot /Developer/SDKs/$rvm_sdk $rvm_archflags"}" ; export CFLAGS - LDFLAGS="${LDFLAGS:-"-Wl,-syslibroot /Developer/SDKs/$rvm_sdk $rvm_archflags"}" ; export LDFLAGS - # CXXFLAGS="-mmacosx-version-min="$(sw_vers -productVersion | awk -F'.' '{print $1"."$2}')" -isysroot /Developer/SDKs/$rvm_sdk " ; export CXXFLAGS + + CFLAGS="${CFLAGS:-"-isysroot /Developer/SDKs/$rvm_sdk $rvm_archflags"}" + + export CFLAGS + + LDFLAGS="${LDFLAGS:-"-Wl,-syslibroot /Developer/SDKs/$rvm_sdk $rvm_archflags"}" + + export LDFLAGS + + # CXXFLAGS="-mmacosx-version-min="$(sw_vers -productVersion \ + # | awk -F'.' '{print $1"."$2}')" -isysroot /Developer/SDKs/$rvm_sdk " + # export CXXFLAGS + fi fi return 0 } -__rvm_mono_env() { - export DYLD_LIBRARY_PATH="${rvm_usr_path:-"$rvm_path/usr"}/lib:$DYLD_LIBRARY_PATH" - export C_INCLUDE_PATH="${rvm_usr_path:-"$rvm_path/usr"}/include:$C_INCLUDE_PATH" - export ACLOCAL_PATH="${rvm_usr_path:-"$rvm_path/usr"}/share/aclocal" - export ACLOCAL_FLAGS="-I $ACLOCAL_PATH" - export PKG_CONFIG_PATH="${rvm_usr_path:-"$rvm_path/usr"}/lib/pkgconfig:$PKG_CONFIG_PATH" +__rvm_mono_env() +{ + DYLD_LIBRARY_PATH="${rvm_usr_path:-"$rvm_path/usr"}/lib:$DYLD_LIBRARY_PATH" + C_INCLUDE_PATH="${rvm_usr_path:-"$rvm_path/usr"}/include:$C_INCLUDE_PATH" + ACLOCAL_PATH="${rvm_usr_path:-"$rvm_path/usr"}/share/aclocal" + ACLOCAL_FLAGS="-I $ACLOCAL_PATH" + PKG_CONFIG_PATH="${rvm_usr_path:-"$rvm_path/usr"}/lib/pkgconfig:$PKG_CONFIG_PATH" + + export DYLD_LIBRARY_PATH C_INCLUDE_PATH ACLOCAL_PATH ACLOCAL_FLAGS PKG_CONFIG_PATH + PATH="${rvm_usr_path:-"$rvm_path/usr"}/bin:$PATH" + builtin hash -r return 0 } -__rvm_become() { +__rvm_become() +{ local string="$1" [[ -n "$string" ]] && rvm_ruby_string="$string" { __rvm_ruby_string && __rvm_select && __rvm_use; } > /dev/null 2>&1 return 0 } -__rvm_ensure_has_environment_files() { - local environment_id file_name directory_name wrapper_identifier variable value +__rvm_ensure_has_environment_files() +{ + local environment_id file_name directory identifier variable value variables environment_id="$(__rvm_environment_identifier)" file_name="${rvm_path}/environments/$environment_id" if [[ ! -s "$file_name" ]] ; then \mkdir -p "$rvm_path/environments" - echo "export PATH=\"${rvm_ruby_gem_home}/bin:${rvm_ruby_global_gems_path}/bin:${rvm_ruby_home}/bin:${rvm_bin_path:-"$rvm_path/bin"}:\$PATH\"" > "$file_name" + printf "export PATH=\"${rvm_ruby_gem_home}/bin:${rvm_ruby_global_gems_path}/bin:${rvm_ruby_home}/bin:${rvm_bin_path:-"$rvm_path/bin"}:\$PATH\"\n" \ + > "$file_name" - for variable in rvm_path RUBY_VERSION GEM_HOME GEM_PATH BUNDLE_PATH MY_RUBY_HOME IRBRC rvm_ruby_string rvm_gemset_name MAGLEV_HOME ; do + for variable in rvm_path RUBY_VERSION GEM_HOME GEM_PATH BUNDLE_PATH \ + MY_RUBY_HOME IRBRC rvm_ruby_string rvm_gemset_name MAGLEV_HOME ; do eval "export $variable" eval "value=\${${variable}:-""}" if [[ -n "$value" ]] ; then - printf "${variable}='$value'\nexport ${variable}\n" >> "$file_name" + + printf "${variable}='$value'\nexport ${variable}\n" \ + >> "$file_name" + else - printf "unset ${variable}\n" >> "$file_name" + + printf "unset ${variable}\n" \ + >> "$file_name" + fi done fi # Next, ensure we have default wrapper files. Also, prevent it from recursing. - if [[ ${rvm_create_default_wrappers:-0} -eq 1 || ! -f "$rvm_path/wrappers/$environment_id/ruby" ]] ; then + if [[ ${rvm_create_default_wrappers:-0} -eq 1 \ + || ! -f "$rvm_path/wrappers/$environment_id/ruby" ]] ; then # We need to generate wrappers for both the default gemset and the global gemset. - for wrapper_identifier in "$environment_id" "${environment_id//@*/}@global" ; do + for identifier in "$environment_id" "${environment_id//@*/}@global" ; do rvm_create_default_wrappers=1 - directory_name="$rvm_path/wrappers/$wrapper_identifier" + directory="$rvm_path/wrappers/$identifier" - if [[ ! -L "$directory_name" && ! -d "$directory_name" ]]; then - \mkdir -p "$directory_name" + if [[ ! -L "$directory" && ! -d "$directory" ]]; then + \mkdir -p "$directory" - "$rvm_path/scripts/wrapper" "$wrapper_identifier" &> /dev/null + "$rvm_path/scripts/wrapper" "$identifier" &> /dev/null fi done rvm_create_default_wrappers=0 @@ -977,45 +1126,54 @@ return 0 } # Strip whitespace and normalize it all. -__rvm_strip() { +__rvm_strip() +{ sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' -e 's/[[:space:]]\{1,\}/ /g' return $? } -__rvm_using_gemset_globalcache() { - "$rvm_path/scripts/db" "$rvm_path/config/user" "use_gemset_globalcache" | \grep -q '^true$' +__rvm_using_gemset_globalcache() +{ + "$rvm_path/scripts/db" "$rvm_path/config/user" \ + "use_gemset_globalcache" | \grep -q '^true$' return $? } -__rvm_current_gemcache_dir() { +__rvm_current_gemcache_dir() +{ if __rvm_using_gemset_globalcache; then echo "$rvm_gems_cache_path" else echo "${rvm_ruby_gem_home:-"$GEM_HOME"}/cache" fi return 0 } -__rvm_Answer_to_the_Ultimate_Question_of_Life_the_Universe_and_Everything() { - for index in {1..750} ; do sleep 0.25 ; echo -n '.' ; done ; printf "%d" 0x2A ; echo +__rvm_Answer_to_the_Ultimate_Question_of_Life_the_Universe_and_Everything() +{ + for index in {1..750} ; do sleep 0.25 ; echo -n '.' ; done ; printf "%d" 0x2A + echo return 0 } -__rvm_ultimate_question() { +__rvm_ultimate_question() +{ printf " I do not know the Ultimate Question, however I can help you build a more powerful Ruby which can compute the Ultimate Question. + " return 0 } -__rvm_load_env_file() { +__rvm_load_env_file() +{ local string="$1" if [[ -f "$rvm_path/environments/$string" ]]; then # Restore the path to it's state minus rvm __rvm_remove_rvm_from_path @@ -1030,55 +1188,67 @@ : # TODO: This should have some error handling in the context. fi return 0 } -__rvm_md5_for() { +__rvm_md5_for() +{ if command -v md5 > /dev/null; then echo "$1" | md5 elif command -v md5sum > /dev/null ; then echo "$1" | md5sum | awk '{print $1}' else - "$rvm_path/scripts/log" "error" "Neither md5 nor md5sum were found in the PATH" + "$rvm_path/scripts/log" "error" \ + "Neither md5 nor md5sum were found in the PATH" return 1 fi return 0 } -__rvm_rvmrc_key() { +__rvm_rvmrc_key() +{ __rvm_md5_for "$1" return $? } -__rvm_reset_rvmrc_trust() { +__rvm_reset_rvmrc_trust() +{ touch "$rvm_path/config/rvmrcs" - "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" "$(__rvm_rvmrc_key "$1")" "delete" >/dev/null 2>&1 + "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" \ + "$(__rvm_rvmrc_key "$1")" "delete" >/dev/null 2>&1 return $? } -__rvm_trust_rvmrc() { +__rvm_trust_rvmrc() +{ touch "$rvm_path/config/rvmrcs" __rvm_reset_rvmrc_trust "$1" - "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" "$(__rvm_rvmrc_key "$1")" "1" >/dev/null 2>&1 + "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" \ + "$(__rvm_rvmrc_key "$1")" "1" >/dev/null 2>&1 return $? } -__rvm_untrust_rvmrc() { +__rvm_untrust_rvmrc() +{ touch "$rvm_path/config/rvmrcs" __rvm_reset_rvmrc_trust "$1" - "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" "$(__rvm_rvmrc_key "$1")" "0" >/dev/null 2>&1 + "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" \ + "$(__rvm_rvmrc_key "$1")" "0" >/dev/null 2>&1 return $? } -__rvm_rvmrc_stored_trust() { +__rvm_rvmrc_stored_trust() +{ touch "$rvm_path/config/rvmrcs" - "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" "$(__rvm_rvmrc_key "$1")" + "$rvm_path/scripts/db" "$rvm_path/config/rvmrcs" \ + "$(__rvm_rvmrc_key "$1")" return $? } -__rvm_rvmrc_tools() { +__rvm_rvmrc_tools() +{ local rvmrc_action="$1" [[ $# -gt 0 ]] && shift local rvmrc_path="$(builtin cd "${1:-$PWD}" >/dev/null 2>&1; pwd)/.rvmrc" case "$rvmrc_action" in reset) @@ -1102,21 +1272,23 @@ else echo "The trustiworthiness of '$rvmrc_path' is currently unknown." fi ;; load) - rvm_rvmrc_cwd="" rvm_trust_rvmrcs=1 __rvm_project_rvmrc "$(dirname "$rvmrc_path")" + rvm_rvmrc_cwd="" rvm_trust_rvmrcs=1 \ + __rvm_project_rvmrc "$(dirname "$rvmrc_path")" ;; *) echo "Usage: rvm rvmrc {trust,untrust,trusted,load,reset}" return 1 ;; esac return $? } -__rvm_check_rvmrc_trustworthiness() { +__rvm_check_rvmrc_trustworthiness() +{ # Trust when they have the flag... of doom! [[ -z "$1" || "$rvm_trust_rvmrcs" = "1" ]] && return 0 value="$(__rvm_rvmrc_stored_trust "$1")" if [[ -z "$value" ]] ; then __rvm_ask_to_trust "$1" @@ -1124,11 +1296,12 @@ [[ "$value" = "1" ]] fi return $? } -__rvm_ask_to_trust() { +__rvm_ask_to_trust() +{ local trusted value [[ -n "$rvm_promptless" ]] && return 2 @@ -1177,11 +1350,12 @@ fi } # Checks the rvmrc for the given directory. Note that if # argument is passed, it will be used instead of pwd. -__rvm_project_rvmrc() { +__rvm_project_rvmrc() +{ local cwd # Get the first argument or the pwd. cwd="${1:-"$PWD"}" @@ -1237,78 +1411,84 @@ done return $? } -__rvm_record_install() { +__rvm_record_install() +{ local recorded_ruby_name rvm_install_record_file rvm_install_command [[ -z "$1" ]] && return recorded_ruby_name="$($rvm_path/scripts/tools strings "$1")" rvm_install_record_file="$rvm_path/config/installs" - rvm_install_command="$(echo "$recorded_ruby_name $rvm_install_arguments" | __rvm_strip)" + rvm_install_command=$(printf "$recorded_ruby_name $rvm_install_arguments\n") \touch "$rvm_install_record_file" \rm -f "$rvm_install_record_file.tmp" - \grep -v "^$recorded_ruby_name " < "$rvm_install_record_file" > "$rvm_install_record_file.tmp" + \grep -v "^$recorded_ruby_name " < "$rvm_install_record_file" \ + > "$rvm_install_record_file.tmp" echo "$rvm_install_command" >> "$rvm_install_record_file.tmp" \rm -f "$rvm_install_record_file" \mv "$rvm_install_record_file.tmp" "$rvm_install_record_file" return 0 } -__rvm_remove_install_record() { +__rvm_remove_install_record() +{ local recorded_ruby_name rvm_install_record_file recorded_ruby_name="$($rvm_path/scripts/tools strings "$1")" rvm_install_record_file="$rvm_path/config/installs" if [[ -s "$rvm_install_record_file" ]]; then \mv "$rvm_install_record_file" "$rvm_install_record_file.tmp" - \grep -v "^$recorded_ruby_name " < "$rvm_install_record_file.tmp" > "$rvm_install_record_file" + \grep -v "^$recorded_ruby_name " < "$rvm_install_record_file.tmp" \ + > "$rvm_install_record_file" \rm -f "$rvm_install_record_file.tmp" fi return 0 } -__rvm_recorded_install_command() { - +__rvm_recorded_install_command() +{ local recorded_ruby_name recorded_ruby_match - recorded_ruby_name="$($rvm_path/scripts/tools strings "$1" | awk -F"${rvm_gemset_separator:-"@"}" '{print $1}')" + recorded_ruby_name="$($rvm_path/scripts/tools strings "$1" \ + | awk -F"${rvm_gemset_separator:-"@"}" '{print $1}')" [[ -z "$recorded_ruby_name" ]] && return 1 recorded_ruby_match="^$recorded_ruby_name " - if [[ -s "$rvm_path/config/installs" ]] && \grep -q "$recorded_ruby_match" "$rvm_path/config/installs" ; then + if [[ -s "$rvm_path/config/installs" ]] \ + && \grep -q "$recorded_ruby_match" "$rvm_path/config/installs" ; then \grep "$recorded_ruby_match" < "$rvm_path/config/installs" | head -n1 else return 1 fi return $? } -__rvm_environment_identifier() { - +__rvm_environment_identifier() +{ local path string path="${GEM_HOME:-""}" string="${path//*gems\//}" @@ -1317,12 +1497,12 @@ printf "${string:-system}" return $? } -__rvm_expand_ruby_string() { - +__rvm_expand_ruby_string() +{ local string current_ruby string="$1" if [[ -z "$string" ]] ; then @@ -1350,12 +1530,14 @@ all-rubies|rubies) "$rvm_path/scripts/list" rubies strings ;; current-ruby|gemsets) - current_ruby="$(__rvm_environment_identifier | awk -F"${rvm_gemset_separator:-"@"}" '{print $string}')" + current_ruby="$(__rvm_environment_identifier \ + | awk -F"${rvm_gemset_separator:-"@"}" '{print $string}')" - rvm_silence_logging=1 "$rvm_path/scripts/gemsets" list | sed "s/^/$current_ruby${rvm_gemset_separator:-"@"}/" + rvm_silence_logging=1 "$rvm_path/scripts/gemsets" list \ + | sed "s/^/$current_ruby${rvm_gemset_separator:-"@"}/" ;; current) __rvm_environment_identifier ;;