rvm 0.1.42 → 0.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README CHANGED
@@ -68,6 +68,9 @@ Action
68
68
  specified ruby and gemset combination. Used under the hood for
69
69
  passenger support and the like.
70
70
 
71
+ cleanup - Lets you remove stale source folders / archives and other miscellaneous
72
+ data associated with rvm.
73
+
71
74
  ruby - runs a named ruby file against specified and/or all rubies
72
75
  gem - runs a gem command using selected ruby's 'gem'
73
76
  rake - runs a rake task against specified and/or all rubies
@@ -87,6 +90,8 @@ Action
87
90
  http://rvm.beginrescueend.com/packages/
88
91
  notes - Display notes, with operating system specifics.
89
92
 
93
+ snapshot - Let's your backup / restore an rvm installation in a lightweight manner.
94
+
90
95
  Implementation
91
96
 
92
97
  * ruby - MRI/YARV Ruby (The Gold Standard) {1.8.6,1.8.7,1.9.1,1.9.2...}
data/install CHANGED
@@ -114,7 +114,7 @@ fi
114
114
 
115
115
  spinner
116
116
 
117
- mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_patches_path $rvm_tmp_path
117
+ mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_tmp_path
118
118
 
119
119
  for file in README LICENCE ; do
120
120
  spinner
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 1
4
- :patch: 42
4
+ :patch: 43
@@ -11,6 +11,19 @@ module RVM
11
11
  normalize rvm(:tools, "path-identifier", path.to_s).stdout
12
12
  end
13
13
 
14
+ def tools_strings(*rubies)
15
+ rubies = rubies.flatten.join(",").split(",").uniq
16
+ names = {}
17
+ value = rvm(:tools, :strings, *rubies)
18
+ if value.successful?
19
+ parts = value.stdout.split("\n").map { |l| l.split }
20
+ rubies.each_with_index do |key, index|
21
+ names[key] = normalize(parts[index])
22
+ end
23
+ end
24
+ names
25
+ end
26
+
14
27
  # Return the tools wrapper.
15
28
  def tools
16
29
  @tools_wrapper ||= ToolsWrapper.new(self)
@@ -35,6 +48,14 @@ module RVM
35
48
  end
36
49
  alias identifier_for_path path_identifier
37
50
 
51
+ def strings(*rubies)
52
+ @parent.tools_strings(*rubies)
53
+ end
54
+
55
+ def expand_string(ruby)
56
+ strings(ruby)[ruby]
57
+ end
58
+
38
59
  end
39
60
 
40
61
  end
@@ -0,0 +1,51 @@
1
+ # Prints out the rvm command (minus rvm install) to install this ruby.
2
+
3
+ RUBY_NAME = File.basename(ENV['MY_RUBY_HOME'])
4
+ RVM_HOME = ENV['rvm_path']
5
+
6
+ def ruby?(*names)
7
+ names.map { |n| n.to_s }.include?(RUBY_NAME.split("-").first)
8
+ end
9
+
10
+ def quote(value)
11
+ value = value.to_s.strip
12
+ value.empty? ? "" : "'#{value.gsub("'", "'\'\'")}'"
13
+ end
14
+
15
+ def normalize_argument(arg)
16
+ real_value, arg_value = arg.split("=", 2)
17
+ if !arg_value.nil?
18
+ real_value << "=#{quote(arg_value)}"
19
+ end
20
+ real_value.gsub("'#{RVM_HOME}", "'\"$rvm_path\"'")
21
+ end
22
+
23
+ def arguments_for_install
24
+ if ruby?(:ruby, :mput, :ree)
25
+ begin
26
+ require 'rbconfig'
27
+ require 'shellwords'
28
+ # Get the full arguments
29
+ config_args = Shellwords.shellwords(Config::CONFIG['configure_args'].to_s.strip)
30
+ real_arguments = []
31
+ config_args.each do |arg|
32
+ if ruby?(:ree) && arg == "--enable-mbari-api"
33
+ next
34
+ elsif arg =~ /^--prefix/
35
+ next
36
+ elsif arg =~ /^[^\-]/
37
+ next
38
+ else
39
+ real_arguments << normalize_argument(arg)
40
+ end
41
+ end
42
+ config_args = real_arguments.join(",")
43
+ return "-C #{quote(config_args)}" unless config_args.strip.empty?
44
+ rescue LoadError
45
+ end
46
+ end
47
+ return ""
48
+ end
49
+
50
+ # Finally, print the string to install it.
51
+ puts "rvm install #{RUBY_NAME} #{arguments_for_install.gsub(/''+/, "'")}".strip
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rvm}
8
- s.version = "0.1.42"
8
+ s.version = "0.1.43"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Wayne E. Seguin"]
12
- s.date = %q{2010-07-20}
12
+ s.date = %q{2010-07-21}
13
13
  s.default_executable = %q{rvm-install}
14
14
  s.description = %q{Manages Ruby interpreter environments and switching between them.}
15
15
  s.email = %q{wayneeseguin@gmail.com}
@@ -78,6 +78,7 @@ Gem::Specification.new do |s|
78
78
  "lib/rvm/environment/utility.rb",
79
79
  "lib/rvm/environment/wrapper.rb",
80
80
  "lib/rvm/errors.rb",
81
+ "lib/rvm/install_command_dumper.rb",
81
82
  "lib/rvm/shell.rb",
82
83
  "lib/rvm/shell/abstract_wrapper.rb",
83
84
  "lib/rvm/shell/result.rb",
@@ -127,6 +128,7 @@ Gem::Specification.new do |s|
127
128
  "scripts/rvm-install",
128
129
  "scripts/selector",
129
130
  "scripts/set",
131
+ "scripts/snapshot",
130
132
  "scripts/tools",
131
133
  "scripts/update",
132
134
  "scripts/utility",
@@ -10,6 +10,12 @@ __rvm_usage() { cat "${rvm_path:-$HOME/.rvm}/README" | ${PAGER:-less} ; }
10
10
  #fi
11
11
  #}
12
12
 
13
+ __rvm_run_script() {
14
+ local rvm_script_name="${1:-"$rvm_action"}"
15
+ eval "$rvm_scripts_path/$rvm_script_name $rvm_ruby_args"
16
+ return $?
17
+ }
18
+
13
19
  __rvm_parse_args() {
14
20
 
15
21
  # TODO:
@@ -44,6 +50,7 @@ __rvm_parse_args() {
44
50
  install|uninstall)
45
51
  export ${rvm_token}_flag=1
46
52
  rvm_action=$rvm_token
53
+ export rvm_install_arguments="$(__rvm_quote_args_with_shift 1 "$@")"
47
54
  ;;
48
55
 
49
56
  rm|remove)
@@ -125,7 +132,7 @@ __rvm_parse_args() {
125
132
  rvm_parse_break=1
126
133
  ;;
127
134
 
128
- exec|cleanup|tools|disk-usage)
135
+ exec|cleanup|tools|disk-usage|snapshot)
129
136
  rvm_action="$rvm_token"
130
137
  rvm_ruby_args="$(__rvm_quote_args "$@")"
131
138
  rvm_parse_break=1
@@ -137,7 +144,6 @@ __rvm_parse_args() {
137
144
  rvm_parse_break=1
138
145
  ;;
139
146
 
140
-
141
147
  do|ruby|rake|gem|rubydo|rakedo|gemdo)
142
148
  if [[ "do" = "$rvm_action" ]] ; then rvm_action="ruby" ; fi
143
149
  rvm_action=$(echo $rvm_token | sed 's#do##g')
@@ -466,7 +472,7 @@ rvm() {
466
472
  __rvm_initialize
467
473
  __rvm_parse_args "$@"
468
474
 
469
- export BUNDLE_PATH GEM_HOME GEM_PATH rvm_ruby_string rvm_action rvm_bin_flag rvm_debug_flag rvm_delete_flag rvm_docs_type rvm_file_name rvm_gemset_name rvm_head_flag rvm_install_on_use_flag rvm_interactive rvm_llvm_flag rvm_make_flags rvm_proxy rvm_remove_flag rvm_ruby_args rvm_ruby_configure_flags rvm_ruby_file rvm_ruby_gem_home rvm_ruby_interpreter rvm_ruby_name rvm_ruby_version rvm_system_flag rvm_trace_flag rvm_use_flag rvm_user_flag rvm_verbose_flag rvm_patch_names rvm_patch_original_pwd rvm_clang_flag
475
+ export BUNDLE_PATH GEM_HOME GEM_PATH rvm_ruby_string rvm_action rvm_bin_flag rvm_debug_flag rvm_delete_flag rvm_docs_type rvm_file_name rvm_gemset_name rvm_head_flag rvm_install_on_use_flag rvm_interactive rvm_llvm_flag rvm_make_flags rvm_proxy rvm_remove_flag rvm_ruby_args rvm_ruby_configure_flags rvm_ruby_file rvm_ruby_gem_home rvm_ruby_interpreter rvm_ruby_name rvm_ruby_version rvm_system_flag rvm_trace_flag rvm_use_flag rvm_user_flag rvm_verbose_flag rvm_patch_names rvm_patch_original_pwd rvm_clang_flag rvm_install_arguments
470
476
  export rvm_path rvm_rubies_path rvm_scripts_path rvm_archives_path rvm_src_path rvm_patches_path rvm_patches_path rvm_patchsets_path rvm_log_path rvm_bin_path rvm_gems_path rvm_config_path rvm_tmp_path rvm_hooks_path rvm_gems_cache_path rvm_gemset_separator
471
477
 
472
478
  result=0
@@ -530,18 +536,8 @@ rvm() {
530
536
  unset old_rvm_ruby_string
531
537
  ;;
532
538
 
533
- cleanup)
534
- eval "$rvm_scripts_path/cleanup $rvm_ruby_args"
535
- result=$?
536
- ;;
537
-
538
- tools)
539
- eval "$rvm_scripts_path/tools $rvm_ruby_args"
540
- result=$?
541
- ;;
542
-
543
- disk-usage)
544
- eval "$rvm_scripts_path/disk-usage $rvm_ruby_args"
539
+ cleanup|tools|snapshot|disk-usage)
540
+ __rvm_run_script "$rvm_action"
545
541
  result=$?
546
542
  ;;
547
543
 
@@ -620,7 +616,7 @@ rvm() {
620
616
  if [[ ! -z "$rvm_reload_flag" ]] ; then
621
617
  source "$rvm_scripts_path/rvm"
622
618
  # Note: Not using builtin on purpose. Done so we can trigger a reload the rvmrc.
623
- cd .
619
+ __rvm_project_rvmrc
624
620
  fi
625
621
 
626
622
  if [[ ! -z "$rvm_trace_flag" ]] ; then set +x ; unset rvm_trace_flag ; fi
@@ -49,4 +49,3 @@ case "$1" in
49
49
  all|archives|repos|sources|logs|total|packages) eval "$1_disk_usage" ;;
50
50
  *) usage ;;
51
51
  esac
52
-
@@ -114,7 +114,7 @@ fi
114
114
 
115
115
  spinner
116
116
 
117
- mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_patches_path $rvm_tmp_path
117
+ mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_tmp_path
118
118
 
119
119
  for file in README LICENCE ; do
120
120
  spinner
@@ -5,17 +5,19 @@ if [[ "$rvm_trace_flag" -eq 2 ]] ; then set -x ; export rvm_trace_flag ; fi
5
5
  source "$rvm_scripts_path/utility"
6
6
 
7
7
  list_gemsets() {
8
- if [[ "$(echo $rvm_ruby_args | awk '{print $2}')" = "strings" ]]; then
8
+ if [[ "$1" = "strings" ]]; then
9
9
  list_gemset_strings
10
10
  return 0
11
11
  fi
12
12
  echo
13
13
 
14
14
  current_ruby="$(__rvm_environment_identifier)"
15
+ local all_rubies="$(list_strings)"
15
16
 
16
17
  printf "rvm gemsets\n"
17
18
  for version in $(\ls $rvm_gems_path/ 2> /dev/null | awk '/[a-z]*-.*/ {print $NF}') ; do
18
19
  ruby_version_name="$(echo "$version" | awk -F"$rvm_gemset_separator" '{print $1}')"
20
+ [[ "$all_rubies" != *"$ruby_version_name"* ]] && continue
19
21
  if [[ -n "$(echo $version | awk '/^jruby-/')" ]] ; then
20
22
  string="[ $($rvm_rubies_path/$ruby_version_name/bin/ruby -v | awk '{print $NF}' | sed -e 's/\[//' -e 's/\]//') ]"
21
23
  elif [[ -n "$(echo $version | awk '/^maglev-|^macruby-/')" ]] ; then
@@ -48,8 +50,7 @@ list_gemsets() {
48
50
  }
49
51
 
50
52
  list_default() {
51
- strings="$(echo $rvm_ruby_args | awk '{print $2}')"
52
- if [[ "$strings" = "string" ]] ; then
53
+ if [[ "$1" = "string" ]] ; then
53
54
  $rvm_scripts_path/alias show default 2>/dev/null | awk -F"$rvm_gemset_separator" '{print $1}' | xargs basename
54
55
  else
55
56
  if [[ -L "$rvm_rubies_path/default" ]]; then
@@ -80,7 +81,12 @@ list_strings() {
80
81
 
81
82
  # This is meant to be used with scripting.
82
83
  list_gemset_strings() {
83
- \ls $rvm_gems_path/ 2>/dev/null | xargs -- basename | grep -v '^\(@\|doc$\|cache$\|system$\)' | sort
84
+ local all_rubies="$(list_strings)"
85
+ for gemset in $(\ls $rvm_gems_path/ 2>/dev/null | xargs -- basename | grep -v '^\(@\|doc$\|cache$\|system$\)' | sort); do
86
+ local ruby_name="$(echo "$gemset" | awk -F$rvm_gemset_separator '{print $1}')"
87
+ [[ "$all_rubies" != *"$ruby_name"* ]] && continue
88
+ echo "$gemset"
89
+ done
84
90
  }
85
91
 
86
92
  # This is meant to be used with scripting.
@@ -137,18 +143,19 @@ list_rubies() {
137
143
  # List all rvm installed rubies, default ruby and system ruby.
138
144
  # Display the rubies, indicate their architecture and indicate which is currently used.
139
145
  # This is not meant to be used with scripting. This is for interactive mode usage only.
140
- action="$(echo "$1" | awk '{print $1}')"
146
+ action="$1"
147
+ [[ $# -gt 0 ]] && shift
141
148
 
142
149
  if [[ "known" = "$action" ]] ; then
143
150
  list_known
144
151
  elif [[ "known_strings" = "$action" ]] ; then
145
152
  list_known_strings
146
153
  elif [[ "gemsets" = "$action" ]] ; then
147
- list_gemsets
154
+ list_gemsets "$@"
148
155
  elif [[ "default" = "$action" ]] ; then
149
156
  list_default
150
157
  elif [[ -z "$action" ]] || [[ "rubies" = "$action" ]] ; then
151
- list_rubies
158
+ list_rubies "$@"
152
159
  elif [[ "strings" = "$action" ]] ; then
153
160
  list_strings
154
161
  elif [[ "ruby_svn_tags" = "$action" ]] ; then
@@ -867,6 +867,9 @@ __rvm_uninstall_ruby() {
867
867
  rm -f $rvm_bin_path/$rvm_ruby_string
868
868
  fi
869
869
  done ; unset dir
870
+
871
+ __rvm_remove_install_record "$rvm_ruby_string"
872
+
870
873
  __rvm_remove_gemsets
871
874
 
872
875
  __rvm_check_default
@@ -895,6 +898,7 @@ __rvm_remove_ruby() {
895
898
  __rvm_check_default
896
899
 
897
900
  done ; unset dir
901
+ __rvm_remove_install_record "$rvm_ruby_string"
898
902
  __rvm_remove_gemsets
899
903
  __rvm_remove_archives
900
904
  __rvm_remove_aliases
@@ -1152,7 +1156,14 @@ __rvm_manage_rubies() {
1152
1156
 
1153
1157
  if [[ -n "$rubies_string" ]] ;then
1154
1158
  for rvm_ruby_string in $(echo "$rubies_string" | tr ',' ' ') ; do
1159
+ current_manage_ruby_string="$rvm_ruby_string"
1155
1160
  eval "__rvm_${rvm_action}_ruby"
1161
+ result="$?"
1162
+ if [[ "$result" -gt 0 && "$manage_result" = 0 ]]; then
1163
+ manage_result="$result"
1164
+ fi
1165
+ [[ "$result" = 0 && "$rvm_action" = "install" ]] && __rvm_record_install "$current_manage_ruby_string"
1166
+ unset current_manage_ruby_string
1156
1167
  __rvm_unset_ruby_variables
1157
1168
  done
1158
1169
  else # all
@@ -1160,8 +1171,16 @@ __rvm_manage_rubies() {
1160
1171
  while read -r bin_line
1161
1172
  do # Keep this on second line damnit!
1162
1173
  if [[ -x "$bin_line" ]] ; then
1163
- rvm_ruby_string="$(dirname "$bin_line" | xargs dirname | xargs basename)"
1174
+ current_manage_ruby_string="$(dirname "$bin_line" | xargs dirname | xargs basename)"
1175
+ rvm_ruby_string="$current_manage_ruby_string"
1164
1176
  eval "__rvm_${rvm_action}_ruby"
1177
+ result="$?"
1178
+ if [[ "$result" -gt 0 && "$manage_result" = 0 ]]; then
1179
+ manage_result="$result"
1180
+ fi
1181
+ # record as current_manage_string to prevent it being overridden.
1182
+ [[ "$result" = 0 && "$rvm_action" = "install" ]] && __rvm_record_install "$current_manage_ruby_string"
1183
+ unset current_manage_ruby_string
1165
1184
  __rvm_unset_ruby_variables
1166
1185
  fi
1167
1186
  done < <(\ls $rvm_rubies_path/*/bin/ruby 2> /dev/null)
@@ -114,7 +114,7 @@ fi
114
114
 
115
115
  spinner
116
116
 
117
- mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_patches_path $rvm_tmp_path
117
+ mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_tmp_path
118
118
 
119
119
  for file in README LICENCE ; do
120
120
  spinner
@@ -0,0 +1,189 @@
1
+ #!/usr/bin/env bash
2
+
3
+ unset GREP_COLOR
4
+ unset GREP_OPTIONS
5
+
6
+ source "$rvm_scripts_path/base"
7
+
8
+ __error_on_result() {
9
+ if [[ "$1" -gt 0 ]]; then
10
+ $rvm_scripts_path/log "fail" "$2 - Aborting now."
11
+ return 0
12
+ else
13
+ return 1
14
+ fi
15
+ }
16
+
17
+ snapshot_save() {
18
+
19
+ if [[ -z "$1" ]]; then
20
+ echo "Usage: rvm snapshot save name" >&2
21
+ echo "Saves a snapshot to <name>.tar.gz in the current directory." >&2
22
+ return 1
23
+ fi
24
+
25
+ # Create the temporary directory.
26
+ local snapshot_temp_path="$rvm_tmp_path/$$-snapshot"
27
+ rm -rf "$snapshot_temp_path"
28
+ mkdir -p "$snapshot_temp_path"
29
+
30
+ $rvm_scripts_path/log "info" "Backing up a list of aliases"
31
+ cp "$rvm_config_path/alias" "$snapshot_temp_path/"
32
+
33
+ $rvm_scripts_path/log "info" "Backing up your user preferences"
34
+ cp "$rvm_config_path/user" "$snapshot_temp_path/"
35
+
36
+ $rvm_scripts_path/log "info" "Backing up your installed packages"
37
+ cat "$rvm_config_path/packages" | sed -e 's/-//' -e 's/^lib//' | awk -F= '{print $1}' | sort | uniq > "$snapshot_temp_path/packages"
38
+
39
+ $rvm_scripts_path/log "info" "Backing up all of your gemsets"
40
+ mkdir -p "$snapshot_temp_path/gems"
41
+ __rvm_pushpop "$snapshot_temp_path/gems"
42
+ for snapshot_gemset in $($rvm_scripts_path/list gemsets strings) ; do
43
+ __rvm_become "$snapshot_gemset"
44
+ result="$?"
45
+ __error_on_result "$result" "Error becoming ruby $snapshot_gemset" && return "$result"
46
+ $rvm_scripts_path/gemsets export "${snapshot_gemset}.gems" >/dev/null
47
+ result="$?"
48
+ __error_on_result "$result" "Error exporting gemset contents for $snapshot_gemset" && return "$result"
49
+ mkdir -p "./$snapshot_gemset/"
50
+ [[ -d "$GEM_HOME/cache/" ]] && cp -R "$GEM_HOME/cache/" "./$snapshot_gemset/"
51
+ done; unset snapshot_gemset
52
+ __rvm_pushpop
53
+
54
+ $rvm_scripts_path/log "info" "Backing up all of your installed rubies"
55
+ echo '#!/usr/bin/env bash -e' > "$snapshot_temp_path/install-rubies.sh"
56
+ echo "source \"\$rvm_scripts_path/rvm\" || true" >> "$snapshot_temp_path/install-rubies.sh"
57
+ local snapshot_ruby_name_file="$rvm_tmp_path/$$-rubies"
58
+ local snapshot_alias_name_file="$rvm_tmp_path/$$-aliases"
59
+ local snapshot_installable_file="$rvm_tmp_path/$$-installable"
60
+
61
+ $rvm_scripts_path/alias list | awk -F ' => ' '{print $1}' | sort | uniq 2>/dev/null > "$snapshot_alias_name_file"
62
+ $rvm_scripts_path/list strings | tr ' ' '\n' | sort | uniq > "$snapshot_ruby_name_file"
63
+ comm -2 -3 "$snapshot_ruby_name_file" "$snapshot_alias_name_file" > "$snapshot_installable_file"
64
+ rm -rf "$snapshot_ruby_name_file" "$snapshot_alias_name_file"
65
+
66
+ local snapshot_primary_ruby="$(cat "$snapshot_installable_file" | grep '^\(ree\|ruby-1.8.7\)' | grep -v '-head$' | sort -r | head -n1)"
67
+ local snapshot_ruby_order="$snapshot_primary_ruby $(cat "$snapshot_installable_file" | grep -v "$snapshot_primary_ruby")"
68
+ for snapshot_ruby_name in $snapshot_ruby_order ; do
69
+ snapshot_install_command="$(__rvm_recorded_install_command "$snapshot_ruby_name")"
70
+ if [[ -n "$snapshot_install_command" ]]; then
71
+ echo "rvm install $snapshot_install_command" | sed "s#$rvm_path#'\\\"\$rvm_path\\\"'#" >> "$snapshot_temp_path/install-rubies.sh"
72
+ else
73
+ __rvm_become "$snapshot_ruby_name"
74
+ ruby "$rvm_path/lib/rvm/install_command_dumper.rb" >> "$snapshot_temp_path/install-rubies.sh"
75
+ fi
76
+ unset snapshot_install_command
77
+ done; unset snapshot_ruby_name snapshot_primary_ruby
78
+
79
+ rm -rf "$snapshot_installable_file"
80
+
81
+ $rvm_scripts_path/log "info" "Compressing snapshotting"
82
+ local destination_path="$PWD"
83
+ __rvm_pushpop "$snapshot_temp_path"
84
+ rm -rf "$destination_path/$1.tar.gz"
85
+ tar czf "$destination_path/$1.tar.gz" .
86
+ result="$?"
87
+ __error_on_result "$result" "Error creating archive $destination_path/$1.tar.gz" && return "$result"
88
+ __rvm_pushpop
89
+
90
+ $rvm_scripts_path/log "info" "Cleaning up"
91
+ rm -rf "$snapshot_temp_path"
92
+
93
+ $rvm_scripts_path/log "info" "Snapshot complete"
94
+
95
+ }
96
+
97
+ snapshot_load() {
98
+ if [[ -z "$1" ]]; then
99
+ echo "Usage: rvm snapshot load name" >&2
100
+ echo "Loads a snapshot from <name>.tar.gz in the current directory." >&2
101
+ return 1
102
+ fi
103
+
104
+ local snapshot_archive="$PWD/$(echo "$1" | sed 's/.tar.gz$//').tar.gz"
105
+
106
+ if ! [[ -s "$snapshot_archive" ]]; then
107
+ echo "The provides snapshot '$(basename "$snapshot_archive")' doesn't exist." >&2
108
+ return 1
109
+ fi
110
+
111
+ local snapshot_temp_path="$rvm_tmp_path/$$-snapshot"
112
+
113
+ rm -rf "$snapshot_temp_path"
114
+ mkdir -p "$snapshot_temp_path"
115
+
116
+ $rvm_scripts_path/log "info" "Extracting snapshot"
117
+ __rvm_pushpop "$snapshot_temp_path"
118
+ tar xzf "$snapshot_archive"
119
+ result="$?"
120
+ __error_on_result "$result" "Error extracting the archive '$snapshot_archive'" && return "$result"
121
+ __rvm_pushpop
122
+
123
+ $rvm_scripts_path/log "info" "Restoring user settings"
124
+ cp -f "$snapshot_temp_path/user" "$rvm_config_path/user"
125
+
126
+ $rvm_scripts_path/log "info" "Installing rvm-managed packages"
127
+ for snapshot_package in $(cat "$snapshot_temp_path/packages"); do
128
+ $rvm_scripts_path/package install "$snapshot_package"
129
+ result="$?"
130
+ __error_on_result "$result" "Error installing package '$snapshot_package'" && return "$result"
131
+ done; unset snapshot_package
132
+
133
+ $rvm_scripts_path/log "info" "Installing rubies"
134
+ chmod +x "$snapshot_temp_path/install-rubies.sh"
135
+ $snapshot_temp_path/install-rubies.sh
136
+ result="$?"
137
+ __error_on_result "$result" "Error importing rubies." && return "$result"
138
+
139
+ export rvm_create_flag=1
140
+ $rvm_scripts_path/log "info" "Setting up gemsets"
141
+ __rvm_pushpop "$snapshot_temp_path/gems"
142
+ for snapshot_gemset in $(\ls | grep '\.gems$' | sed 's/.gems$//'); do
143
+ __rvm_become "$snapshot_gemset"
144
+ result="$?"
145
+ __error_on_result "$result" "Error becoming '$snapshot_gemset'" && return "$result"
146
+ mkdir -p "$GEM_HOME/cache/"
147
+ cp -Rf "$snapshot_gemset/" "$GEM_HOME/cache/"
148
+ result="$?"
149
+ __error_on_result "$result" "Error copying across cache for $snapshot_gemset" && return "$result"
150
+ $rvm_scripts_path/gemsets import "$snapshot_gemset" >/dev/null 2>&1
151
+ result="$?"
152
+ __error_on_result "$result" "Error importing gemset for $snapshot_gemset" && return "$result"
153
+ done; unset snapshot_gemset
154
+ __rvm_pushpop
155
+
156
+ $rvm_scripts_path/log "info" "Restoring aliases"
157
+ while read -r package_info; do
158
+ local alias_name="$(echo "$package_info" | awk -F= '{print $1}')"
159
+ local alias_ruby="$(echo "$package_info" | awk -F= '{print $2}')"
160
+ $rvm_scripts_path/alias create "$alias_name" "$alias_ruby"
161
+ if [[ "$alias_name" = "default" ]]; then
162
+ (source "$rvm_scripts_path/rvm" && rvm use "$alias_ruby" --default) >/dev/null 2>&1
163
+ result="$?"
164
+ __error_on_result "$result" "Error setting default to $alias_ruby" && return "$result"
165
+ fi
166
+ done < "$snapshot_temp_path/alias"
167
+ unset package_info
168
+
169
+ $rvm_scripts_path/log "info" "Cleaning up load process"
170
+ rm -rf "$snapshot_temp_path"
171
+
172
+ $rvm_scripts_path/log "info" "Loaded snapshot from $(basename "$snapshot_archive")"
173
+ }
174
+
175
+ snapshot_usage() {
176
+ echo "Usage: rvm snapshot {save,load} file" >&2
177
+ return 1
178
+ }
179
+
180
+ action="$1"
181
+ [[ "$#" -gt 0 ]] && shift
182
+
183
+ case "$action" in
184
+ save) snapshot_save "$@" ;;
185
+ load) snapshot_load "$@" ;;
186
+ *) snapshot_usage ;;
187
+ esac
188
+
189
+ exit $?
@@ -1,7 +1,9 @@
1
+ #!/usr/bin/env bash
2
+
1
3
  source "$rvm_scripts_path/base"
2
4
 
3
5
  usage() {
4
- echo "Usage: rvm tools {identifier,path-identifier}" 1>&2
6
+ echo "Usage: rvm tools {identifier,path-identifier,strings}" 1>&2
5
7
  exit 1
6
8
  }
7
9
 
@@ -21,6 +23,18 @@ tools_path_identifier() {
21
23
  __rvm_environment_identifier)
22
24
  }
23
25
 
26
+ tools_strings() {
27
+ for ruby_name in "$@"; do
28
+ __rvm_unset_ruby_variables
29
+ rvm_ruby_string="$ruby_name"
30
+ if { __rvm_ruby_string && __rvm_select; } >/dev/null 2>&1; then
31
+ basename "$rvm_ruby_gem_home"
32
+ else
33
+ echo ""
34
+ fi
35
+ done
36
+ }
37
+
24
38
  [[ -z "$1" ]] && usage
25
39
 
26
40
  action="$1"; shift
@@ -28,6 +42,7 @@ action="$1"; shift
28
42
  case "$action" in
29
43
  identifier) tools_identifier ;;
30
44
  path-identifier) tools_path_identifier "$@" ;;
45
+ strings) tools_strings "$@" ;;
31
46
  *) usage ;;
32
47
  esac
33
48
 
@@ -114,7 +114,7 @@ fi
114
114
 
115
115
  spinner
116
116
 
117
- mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_patches_path $rvm_tmp_path
117
+ mkdir -p $rvm_archives_path $rvm_src_path $rvm_log_path $rvm_bin_path $rvm_gems_path $rvm_rubies_path $rvm_config_path $rvm_hooks_path $rvm_tmp_path
118
118
 
119
119
  for file in README LICENCE ; do
120
120
  spinner
@@ -85,6 +85,12 @@ __rvm_quote_args() {
85
85
  echo "$quoted_string" | sed -e 's/^ *//g' -e 's/ *$//g'
86
86
  }
87
87
 
88
+ __rvm_quote_args_with_shift() {
89
+ local shift_value="$1"; shift
90
+ local program_args=( "$@" )
91
+ __rvm_quote_args "${program_args[@]:$shift_value}"
92
+ }
93
+
88
94
  __rvm_warn_on_rubyopt() {
89
95
  if [[ -n "$RUBYOPT" ]]; then
90
96
  $rvm_scripts_path/log "warn" "Please note: You have the RUBYOPT environment variable set and this may interfere with normal rvm operations. We sugges unsetting it."
@@ -180,7 +186,7 @@ __rvm_cleanup_variables() {
180
186
 
181
187
  if [[ "$rvm_sticky_flag" = "1" ]] ; then export rvm_gemset_name ; else unset rvm_gemset_name ; fi
182
188
 
183
- unset rvm_action rvm_irbrc_file rvm_command rvm_error_message rvm_url 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_ruby_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_ruby_aliases rvm_patch_names rvm_clang_flag
189
+ unset rvm_action rvm_irbrc_file rvm_command rvm_error_message rvm_url 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_ruby_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_ruby_aliases rvm_patch_names rvm_clang_flag rvm_install_arguments
184
190
  }
185
191
 
186
192
  # Unset ruby-specific variables
@@ -217,9 +223,9 @@ __rvm_ensure_has_18_compat_ruby() {
217
223
  if [[ -z "$(__rvm_18_compat_ruby)" ]]; then
218
224
  # TODO: install currently doesn't return the correct status.
219
225
  local compat_result=0
220
- if ! ( rvm install 1.8.7 ); then
221
- $rvm_scripts_path/log "fatal" "To proceed rvm requires a 1.8-compatible ruby is installed. We attempted to install 1.8.7 automatically but it failed."
222
- $rvm_scripts_path/log "fatal" "Please install it manually (or a compatible alternative) to proceed."
226
+ if ! ( $rvm_scripts_path/manage install 1.8.7 ); then
227
+ $rvm_scripts_path/log "fail" "To proceed rvm requires a 1.8-compatible ruby is installed. We attempted to install 1.8.7 automatically but it failed."
228
+ $rvm_scripts_path/log "fail" "Please install it manually (or a compatible alternative) to proceed."
223
229
  compat_result=1
224
230
  fi
225
231
  unset original_ruby
@@ -786,3 +792,37 @@ __rvm_project_rvmrc() {
786
792
  fi
787
793
  done
788
794
  }
795
+
796
+ __rvm_record_install() {
797
+ [[ -z "$1" ]] && return
798
+ local recorded_ruby_name="$($rvm_scripts_path/tools strings "$1")"
799
+ local rvm_install_record_file="$rvm_config_path/installs"
800
+ local rvm_install_command="$(echo "$recorded_ruby_name $rvm_install_arguments" | __rvm_strip)"
801
+ touch "$rvm_install_record_file"
802
+ rm -f "$rvm_install_record_file.tmp"
803
+ cat "$rvm_install_record_file" | grep -v "^$recorded_ruby_name " > "$rvm_install_record_file.tmp"
804
+ echo "$rvm_install_command" >> "$rvm_install_record_file.tmp"
805
+ rm -f "$rvm_install_record_file"
806
+ mv "$rvm_install_record_file.tmp" "$rvm_install_record_file"
807
+ }
808
+
809
+ __rvm_remove_install_record() {
810
+ local recorded_ruby_name="$($rvm_scripts_path/tools strings "$1")"
811
+ local rvm_install_record_file="$rvm_config_path/installs"
812
+ if [[ -s "$rvm_install_record_file" ]]; then
813
+ mv "$rvm_install_record_file" "$rvm_install_record_file.tmp"
814
+ cat "$rvm_install_record_file.tmp" | grep -v "^$recorded_ruby_name " > "$rvm_install_record_file"
815
+ rm -f "$rvm_install_record_file.tmp"
816
+ fi
817
+ }
818
+
819
+ __rvm_recorded_install_command() {
820
+ local recorded_ruby_name="$($rvm_scripts_path/tools strings "$1" | awk -F"$rvm_gemset_separator" '{print $1}')"
821
+ [[ -z "$recorded_ruby_name" ]] && return 1
822
+ local recorded_ruby_match="^$recorded_ruby_name "
823
+ if [[ -s "$rvm_config_path/installs" ]] && grep -q "$recorded_ruby_match" "$rvm_config_path/installs" ; then
824
+ cat "$rvm_config_path/installs" | grep "$recorded_ruby_match" | head -n1
825
+ else
826
+ return 1
827
+ fi
828
+ }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rvm
3
3
  version: !ruby/object:Gem::Version
4
- hash: 79
4
+ hash: 77
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 42
10
- version: 0.1.42
9
+ - 43
10
+ version: 0.1.43
11
11
  platform: ruby
12
12
  authors:
13
13
  - Wayne E. Seguin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-20 00:00:00 -04:00
18
+ date: 2010-07-21 00:00:00 -04:00
19
19
  default_executable: rvm-install
20
20
  dependencies: []
21
21
 
@@ -88,6 +88,7 @@ files:
88
88
  - lib/rvm/environment/utility.rb
89
89
  - lib/rvm/environment/wrapper.rb
90
90
  - lib/rvm/errors.rb
91
+ - lib/rvm/install_command_dumper.rb
91
92
  - lib/rvm/shell.rb
92
93
  - lib/rvm/shell/abstract_wrapper.rb
93
94
  - lib/rvm/shell/result.rb
@@ -137,6 +138,7 @@ files:
137
138
  - scripts/rvm-install
138
139
  - scripts/selector
139
140
  - scripts/set
141
+ - scripts/snapshot
140
142
  - scripts/tools
141
143
  - scripts/update
142
144
  - scripts/utility