rvm 0.1.42 → 0.1.43

Sign up to get free protection for your applications and to get access to all the features.
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