scripts/manage in rvm-0.1.39 vs scripts/manage in rvm-0.1.40

- old
+ new

@@ -1,18 +1,12 @@ #!/usr/bin/env bash original_ruby_version=$rvm_ruby_version original_ruby_string=$rvm_ruby_string -source $rvm_scripts_path/initialize -source $rvm_scripts_path/utility -source $rvm_scripts_path/selector +source "$rvm_scripts_path/base" -trap "rm -rf ${rvm_tmp_path}/$$* > /dev/null 2>&1 ; exit" 0 1 2 3 15 - -if [[ ! -z "$rvm_trace_flag" ]] ; then set -x ; export rvm_trace_flag ; fi - # Checks for bison, returns zero iff it is found __rvm_check_for_bison() { if [[ "$rvm_head_flag" -gt 0 ]]; then if ! command -v bison >/dev/null ; then $rvm_scripts_path/log "fail" "bison is not available in your path. Please ensure it exists before compiling from head." @@ -256,17 +250,15 @@ fi ;; rbx|rubinius) $rvm_scripts_path/log "info" "Installing pre-requisites" - # prereqs, 1.8.6+ + rake. Yes this could all be one line... not pushing our luck. - original_string="$rvm_ruby_string" - export rvm_install_on_use_flag=1 ; $rvm_bin_path/rvm 1.8.7 --install # This should install if missing. + + # Ensure we have a 1.8.7 compatible ruby installed. + __rvm_ensure_has_18_compat_ruby || return 1 # TODO: use 'rvm gems load' here: unset CFLAGS LDFLAGS ARCHFLAGS # Important. - __rvm_unset_ruby_variables ; rvm_ruby_string="$original_string" ; __rvm_select - unset original_string unset BUNDLE_PATH GEM_HOME GEM_PATH MY_RUBY_HOME IRBRC PATH=$(echo $PATH | tr ':' '\n' | awk '$0 !~ /rvm/' | paste -sd : -) PATH=$rvm_bin_path:$PATH ; export PATH @@ -294,11 +286,11 @@ builtin cd "$rvm_ruby_src_path" ; chmod +x ./configure __rvm_db "${rvm_ruby_interpreter}_configure_flags" "db_configure_flags" - export ruby="$rvm_bin_path/ruby-1.8.7-p$(__rvm_db "ruby_1.8.7_patch_level")" + export ruby="$rvm_bin_path/$(__rvm_18_compat_ruby)" rvm_ruby_configure_flags="${rvm_ruby_configure_flags:-"--skip-system"}" rvm_ruby_configure="$ruby configure --prefix=$rvm_ruby_home $db_configure_flags $rvm_ruby_configure_flags" ; message="Configuring rbx" if [[ "$rvm_llvm_flag" = "0" ]] ; then rvm_ruby_configure="$rvm_ruby_configure --disable-llvm" @@ -323,16 +315,22 @@ fi unset ruby # Symlink rubinius wrappers - ln -fs "$rvm_ruby_home/bin/rbx" "$rvm_ruby_home/bin/irb" ln -fs "$rvm_ruby_home/bin/rbx" "$rvm_ruby_home/bin/ruby" - # Install a wrapper around gem. + + # Install IRB Wrapper on Rubinius. + file_name="$rvm_ruby_home/bin/irb" + rm -f "$file_name" + printf '#!/usr/bin/env bash\n' > "$file_name" + printf "exec '$rvm_ruby_home/bin/rbx' 'irb' \"\$@\"\n" >> "$file_name" + [[ -f "$file_name" ]] && chmod +x "$file_name" + + # Install Gem Wrapper on Rubinius. file_name="$rvm_ruby_home/bin/gem" cp -f "$rvm_ruby_home/lib/bin/gem.rb" "$file_name" - __rvm_inject_ruby_shebang "$file_name" [[ -f "$file_name" ]] && chmod +x "$file_name" unset file_name binaries="erb ri rdoc" @@ -397,11 +395,11 @@ __rvm_run "gems" "$rvm_ruby_home/bin/gem install $rvm_gem_name $rvm_gem_options" "Installing $rvm_gem_name" done ; unset rvm_gem_name ;; maglev) - export rvm_install_on_use_flag=1 ; $rvm_bin_path/rvm 1.8.7 --install # This should install if missing. + __rvm_ensure_has_18_compat_ruby $rvm_scripts_path/log "info" "Running MagLev prereqs checking script." $rvm_scripts_path/maglev result=$? ; if [[ "$result" -gt 0 ]] ; then $rvm_scripts_path/log "error" "Prerequisite checks have failed. Aborting the installation." ; __rvm_pushpop ; return $result @@ -467,22 +465,26 @@ $rvm_ruby_home/bin/maglev force-reload ln -sf maglev.demo.key-$(uname -sm | tr ' ' '-') etc/maglev.demo.key fi #ln -fs "$rvm_ruby_home/$(echo $rvm_gemstone_package_file | awk -F'.' '{print $1}')" "$rvm_ruby_home/gemstone" + + compatible_ruby="$(__rvm_18_compat_ruby)" if [[ ! -e ${rvm_ruby_home}/etc/conf.d/maglev.conf ]] ; then $rvm_scripts_path/log "info" "Creating default 'maglev' repository." - $rvm_bin_path/rvm 1.8.7 rake "stone:create[maglev]" >/dev/null 2>&1 + $rvm_bin_path/rvm "$(compatible_ruby)" rake "stone:create[maglev]" >/dev/null 2>&1 fi $rvm_scripts_path/log "info" "Generating maglev HTML documentation" - $rvm_bin_path/rvm 1.8.7 rake rdoc >/dev/null 2>&1 + $rvm_bin_path/rvm "$(compatible_ruby)" rake rdoc >/dev/null 2>&1 $rvm_scripts_path/log "info" "Generating smalltalk FFI." - $rvm_bin_path/rvm 1.8.7 rake stwrappers >/dev/null 2>&1 + $rvm_bin_path/rvm "$(compatible_ruby)" rake stwrappers >/dev/null 2>&1 + unset compatible_ruby + # TODO: Figure out if anything needs to be done with rubygems. #__rvm_rubygems_setup __rvm_irbrc __rvm_bin_script __rvm_use @@ -506,19 +508,24 @@ else printf "Cannot recognize mono version." return 1 fi + __rvm_ensure_has_18_compat_ruby + __rvm_fetch_ruby if [[ $? -gt 0 ]] ; then result=$? ; return $result ; fi builtin cd $rvm_ruby_src_path - $rvm_bin_path/rvm 1.8.7 -S gem install pathname2 --no-rdoc --no-ri + compatible_ruby="$(__rvm_18_compat_ruby)" + $rvm_bin_path/rvm "$(compatible_ruby)" -S gem install pathname2 --no-rdoc --no-ri + # MONO_LIB=/Library/Frameworks/Mono.framework/Versions/current/lib/ - rvm_ruby_make="$rvm_bin_path/rvm 1.8.7 -S rake MERLIN_ROOT=\"$rvm_ruby_src_path/Merlin/Main\" compile mono=1 configuration=release --trace" + rvm_ruby_make="$rvm_bin_path/rvm $(compatible_ruby) -S rake MERLIN_ROOT=\"$rvm_ruby_src_path/Merlin/Main\" compile mono=1 configuration=release --trace" __rvm_run "rake" "$rvm_ruby_make" "Building IronRuby..." + unset compatible_ruby if [[ $? -gt 0 ]] ; then result=$? ; return $result ; fi rm -rf $rvm_ruby_home/* mkdir -p $rvm_ruby_home/bin $rvm_ruby_home/lib $rvm_ruby_home/lib/ruby $rvm_ruby_home/lib/IronRuby @@ -832,59 +839,72 @@ __rvm_remove_gemsets __rvm_remove_archives __rvm_remove_aliases __rvm_remove_wrappers __rvm_remove_environments + __rvm_remove_binaries else $rvm_scripts_path/log "fail" "Cannot remove unknown package '$rvm_ruby_string'" fi ; unset rvm_remove_flag } __rvm_remove_gemsets() { - $rvm_scripts_path/log "info" "Removing $rvm_ruby_string gemsets..." if [[ ! -z "$rvm_gems_flag" ]] ; then - gemsets="$rvm_gems_path/$rvm_ruby_string $(ls -d "${rvm_gems_path}"/* | awk '/'$rvm_ruby_string'@/')" + $rvm_scripts_path/log "info" "Removing $rvm_ruby_string gemsets..." + gemsets="$rvm_gems_path/$rvm_ruby_string $(\ls -d "${rvm_gems_path}"/* | awk '/'$rvm_ruby_string'@/')" for gemset in $gemsets ; do if [[ -d "$gemset" ]] ; then rm -rf "$gemset" fi done ; unset gemset gemsets fi } __rvm_remove_wrappers() { $rvm_scripts_path/log "info" "Removing $rvm_ruby_string wrappers..." - wrappers="$rvm_wrappers_path/$rvm_ruby_string $(ls -d "$rvm_wrappers_path"/* | awk '/'$rvm_ruby_string'@/')" + wrappers="$rvm_wrappers_path/$rvm_ruby_string $(\ls -d "$rvm_wrappers_path"/* 2>/dev/null | awk '/'$rvm_ruby_string'@/')" for wrapper in $wrappers ; do rm -rf "$wrapper" done ; unset wrapper wrappers } + __rvm_remove_environments() { $rvm_scripts_path/log "info" "Removing $rvm_ruby_string environments..." - environments="$rvm_environments_path/$rvm_ruby_string $(ls -d "$rvm_environments_path"/* | awk '/'$rvm_ruby_string'@/')" + environments="$rvm_environments_path/$rvm_ruby_string $(\ls -d "$rvm_environments_path"/* | awk '/'$rvm_ruby_string'@/')" for environment in $environments ; do rm -rf "$environment" done ; unset environment environments } + __rvm_remove_aliases() { $rvm_scripts_path/log "info" "Removing $rvm_ruby_string aliases..." - aliases=$(awk '/'$rvm_ruby_string'/' $rvm_config_path/alias) + aliases=$(awk '/'$rvm_ruby_string'/' $rvm_config_path/alias | sed 's/=.*//') for alias_name in $aliases ; do # Remove from alias key-value store - $rvm_scripts_path/db $rvm_config_path/alias $alias_name delete - # Remove the place holding symlink - rm -f $rvm_rubies_path/$alias_name + $rvm_scripts_path/alias delete "$alias_name" >/dev/null 2>&1 done ; unset alias_name aliases } __rvm_remove_archives() { - $rvm_scripts_path/log "info" "Removing $rvm_ruby_string archives..." if [[ ! -z "$rvm_archive_flag" ]] ; then + $rvm_scripts_path/log "info" "Removing $rvm_ruby_string archives..." rm -f $rvm_archives_path/${rvm_ruby_package_file}.${rvm_archive_extension} fi } +__rvm_remove_binaries() { + $rvm_scripts_path/log "info" "Removing $rvm_ruby_string binaries..." + # Iterate over all binaries and check for symlinked wrappers etc. + for binary_name in $(\ls "$rvm_bin_path"); do + full_binary_path="$rvm_bin_path/$binary_name" + if [[ -L "$full_binary_path" ]] && $rvm_scripts_path/match "$(readlink "$full_binary_path")" "$rvm_ruby_string"; then + rm -f "$full_binary_path" + fi + unset full_binary_path + done; unset binary_name +} + __rvm_post_install() { if [[ "$rvm_ruby_interpreter" != "jruby" ]] ; then binaries="${binaries:-"gem irb erb ri rdoc testrb rake"}" $rvm_scripts_path/log "info" "adjusting shebangs for $rvm_ruby_string ($binaries)." for binary in $(echo $binaries) ; do @@ -950,11 +970,24 @@ GEM_HOME="$home" ; GEM_PATH="$path" ; BUNDLE_PATH="$home" export GEM_HOME GEM_PATH BUNDLE_PATH __rvm_inject_ruby_shebang "$rvm_ruby_home/bin/gem" __rvm_inject_gem_env "$rvm_ruby_home/bin/gem" - ruby_lib_gem_path="$rvm_ruby_home/lib/ruby/gems/${rvm_release_version}.$rvm_major_version" + + directory_name="$rvm_ruby_home/lib/ruby/gems" + version_number="${rvm_release_version}.${rvm_major_version}" + if [[ "$version_number" == "." ]]; then + version_number="$(\ls "$directory_name" | grep '^[[:digit:]].[[:digit:]]\(.[[:digit:]]\)\?' | head -n1)" + if [[ -n "$version_number" ]]; then + ruby_lib_gem_path="${directory_name}/${version_number}" + else + ruby_lib_gem_path="" + fi + else + ruby_lib_gem_path="${directory_name}/${version_number}" + fi + unset directory_name version_number elif [[ ! -z "$(echo $rvm_ruby_interpreter | awk '/^rbx|jruby/')" ]] ; then # Hands off rubygems for rbx & jruby if [[ ! -z "$rvm_debug_flag" ]] ; then $rvm_scripts_path/log "debug" "Skipping rubygems update for $rvm_ruby_version" ; fi ruby_lib_gem_path="$rvm_ruby_home/lib/ruby/gems/jruby" else @@ -962,11 +995,10 @@ rvm_rubygems_version="$(__rvm_db "${rvm_ruby_interpreter}_rubygems_version")" rvm_rubygems_version="${rvm_rubygems_version:-"$(__rvm_db "rubygems_version")"}" rvm_rubygems_url=$(__rvm_db "rubygems_${rvm_rubygems_version}_url") rvm_gem_package_name="rubygems-$rvm_rubygems_version" rvm_gem_url="$rvm_rubygems_url/$rvm_gem_package_name.tgz" - # Sanity check... If setup.rb is missing from the rubygems source path, # something went wrong. Cleanup, aisle 3! if [[ ! -f "$rvm_src_path/$rvm_gem_package_name/setup.rb" ]]; then rm -rf "$rvm_src_path/$rvm_gem_package_name" fi @@ -998,19 +1030,17 @@ else ruby_lib_gem_path="$rvm_ruby_home/lib/ruby/gems/$interpreter" fi fi - # Add ruby's gem path to ruby's lib direcotry. - mkdir -p $(dirname $ruby_lib_gem_path) + if [[ -n "$ruby_lib_gem_path" ]]; then + # Add ruby's gem path to ruby's lib direcotry. + mkdir -p $(dirname $ruby_lib_gem_path) + if [[ -d "$ruby_lib_gem_path" ]] ; then rm -rf "$ruby_lib_gem_path" ; fi + ln -nfs "$rvm_ruby_gem_home" "$ruby_lib_gem_path" + fi; unset ruby_lib_gem_path - if [[ -d "$ruby_lib_gem_path" ]] ; then rm -rf "$ruby_lib_gem_path" ; fi - - ln -nfs "$rvm_ruby_gem_home" "$ruby_lib_gem_path" - - unset ruby_lib_gem_path - if [[ -s "$rvm_ruby_src_path/bin/rdoc" ]] ; then __rvm_inject_ruby_shebang "$rvm_ruby_src_path/bin/rdoc" fi if [[ -s "$rvm_ruby_src_path/bin/rake" ]] ; then @@ -1052,17 +1082,17 @@ actual_file="$1" fi } __rvm_manage_rubies() { - rubies=() ; successes=() ; errors=() ; statuses=() - unset rvm_gemset_name rvm_ruby_selected_flag rvm_ruby_gem_home=$(echo $rvm_ruby_gem_home | awk -F${rvm_gemset_separator} '{print $1}') rvm_ruby_string=$(echo $rvm_ruby_string | awk -F${rvm_gemset_separator} '{print $1}') + local manage_result=0 + if [[ ! -z "$rubies_string" ]] ;then for rvm_ruby_string in $(echo $rubies_string | tr ',' ' ') ; do eval "__rvm_${rvm_action}_ruby" __rvm_unset_ruby_variables done @@ -1079,12 +1109,12 @@ else $rvm_scripts_path/log "warn" 'Really? Install all? See "rvm list known" and limit the selection to something more sane please :)' fi fi - if [[ ! -z "$rvm_summary_flag" ]] ; then __rvm_summary ; fi - if [[ ! -z "$rvm_yaml_flag" ]] ; then __rvm_yaml ; fi - if [[ ! -z "$rvm_json_flag" ]] ; then __rvm_json ; fi + # TODO: This should return the exit status of the command that got called. + return $manage_result + } rvm_action="$1" ; rubies_string="$2" __rvm_manage_rubies exit $?