rubygems-update 2.0.17 → 2.1.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubygems-update might be problematic. Click here for more details.

Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -0
  4. data/.autotest +1 -1
  5. data/History.txt +82 -153
  6. data/Manifest.txt +35 -9
  7. data/Rakefile +35 -36
  8. data/lib/rubygems.rb +106 -18
  9. data/lib/rubygems/available_set.rb +68 -0
  10. data/lib/rubygems/basic_specification.rb +139 -0
  11. data/lib/rubygems/command_manager.rb +37 -40
  12. data/lib/rubygems/commands/cert_command.rb +78 -29
  13. data/lib/rubygems/commands/cleanup_command.rb +2 -2
  14. data/lib/rubygems/commands/contents_command.rb +101 -58
  15. data/lib/rubygems/commands/dependency_command.rb +94 -53
  16. data/lib/rubygems/commands/environment_command.rb +70 -53
  17. data/lib/rubygems/commands/fetch_command.rb +1 -2
  18. data/lib/rubygems/commands/help_command.rb +85 -55
  19. data/lib/rubygems/commands/install_command.rb +84 -42
  20. data/lib/rubygems/commands/outdated_command.rb +2 -12
  21. data/lib/rubygems/commands/owner_command.rb +6 -0
  22. data/lib/rubygems/commands/pristine_command.rb +26 -16
  23. data/lib/rubygems/commands/sources_command.rb +85 -70
  24. data/lib/rubygems/commands/uninstall_command.rb +32 -2
  25. data/lib/rubygems/commands/update_command.rb +111 -75
  26. data/lib/rubygems/config_file.rb +15 -3
  27. data/lib/rubygems/core_ext/kernel_require.rb +9 -31
  28. data/lib/rubygems/defaults.rb +8 -0
  29. data/lib/rubygems/dependency.rb +4 -2
  30. data/lib/rubygems/dependency_installer.rb +180 -170
  31. data/lib/rubygems/dependency_resolver.rb +191 -526
  32. data/lib/rubygems/dependency_resolver/activation_request.rb +109 -0
  33. data/lib/rubygems/dependency_resolver/api_set.rb +65 -0
  34. data/lib/rubygems/dependency_resolver/api_specification.rb +36 -0
  35. data/lib/rubygems/dependency_resolver/composed_set.rb +18 -0
  36. data/lib/rubygems/dependency_resolver/current_set.rb +16 -0
  37. data/lib/rubygems/dependency_resolver/dependency_conflict.rb +85 -0
  38. data/lib/rubygems/dependency_resolver/dependency_request.rb +51 -0
  39. data/lib/rubygems/dependency_resolver/index_set.rb +59 -0
  40. data/lib/rubygems/dependency_resolver/index_specification.rb +53 -0
  41. data/lib/rubygems/dependency_resolver/installed_specification.rb +38 -0
  42. data/lib/rubygems/dependency_resolver/installer_set.rb +130 -0
  43. data/lib/rubygems/exceptions.rb +88 -1
  44. data/lib/rubygems/ext/builder.rb +1 -1
  45. data/lib/rubygems/gem_runner.rb +17 -9
  46. data/lib/rubygems/gemcutter_utilities.rb +72 -42
  47. data/lib/rubygems/install_default_message.rb +12 -0
  48. data/lib/rubygems/install_update_options.rb +3 -0
  49. data/lib/rubygems/installer.rb +55 -30
  50. data/lib/rubygems/name_tuple.rb +18 -7
  51. data/lib/rubygems/package.rb +50 -25
  52. data/lib/rubygems/package/tar_test_case.rb +9 -9
  53. data/lib/rubygems/package/tar_writer.rb +35 -12
  54. data/lib/rubygems/package_task.rb +2 -5
  55. data/lib/rubygems/path_support.rb +10 -0
  56. data/lib/rubygems/platform.rb +9 -3
  57. data/lib/rubygems/psych_additions.rb +1 -1
  58. data/lib/rubygems/remote_fetcher.rb +9 -276
  59. data/lib/rubygems/request.rb +267 -0
  60. data/lib/rubygems/request_set.rb +123 -125
  61. data/lib/rubygems/request_set/gem_dependency_api.rb +39 -0
  62. data/lib/rubygems/security.rb +32 -23
  63. data/lib/rubygems/security/policy.rb +35 -9
  64. data/lib/rubygems/security/signer.rb +2 -2
  65. data/lib/rubygems/server.rb +8 -16
  66. data/lib/rubygems/source.rb +25 -14
  67. data/lib/rubygems/source/installed.rb +28 -0
  68. data/lib/rubygems/source/local.rb +122 -0
  69. data/lib/rubygems/source/specific_file.rb +28 -0
  70. data/lib/rubygems/source_local.rb +2 -89
  71. data/lib/rubygems/source_specific_file.rb +2 -26
  72. data/lib/rubygems/spec_fetcher.rb +11 -11
  73. data/lib/rubygems/specification.rb +186 -198
  74. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +88 -30
  75. data/lib/rubygems/ssl_certs/Entrust_net-Secure-Server-Certification-Authority.pem +90 -0
  76. data/lib/rubygems/ssl_certs/{GeoTrustGlobalCA.pem → GeoTrust_Global_CA.pem} +20 -20
  77. data/lib/rubygems/ssl_certs/VerisignClass3PublicPrimaryCertificationAuthority-G2.pem +57 -0
  78. data/lib/rubygems/stub_specification.rb +119 -0
  79. data/lib/rubygems/test_case.rb +117 -49
  80. data/lib/rubygems/uninstaller.rb +14 -9
  81. data/lib/rubygems/uri_formatter.rb +39 -0
  82. data/lib/rubygems/util/list.rb +44 -0
  83. data/lib/rubygems/version.rb +15 -5
  84. data/lib/rubygems/version_option.rb +8 -2
  85. data/test/rubygems/ca_cert.pem +23 -0
  86. data/test/rubygems/client.pem +49 -0
  87. data/test/rubygems/encrypted_private_key.pem +30 -0
  88. data/test/rubygems/invalid_client.pem +49 -0
  89. data/test/rubygems/specifications/bar-0.0.2.gemspec +9 -0
  90. data/test/rubygems/specifications/foo-0.0.1.gemspec +0 -0
  91. data/test/rubygems/test_gem.rb +76 -454
  92. data/test/rubygems/test_gem_command_manager.rb +23 -21
  93. data/test/rubygems/test_gem_commands_cert_command.rb +154 -14
  94. data/test/rubygems/test_gem_commands_cleanup_command.rb +15 -0
  95. data/test/rubygems/test_gem_commands_contents_command.rb +32 -4
  96. data/test/rubygems/test_gem_commands_environment_command.rb +9 -1
  97. data/test/rubygems/test_gem_commands_fetch_command.rb +2 -28
  98. data/test/rubygems/test_gem_commands_help_command.rb +6 -3
  99. data/test/rubygems/test_gem_commands_install_command.rb +2 -65
  100. data/test/rubygems/test_gem_commands_owner_command.rb +49 -0
  101. data/test/rubygems/test_gem_commands_pristine_command.rb +30 -0
  102. data/test/rubygems/test_gem_commands_sources_command.rb +1 -1
  103. data/test/rubygems/test_gem_commands_uninstall_command.rb +33 -0
  104. data/test/rubygems/test_gem_commands_update_command.rb +2 -1
  105. data/test/rubygems/test_gem_config_file.rb +12 -0
  106. data/test/rubygems/test_gem_dependency_installer.rb +58 -65
  107. data/test/rubygems/test_gem_dependency_resolver.rb +6 -3
  108. data/test/rubygems/test_gem_dependency_resolver_dependency_conflict.rb +36 -0
  109. data/test/rubygems/test_gem_ext_builder.rb +2 -4
  110. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +7 -2
  111. data/test/rubygems/test_gem_gem_runner.rb +17 -13
  112. data/test/rubygems/test_gem_gemcutter_utilities.rb +6 -19
  113. data/test/rubygems/test_gem_impossible_dependencies_error.rb +41 -0
  114. data/test/rubygems/test_gem_install_update_options.rb +4 -1
  115. data/test/rubygems/test_gem_installer.rb +31 -2
  116. data/test/rubygems/test_gem_name_tuple.rb +22 -0
  117. data/test/rubygems/test_gem_package.rb +122 -11
  118. data/test/rubygems/test_gem_package_old.rb +8 -0
  119. data/test/rubygems/test_gem_package_tar_reader.rb +9 -8
  120. data/test/rubygems/test_gem_package_tar_reader_entry.rb +1 -1
  121. data/test/rubygems/test_gem_package_tar_writer.rb +78 -56
  122. data/test/rubygems/test_gem_package_task.rb +2 -23
  123. data/test/rubygems/test_gem_path_support.rb +17 -0
  124. data/test/rubygems/test_gem_platform.rb +18 -0
  125. data/test/rubygems/test_gem_remote_fetcher.rb +106 -385
  126. data/test/rubygems/test_gem_request.rb +239 -0
  127. data/test/rubygems/test_gem_requirement.rb +9 -11
  128. data/test/rubygems/test_gem_security.rb +58 -2
  129. data/test/rubygems/test_gem_security_policy.rb +42 -1
  130. data/test/rubygems/test_gem_security_signer.rb +13 -1
  131. data/test/rubygems/test_gem_security_trust_dir.rb +5 -1
  132. data/test/rubygems/test_gem_server.rb +1 -105
  133. data/test/rubygems/test_gem_source.rb +4 -14
  134. data/test/rubygems/test_gem_source_local.rb +4 -4
  135. data/test/rubygems/test_gem_source_specific_file.rb +1 -1
  136. data/test/rubygems/test_gem_spec_fetcher.rb +0 -12
  137. data/test/rubygems/test_gem_specification.rb +452 -28
  138. data/test/rubygems/test_gem_stub_specification.rb +30 -0
  139. data/test/rubygems/test_gem_uninstaller.rb +14 -0
  140. data/test/rubygems/test_gem_uri_formatter.rb +20 -0
  141. data/test/rubygems/test_gem_version.rb +23 -13
  142. data/test/rubygems/test_gem_version_option.rb +63 -1
  143. data/test/rubygems/test_require.rb +0 -12
  144. data/util/create_encrypted_key.rb +16 -0
  145. metadata +161 -23
  146. metadata.gz.sig +0 -0
  147. data/CVE-2013-4287.txt +0 -36
  148. data/CVE-2013-4363.txt +0 -45
  149. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  150. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  151. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  152. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  153. data/test/rubygems/test_bundled_ca.rb +0 -59
  154. data/util/update_bundled_ca_certificates.rb +0 -103
@@ -1,6 +1,7 @@
1
1
  require 'rubygems/command'
2
2
  require 'rubygems/version_option'
3
3
  require 'rubygems/uninstaller'
4
+ require 'fileutils'
4
5
 
5
6
  ##
6
7
  # Gem uninstaller command line tool
@@ -14,7 +15,7 @@ class Gem::Commands::UninstallCommand < Gem::Command
14
15
  def initialize
15
16
  super 'uninstall', 'Uninstall gems from the local repository',
16
17
  :version => Gem::Requirement.default, :user_install => true,
17
- :check_dev => false
18
+ :install_dir => Gem.dir, :check_dev => false
18
19
 
19
20
  add_option('-a', '--[no-]all',
20
21
  'Uninstall all matching versions'
@@ -67,6 +68,12 @@ class Gem::Commands::UninstallCommand < Gem::Command
67
68
  options[:force] = value
68
69
  end
69
70
 
71
+ add_option('--[no-]abort-on-dependent',
72
+ 'Prevent uninstalling gems that are',
73
+ 'depended on by other gems.') do |value, options|
74
+ options[:abort_on_dependent] = value
75
+ end
76
+
70
77
  add_version_option
71
78
  add_platform_option
72
79
  end
@@ -86,8 +93,31 @@ class Gem::Commands::UninstallCommand < Gem::Command
86
93
  end
87
94
 
88
95
  def execute
89
- # REFACTOR: stolen from cleanup_command
96
+ if options[:all] and not options[:args].empty? then
97
+ alert_error 'Gem names and --all may not be used together'
98
+ terminate_interaction 1
99
+ elsif options[:all] then
100
+ uninstall_all
101
+ else
102
+ uninstall_specific
103
+ end
104
+ end
105
+
106
+ def uninstall_all
107
+ install_dir = options[:install_dir]
108
+
109
+ dirs_to_be_emptied = Dir[File.join(install_dir, '*')]
110
+ dirs_to_be_emptied.delete_if { |dir| dir.end_with? 'build_info' }
111
+
112
+ dirs_to_be_emptied.each do |dir|
113
+ FileUtils.rm_rf Dir[File.join(dir, '*')]
114
+ end
115
+ alert("Successfully uninstalled all gems in #{install_dir}")
116
+ end
117
+
118
+ def uninstall_specific
90
119
  deplist = Gem::DependencyList.new
120
+
91
121
  get_all_gem_names.uniq.each do |name|
92
122
  Gem::Specification.find_all_by_name(name).each do |spec|
93
123
  deplist.add spec
@@ -56,23 +56,33 @@ class Gem::Commands::UpdateCommand < Gem::Command
56
56
  "#{program_name} GEMNAME [GEMNAME ...]"
57
57
  end
58
58
 
59
+ def check_latest_rubygems version # :nodoc:
60
+ if Gem.rubygems_version == version then
61
+ say "Latest version currently installed. Aborting."
62
+ terminate_interaction
63
+ end
64
+
65
+ options[:user_install] = false
66
+ end
67
+
68
+ def check_update_arguments # :nodoc:
69
+ unless options[:args].empty? then
70
+ alert_error "Gem names are not allowed with the --system option"
71
+ terminate_interaction 1
72
+ end
73
+ end
74
+
59
75
  def execute
60
76
  hig = {}
61
77
 
62
78
  if options[:system] then
63
79
  update_rubygems
64
80
  return
65
- else
66
- say "Updating installed gems"
81
+ end
67
82
 
68
- hig = {} # highest installed gems
83
+ say "Updating installed gems"
69
84
 
70
- Gem::Specification.each do |spec|
71
- if hig[spec.name].nil? or hig[spec.name].version < spec.version then
72
- hig[spec.name] = spec
73
- end
74
- end
75
- end
85
+ hig = highest_installed_gems
76
86
 
77
87
  gems_to_update = which_to_update hig, options[:args].uniq
78
88
 
@@ -85,51 +95,65 @@ class Gem::Commands::UpdateCommand < Gem::Command
85
95
  end
86
96
  end
87
97
 
88
- def update_gem name, version = Gem::Requirement.default
89
- return if @updated.any? { |spec| spec.name == name }
98
+ def fetch_remote_gems spec # :nodoc:
99
+ dependency = Gem::Dependency.new spec.name, "> #{spec.version}"
100
+ dependency.prerelease = options[:prerelease]
90
101
 
91
- @installer ||= Gem::DependencyInstaller.new options
102
+ fetcher = Gem::SpecFetcher.fetcher
92
103
 
93
- success = false
104
+ spec_tuples, _ = fetcher.search_for_dependency dependency
94
105
 
95
- say "Updating #{name}"
96
- begin
97
- @installer.install name, Gem::Requirement.new(version)
98
- success = true
99
- rescue Gem::InstallError => e
100
- alert_error "Error installing #{name}:\n\t#{e.message}"
101
- success = false
102
- end
106
+ spec_tuples
107
+ end
103
108
 
104
- @installer.installed_gems.each do |spec|
105
- @updated << spec
109
+ def highest_installed_gems # :nodoc:
110
+ hig = {} # highest installed gems
111
+
112
+ Gem::Specification.each do |spec|
113
+ if hig[spec.name].nil? or hig[spec.name].version < spec.version then
114
+ hig[spec.name] = spec
115
+ end
106
116
  end
117
+
118
+ hig
107
119
  end
108
120
 
109
- def update_gems gems_to_update
110
- gems_to_update.uniq.sort.each do |(name, version)|
111
- update_gem name, version
121
+ def highest_remote_version spec # :nodoc:
122
+ spec_tuples = fetch_remote_gems spec
123
+
124
+ matching_gems = spec_tuples.select do |g,_|
125
+ g.name == spec.name and g.match_platform?
112
126
  end
113
127
 
114
- @updated
128
+ highest_remote_gem = matching_gems.sort_by { |g,_| g.version }.last
129
+
130
+ highest_remote_gem ||= [Gem::NameTuple.null]
131
+
132
+ highest_remote_gem.first.version
115
133
  end
116
134
 
117
- ##
118
- # Update RubyGems software to the latest version.
135
+ def install_rubygems version # :nodoc:
136
+ args = update_rubygems_arguments
119
137
 
120
- def update_rubygems
121
- unless options[:args].empty? then
122
- alert_error "Gem names are not allowed with the --system option"
123
- terminate_interaction 1
124
- end
138
+ update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}"
125
139
 
126
- options[:user_install] = false
140
+ Dir.chdir update_dir do
141
+ say "Installing RubyGems #{version}"
127
142
 
128
- # TODO: rename version and other variable name conflicts
129
- # TODO: get rid of all this indirection on name and other BS
143
+ # Make sure old rubygems isn't loaded
144
+ old = ENV["RUBYOPT"]
145
+ ENV.delete("RUBYOPT") if old
146
+ installed = system Gem.ruby, 'setup.rb', *args
147
+ say "RubyGems system software updated" if installed
148
+ ENV["RUBYOPT"] = old if old
149
+ end
150
+ end
130
151
 
152
+ def rubygems_target_version
131
153
  version = options[:system]
132
- if version == true then
154
+ update_latest = version == true
155
+
156
+ if update_latest then
133
157
  version = Gem::Version.new Gem::VERSION
134
158
  requirement = Gem::Requirement.new ">= #{Gem::VERSION}"
135
159
  else
@@ -146,46 +170,72 @@ class Gem::Commands::UpdateCommand < Gem::Command
146
170
  }
147
171
 
148
172
  gems_to_update = which_to_update hig, options[:args], :system
149
- name, up_ver = gems_to_update.first
150
- current_ver = Gem.rubygems_version
173
+ _, up_ver = gems_to_update.first
151
174
 
152
- target = if options[:system] == true then
175
+ target = if update_latest then
153
176
  up_ver
154
177
  else
155
178
  version
156
179
  end
157
180
 
158
- if current_ver == target then
159
- # if options[:system] != true and version == current_ver then
160
- say "Latest version currently installed. Aborting."
161
- terminate_interaction
181
+ return target, requirement
182
+ end
183
+
184
+ def update_gem name, version = Gem::Requirement.default
185
+ return if @updated.any? { |spec| spec.name == name }
186
+
187
+ @installer ||= Gem::DependencyInstaller.new options
188
+
189
+ success = false
190
+
191
+ say "Updating #{name}"
192
+ begin
193
+ @installer.install name, Gem::Requirement.new(version)
194
+ success = true
195
+ rescue Gem::InstallError => e
196
+ alert_error "Error installing #{name}:\n\t#{e.message}"
197
+ success = false
162
198
  end
163
199
 
164
- update_gem name, target
200
+ @installer.installed_gems.each do |spec|
201
+ @updated << spec
202
+ end
203
+ end
204
+
205
+ def update_gems gems_to_update
206
+ gems_to_update.uniq.sort.each do |(name, version)|
207
+ update_gem name, version
208
+ end
209
+
210
+ @updated
211
+ end
212
+
213
+ ##
214
+ # Update RubyGems software to the latest version.
215
+
216
+ def update_rubygems
217
+ check_update_arguments
218
+
219
+ version, requirement = rubygems_target_version
220
+
221
+ check_latest_rubygems version
222
+
223
+ update_gem 'rubygems-update', version
165
224
 
166
225
  installed_gems = Gem::Specification.find_all_by_name 'rubygems-update', requirement
167
226
  version = installed_gems.last.version
168
227
 
228
+ install_rubygems version
229
+ end
230
+
231
+ def update_rubygems_arguments # :nodoc:
169
232
  args = []
170
233
  args << '--prefix' << Gem.prefix if Gem.prefix
171
234
  # TODO use --document for >= 1.9 , --no-rdoc --no-ri < 1.9
172
235
  args << '--no-rdoc' unless options[:document].include? 'rdoc'
173
236
  args << '--no-ri' unless options[:document].include? 'ri'
174
237
  args << '--no-format-executable' if options[:no_format_executable]
175
-
176
- update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}"
177
-
178
- Dir.chdir update_dir do
179
- say "Installing RubyGems #{version}"
180
- setup_cmd = "#{Gem.ruby} setup.rb #{args.join ' '}"
181
-
182
- # Make sure old rubygems isn't loaded
183
- old = ENV["RUBYOPT"]
184
- ENV.delete("RUBYOPT") if old
185
- installed = system setup_cmd
186
- say "RubyGems system software updated" if installed
187
- ENV["RUBYOPT"] = old if old
188
- end
238
+ args
189
239
  end
190
240
 
191
241
  def which_to_update highest_installed_gems, gem_names, system = false
@@ -195,21 +245,7 @@ class Gem::Commands::UpdateCommand < Gem::Command
195
245
  next if not gem_names.empty? and
196
246
  gem_names.all? { |name| /#{name}/ !~ l_spec.name }
197
247
 
198
- dependency = Gem::Dependency.new l_spec.name, "> #{l_spec.version}"
199
- dependency.prerelease = options[:prerelease]
200
-
201
- fetcher = Gem::SpecFetcher.fetcher
202
-
203
- spec_tuples, _ = fetcher.search_for_dependency dependency
204
-
205
- matching_gems = spec_tuples.select do |g,_|
206
- g.name == l_name and g.match_platform?
207
- end
208
-
209
- highest_remote_gem = matching_gems.sort_by { |g,_| g.version }.last
210
-
211
- highest_remote_gem ||= [Gem::NameTuple.null]
212
- highest_remote_ver = highest_remote_gem.first.version
248
+ highest_remote_ver = highest_remote_version l_spec
213
249
 
214
250
  if system or (l_spec.version < highest_remote_ver) then
215
251
  result << [l_spec.name, [l_spec.version, highest_remote_ver].max]
@@ -5,7 +5,6 @@
5
5
  #++
6
6
 
7
7
  require 'rubygems/user_interaction'
8
- require 'rbconfig'
9
8
 
10
9
  ##
11
10
  # Gem::ConfigFile RubyGems options and gem command options from gemrc.
@@ -141,6 +140,11 @@ class Gem::ConfigFile
141
140
 
142
141
  attr_reader :ssl_ca_cert
143
142
 
143
+ ##
144
+ # Path name of directory or file of openssl client certificate, used for remote https connection with client authentication
145
+
146
+ attr_reader :ssl_client_cert
147
+
144
148
  ##
145
149
  # Create the config file object. +args+ is the list of arguments
146
150
  # from the command line.
@@ -211,6 +215,7 @@ class Gem::ConfigFile
211
215
 
212
216
  @ssl_verify_mode = @hash[:ssl_verify_mode] if @hash.key? :ssl_verify_mode
213
217
  @ssl_ca_cert = @hash[:ssl_ca_cert] if @hash.key? :ssl_ca_cert
218
+ @ssl_client_cert = @hash[:ssl_client_cert] if @hash.key? :ssl_client_cert
214
219
 
215
220
  @api_keys = nil
216
221
  @rubygems_api_key = nil
@@ -247,6 +252,10 @@ Your gem push credentials file located at:
247
252
 
248
253
  has file permissions of 0#{existing_permissions.to_s 8} but 0600 is required.
249
254
 
255
+ To fix this error run:
256
+
257
+ \tchmod 0600 #{credentials_path}
258
+
250
259
  You should reset your credentials at:
251
260
 
252
261
  \thttps://rubygems.org/profile/edit
@@ -310,6 +319,9 @@ if you believe they were disclosed to a third party.
310
319
  @rubygems_api_key = api_key
311
320
  end
312
321
 
322
+ YAMLErrors = [ArgumentError]
323
+ YAMLErrors << Psych::SyntaxError if defined?(Psych::SyntaxError)
324
+
313
325
  def load_file(filename)
314
326
  Gem.load_yaml
315
327
 
@@ -322,8 +334,8 @@ if you believe they were disclosed to a third party.
322
334
  return {}
323
335
  end
324
336
  return content
325
- rescue ArgumentError
326
- warn "Failed to load #{filename}"
337
+ rescue *YAMLErrors => e
338
+ warn "Failed to load #{filename}, #{e.to_s}"
327
339
  rescue Errno::EACCES
328
340
  warn "Failed to load #{filename} due to permissions problem."
329
341
  end
@@ -8,8 +8,6 @@ require 'monitor'
8
8
 
9
9
  module Kernel
10
10
 
11
- RUBYGEMS_ACTIVATION_MONITOR = Monitor.new # :nodoc:
12
-
13
11
  if defined?(gem_original_require) then
14
12
  # Ruby ships with a custom_require, override its require
15
13
  remove_method :require
@@ -35,10 +33,10 @@ module Kernel
35
33
  # The normal <tt>require</tt> functionality of returning false if
36
34
  # that file has already been loaded is preserved.
37
35
 
38
- def require path
39
- RUBYGEMS_ACTIVATION_MONITOR.enter
36
+ ACTIVATION_MONITOR = Monitor.new
40
37
 
41
- path = path.to_path if path.respond_to? :to_path
38
+ def require path
39
+ ACTIVATION_MONITOR.enter
42
40
 
43
41
  spec = Gem.find_unresolved_default_spec(path)
44
42
  if spec
@@ -50,12 +48,7 @@ module Kernel
50
48
  # normal require handle loading a gem from the rescue below.
51
49
 
52
50
  if Gem::Specification.unresolved_deps.empty? then
53
- begin
54
- RUBYGEMS_ACTIVATION_MONITOR.exit
55
- return gem_original_require(path)
56
- ensure
57
- RUBYGEMS_ACTIVATION_MONITOR.enter
58
- end
51
+ return gem_original_require(path)
59
52
  end
60
53
 
61
54
  # If +path+ is for a gem that has already been loaded, don't
@@ -64,16 +57,11 @@ module Kernel
64
57
  #--
65
58
  # TODO request access to the C implementation of this to speed up RubyGems
66
59
 
67
- spec = Gem::Specification.find { |s|
60
+ spec = Gem::Specification.stubs.find { |s|
68
61
  s.activated? and s.contains_requirable_file? path
69
62
  }
70
63
 
71
- begin
72
- RUBYGEMS_ACTIVATION_MONITOR.exit
73
- return gem_original_require(path)
74
- ensure
75
- RUBYGEMS_ACTIVATION_MONITOR.enter
76
- end if spec
64
+ return gem_original_require(path) if spec
77
65
 
78
66
  # Attempt to find +path+ in any unresolved gems...
79
67
 
@@ -121,26 +109,16 @@ module Kernel
121
109
  valid.activate
122
110
  end
123
111
 
124
- begin
125
- RUBYGEMS_ACTIVATION_MONITOR.exit
126
- return gem_original_require(path)
127
- ensure
128
- RUBYGEMS_ACTIVATION_MONITOR.enter
129
- end
112
+ gem_original_require path
130
113
  rescue LoadError => load_error
131
114
  if load_error.message.start_with?("Could not find") or
132
115
  (load_error.message.end_with?(path) and Gem.try_activate(path)) then
133
- begin
134
- RUBYGEMS_ACTIVATION_MONITOR.exit
135
- return gem_original_require(path)
136
- ensure
137
- RUBYGEMS_ACTIVATION_MONITOR.enter
138
- end
116
+ return gem_original_require(path)
139
117
  end
140
118
 
141
119
  raise load_error
142
120
  ensure
143
- RUBYGEMS_ACTIVATION_MONITOR.exit
121
+ ACTIVATION_MONITOR.exit
144
122
  end
145
123
 
146
124
  private :require