rubygems-update 2.2.1 → 2.2.2

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 (51) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/History.txt +29 -0
  5. data/Manifest.txt +1 -0
  6. data/lib/rubygems.rb +1 -1
  7. data/lib/rubygems/available_set.rb +3 -0
  8. data/lib/rubygems/commands/generate_index_command.rb +1 -1
  9. data/lib/rubygems/config_file.rb +3 -2
  10. data/lib/rubygems/dependency_installer.rb +1 -0
  11. data/lib/rubygems/ext/ext_conf_builder.rb +5 -1
  12. data/lib/rubygems/installer.rb +1 -1
  13. data/lib/rubygems/package/tar_header.rb +1 -1
  14. data/lib/rubygems/remote_fetcher.rb +24 -16
  15. data/lib/rubygems/request.rb +4 -4
  16. data/lib/rubygems/request_set.rb +8 -0
  17. data/lib/rubygems/resolver.rb +2 -0
  18. data/lib/rubygems/resolver/api_set.rb +6 -1
  19. data/lib/rubygems/resolver/best_set.rb +20 -1
  20. data/lib/rubygems/resolver/composed_set.rb +11 -0
  21. data/lib/rubygems/resolver/git_set.rb +3 -0
  22. data/lib/rubygems/resolver/index_set.rb +4 -0
  23. data/lib/rubygems/resolver/installer_set.rb +15 -1
  24. data/lib/rubygems/resolver/lock_set.rb +2 -0
  25. data/lib/rubygems/resolver/set.rb +17 -0
  26. data/lib/rubygems/resolver/vendor_set.rb +2 -0
  27. data/lib/rubygems/security.rb +3 -3
  28. data/lib/rubygems/source/git.rb +14 -0
  29. data/lib/rubygems/specification.rb +22 -22
  30. data/lib/rubygems/test_case.rb +29 -1
  31. data/lib/rubygems/version.rb +17 -11
  32. data/test/rubygems/test_gem.rb +28 -30
  33. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +41 -27
  34. data/test/rubygems/test_gem_installer.rb +6 -2
  35. data/test/rubygems/test_gem_package_tar_header.rb +14 -0
  36. data/test/rubygems/test_gem_platform.rb +5 -1
  37. data/test/rubygems/test_gem_remote_fetcher.rb +3 -3
  38. data/test/rubygems/test_gem_request.rb +69 -0
  39. data/test/rubygems/test_gem_request_set.rb +21 -0
  40. data/test/rubygems/test_gem_resolver.rb +8 -0
  41. data/test/rubygems/test_gem_resolver_api_set.rb +41 -0
  42. data/test/rubygems/test_gem_resolver_best_set.rb +50 -0
  43. data/test/rubygems/test_gem_resolver_composed_set.rb +18 -0
  44. data/test/rubygems/test_gem_resolver_git_set.rb +15 -0
  45. data/test/rubygems/test_gem_resolver_index_set.rb +35 -0
  46. data/test/rubygems/test_gem_resolver_installer_set.rb +70 -0
  47. data/test/rubygems/test_gem_source_git.rb +43 -0
  48. data/test/rubygems/test_gem_specification.rb +9 -12
  49. data/test/rubygems/test_gem_version.rb +10 -0
  50. metadata +5 -3
  51. metadata.gz.sig +0 -0
@@ -4,6 +4,15 @@
4
4
 
5
5
  class Gem::Resolver::Set
6
6
 
7
+ ##
8
+ # Set to true to disable network access for this set
9
+
10
+ attr_accessor :remote
11
+
12
+ def initialize # :nodoc:
13
+ @remote = true
14
+ end
15
+
7
16
  ##
8
17
  # The find_all method must be implemented. It returns all Resolver
9
18
  # Specification objects matching the given DependencyRequest +req+.
@@ -23,5 +32,13 @@ class Gem::Resolver::Set
23
32
  def prefetch reqs
24
33
  end
25
34
 
35
+ ##
36
+ # When true, this set is allowed to access the network when looking up
37
+ # specifications or dependencies.
38
+
39
+ def remote? # :nodoc:
40
+ @remote
41
+ end
42
+
26
43
  end
27
44
 
@@ -21,6 +21,8 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
21
21
  attr_reader :specs # :nodoc:
22
22
 
23
23
  def initialize # :nodoc:
24
+ super()
25
+
24
26
  @directories = {}
25
27
  @specs = {}
26
28
  end
@@ -120,11 +120,11 @@ end
120
120
  # * HighSecurity - Here's the bugger that got us into this mess.
121
121
  # The HighSecurity policy is identical to the MediumSecurity policy,
122
122
  # except that it does not allow unsigned gems. A malicious user
123
- # doesn't have a whole lot of options here; he can't modify the
124
- # package contents without invalidating the signature, and he can't
123
+ # doesn't have a whole lot of options here; they can't modify the
124
+ # package contents without invalidating the signature, and they can't
125
125
  # modify or remove signature or the signing certificate chain, or
126
126
  # RubyGems will simply refuse to install the package. Oh well, maybe
127
- # he'll have better luck causing problems for CPAN users instead :).
127
+ # they'll have better luck causing problems for CPAN users instead :).
128
128
  #
129
129
  # The reason RubyGems refused to install your shiny new signed gem was because
130
130
  # it was from an untrusted source. Well, your code is infallible (naturally),
@@ -23,6 +23,11 @@ class Gem::Source::Git < Gem::Source
23
23
 
24
24
  attr_reader :reference
25
25
 
26
+ ##
27
+ # When false the cache for this repository will not be updated.
28
+
29
+ attr_accessor :remote
30
+
26
31
  ##
27
32
  # The git repository this gem is sourced from.
28
33
 
@@ -53,6 +58,7 @@ class Gem::Source::Git < Gem::Source
53
58
  @reference = reference
54
59
  @need_submodules = submodules
55
60
 
61
+ @remote = true
56
62
  @root_dir = Gem.dir
57
63
  @git = ENV['git'] || 'git'
58
64
  end
@@ -85,6 +91,8 @@ class Gem::Source::Git < Gem::Source
85
91
  def checkout # :nodoc:
86
92
  cache
87
93
 
94
+ return false unless File.exist? repo_cache_dir
95
+
88
96
  unless File.exist? install_dir then
89
97
  system @git, 'clone', '--quiet', '--no-checkout',
90
98
  repo_cache_dir, install_dir
@@ -107,6 +115,8 @@ class Gem::Source::Git < Gem::Source
107
115
  # Creates a local cache repository for the git gem.
108
116
 
109
117
  def cache # :nodoc:
118
+ return unless @remote
119
+
110
120
  if File.exist? repo_cache_dir then
111
121
  Dir.chdir repo_cache_dir do
112
122
  system @git, 'fetch', '--quiet', '--force', '--tags',
@@ -142,6 +152,8 @@ class Gem::Source::Git < Gem::Source
142
152
  # The directory where the git gem will be installed.
143
153
 
144
154
  def install_dir # :nodoc:
155
+ return unless File.exist? repo_cache_dir
156
+
145
157
  File.join base_dir, 'gems', "#{@name}-#{dir_shortref}"
146
158
  end
147
159
 
@@ -177,6 +189,8 @@ class Gem::Source::Git < Gem::Source
177
189
  def specs
178
190
  checkout
179
191
 
192
+ return [] unless install_dir
193
+
180
194
  Dir.chdir install_dir do
181
195
  Dir['{,*,*/*}.gemspec'].map do |spec_file|
182
196
  directory = File.dirname spec_file
@@ -240,6 +240,28 @@ class Gem::Specification < Gem::BasicSpecification
240
240
 
241
241
  attr_reader :summary
242
242
 
243
+ ##
244
+ # Singular writer for #authors
245
+ #
246
+ # Usage:
247
+ #
248
+ # spec.author = 'John Jones'
249
+
250
+ def author= o
251
+ self.authors = [o]
252
+ end
253
+
254
+ ##
255
+ # Sets the list of authors, ensuring it is an array.
256
+ #
257
+ # Usage:
258
+ #
259
+ # spec.authors = ['John Jones', 'Mary Smith']
260
+
261
+ def authors= value
262
+ @authors = Array(value).flatten.grep(String)
263
+ end
264
+
243
265
  ##
244
266
  # The platform this gem runs on.
245
267
  #
@@ -442,28 +464,6 @@ class Gem::Specification < Gem::BasicSpecification
442
464
  add_dependency_with_type(gem, :runtime, *requirements)
443
465
  end
444
466
 
445
- ##
446
- # Singular writer for #authors
447
- #
448
- # Usage:
449
- #
450
- # spec.author = 'John Jones'
451
-
452
- def author= o
453
- self.authors = [o]
454
- end
455
-
456
- ##
457
- # Sets the list of authors, ensuring it is an array.
458
- #
459
- # Usage:
460
- #
461
- # spec.authors = ['John Jones', 'Mary Smith']
462
-
463
- def authors= value
464
- @authors = Array(value).flatten.grep(String)
465
- end
466
-
467
467
  ##
468
468
  # Executables included in the gem.
469
469
  #
@@ -115,6 +115,23 @@ class Gem::TestCase < MiniTest::Unit::TestCase
115
115
  assert File.exist?(path), msg
116
116
  end
117
117
 
118
+ ##
119
+ # Sets the ENABLE_SHARED entry in RbConfig::CONFIG to +value+ and restores
120
+ # the original value when the block ends
121
+
122
+ def enable_shared value
123
+ enable_shared = RbConfig::CONFIG['ENABLE_SHARED']
124
+ RbConfig::CONFIG['ENABLE_SHARED'] = value
125
+
126
+ yield
127
+ ensure
128
+ if enable_shared then
129
+ RbConfig::CONFIG['enable_shared'] = enable_shared
130
+ else
131
+ RbConfig::CONFIG.delete 'enable_shared'
132
+ end
133
+ end
134
+
118
135
  # TODO: move to minitest
119
136
  def refute_path_exists path, msg = nil
120
137
  msg = message(msg) { "Expected path '#{path}' to not exist" }
@@ -315,7 +332,11 @@ class Gem::TestCase < MiniTest::Unit::TestCase
315
332
  def teardown
316
333
  $LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
317
334
 
318
- RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY
335
+ if @orig_BASERUBY
336
+ RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY
337
+ else
338
+ RbConfig::CONFIG.delete('BASERUBY')
339
+ end
319
340
  RbConfig::CONFIG['arch'] = @orig_arch
320
341
 
321
342
  if defined? Gem::RemoteFetcher then
@@ -1244,11 +1265,18 @@ Also, a list:
1244
1265
 
1245
1266
  class StaticSet
1246
1267
 
1268
+ ##
1269
+ # A StaticSet ignores remote because it has a fixed set of gems.
1270
+
1271
+ attr_accessor :remote
1272
+
1247
1273
  ##
1248
1274
  # Creates a new StaticSet for the given +specs+
1249
1275
 
1250
1276
  def initialize(specs)
1251
1277
  @specs = specs
1278
+
1279
+ @remote = true
1252
1280
  end
1253
1281
 
1254
1282
  ##
@@ -22,6 +22,11 @@
22
22
  # 3. 1.0.a.2
23
23
  # 4. 0.9
24
24
  #
25
+ # If you want to specify a version restriction that includes both prereleases
26
+ # and regular releases of the 1.x series this is the best way:
27
+ #
28
+ # s.add_dependency 'example', '>= 1.0.0.a', '< 2.0.0'
29
+ #
25
30
  # == How Software Changes
26
31
  #
27
32
  # Users expect to be able to specify a version constraint that gives them
@@ -81,8 +86,8 @@
81
86
  #
82
87
  # * Any "public" release of a gem should have a different version. Normally
83
88
  # that means incrementing the build number. This means a developer can
84
- # generate builds all day long for himself, but as soon as he/she makes a
85
- # public release, the version must be updated.
89
+ # generate builds all day long, but as soon as they make a public release,
90
+ # the version must be updated.
86
91
  #
87
92
  # === Examples
88
93
  #
@@ -99,26 +104,25 @@
99
104
  # Version 1.1.1:: Fixed a bug in the linked list implementation.
100
105
  # Version 1.1.2:: Fixed a bug introduced in the last fix.
101
106
  #
102
- # Client A needs a stack with basic push/pop capability. He writes to the
103
- # original interface (no <tt>top</tt>), so his version constraint looks
104
- # like:
107
+ # Client A needs a stack with basic push/pop capability. They write to the
108
+ # original interface (no <tt>top</tt>), so their version constraint looks like:
105
109
  #
106
110
  # gem 'stack', '~> 0.0'
107
111
  #
108
112
  # Essentially, any version is OK with Client A. An incompatible change to
109
- # the library will cause him grief, but he is willing to take the chance (we
110
- # call Client A optimistic).
113
+ # the library will cause them grief, but they are willing to take the chance
114
+ # (we call Client A optimistic).
111
115
  #
112
- # Client B is just like Client A except for two things: (1) He uses the
113
- # <tt>depth</tt> method and (2) he is worried about future
114
- # incompatibilities, so he writes his version constraint like this:
116
+ # Client B is just like Client A except for two things: (1) They use the
117
+ # <tt>depth</tt> method and (2) they are worried about future
118
+ # incompatibilities, so they write their version constraint like this:
115
119
  #
116
120
  # gem 'stack', '~> 0.1'
117
121
  #
118
122
  # The <tt>depth</tt> method was introduced in version 0.1.0, so that version
119
123
  # or anything later is fine, as long as the version stays below version 1.0
120
124
  # where incompatibilities are introduced. We call Client B pessimistic
121
- # because he is worried about incompatible future changes (it is OK to be
125
+ # because they are worried about incompatible future changes (it is OK to be
122
126
  # pessimistic!).
123
127
  #
124
128
  # == Preventing Version Catastrophe:
@@ -185,6 +189,8 @@ class Gem::Version
185
189
  @@all = {}
186
190
 
187
191
  def self.new version # :nodoc:
192
+ return super unless Gem::VERSION == self.class
193
+
188
194
  @@all[version] ||= super
189
195
  end
190
196
 
@@ -199,30 +199,21 @@ class TestGem < Gem::TestCase
199
199
  end
200
200
 
201
201
  def test_self_default_exec_format
202
- orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
203
- RbConfig::CONFIG['ruby_install_name'] = 'ruby'
204
-
205
- assert_equal '%s', Gem.default_exec_format
206
- ensure
207
- RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
202
+ ruby_install_name 'ruby' do
203
+ assert_equal '%s', Gem.default_exec_format
204
+ end
208
205
  end
209
206
 
210
207
  def test_self_default_exec_format_18
211
- orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
212
- RbConfig::CONFIG['ruby_install_name'] = 'ruby18'
213
-
214
- assert_equal '%s18', Gem.default_exec_format
215
- ensure
216
- RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
208
+ ruby_install_name 'ruby18' do
209
+ assert_equal '%s18', Gem.default_exec_format
210
+ end
217
211
  end
218
212
 
219
213
  def test_self_default_exec_format_jruby
220
- orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
221
- RbConfig::CONFIG['ruby_install_name'] = 'jruby'
222
-
223
- assert_equal 'j%s', Gem.default_exec_format
224
- ensure
225
- RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
214
+ ruby_install_name 'jruby' do
215
+ assert_equal 'j%s', Gem.default_exec_format
216
+ end
226
217
  end
227
218
 
228
219
  def test_self_default_sources
@@ -340,21 +331,15 @@ class TestGem < Gem::TestCase
340
331
  end
341
332
 
342
333
  def test_self_extension_dir_shared
343
- enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
344
- RbConfig::CONFIG['ENABLE_SHARED'], 'yes'
345
-
346
- assert_equal Gem.ruby_api_version, Gem.extension_api_version
347
- ensure
348
- RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
334
+ enable_shared 'yes' do
335
+ assert_equal Gem.ruby_api_version, Gem.extension_api_version
336
+ end
349
337
  end
350
338
 
351
339
  def test_self_extension_dir_static
352
- enable_shared, RbConfig::CONFIG['ENABLE_SHARED'] =
353
- RbConfig::CONFIG['ENABLE_SHARED'], 'no'
354
-
355
- assert_equal "#{Gem.ruby_api_version}-static", Gem.extension_api_version
356
- ensure
357
- RbConfig::CONFIG['ENABLE_SHARED'] = enable_shared
340
+ enable_shared 'no' do
341
+ assert_equal "#{Gem.ruby_api_version}-static", Gem.extension_api_version
342
+ end
358
343
  end
359
344
 
360
345
  def test_self_find_files
@@ -1339,6 +1324,19 @@ class TestGem < Gem::TestCase
1339
1324
  ENV['RUBYGEMS_GEMDEPS'] = rubygems_gemdeps
1340
1325
  end
1341
1326
 
1327
+ def ruby_install_name name
1328
+ orig_RUBY_INSTALL_NAME = RbConfig::CONFIG['ruby_install_name']
1329
+ RbConfig::CONFIG['ruby_install_name'] = name
1330
+
1331
+ yield
1332
+ ensure
1333
+ if orig_RUBY_INSTALL_NAME then
1334
+ RbConfig::CONFIG['ruby_install_name'] = orig_RUBY_INSTALL_NAME
1335
+ else
1336
+ RbConfig::CONFIG.delete 'ruby_install_name'
1337
+ end
1338
+ end
1339
+
1342
1340
  def with_plugin(path)
1343
1341
  test_plugin_path = File.expand_path("test/rubygems/plugin/#{path}",
1344
1342
  @@project_dir)
@@ -42,47 +42,46 @@ class TestGemExtExtConfBuilder < Gem::TestCase
42
42
  end
43
43
 
44
44
  def test_class_build_rbconfig_make_prog
45
- configure_args = RbConfig::CONFIG['configure_args']
45
+ configure_args do
46
46
 
47
- File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
48
- extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
49
- end
47
+ File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
48
+ extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
49
+ end
50
50
 
51
- output = []
51
+ output = []
52
52
 
53
- Dir.chdir @ext do
54
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
55
- end
53
+ Dir.chdir @ext do
54
+ Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
55
+ end
56
56
 
57
- assert_equal "creating Makefile\n", output[1]
58
- assert_contains_make_command 'clean', output[2]
59
- assert_contains_make_command '', output[4]
60
- assert_contains_make_command 'install', output[6]
61
- ensure
62
- RbConfig::CONFIG['configure_args'] = configure_args
57
+ assert_equal "creating Makefile\n", output[1]
58
+ assert_contains_make_command 'clean', output[2]
59
+ assert_contains_make_command '', output[4]
60
+ assert_contains_make_command 'install', output[6]
61
+ end
63
62
  end
64
63
 
65
64
  def test_class_build_env_make
66
- configure_args, env_make = RbConfig::CONFIG['configure_args'], ENV.delete('make')
67
- RbConfig::CONFIG['configure_args'] = ''
65
+ env_make = ENV.delete 'make'
68
66
  ENV['make'] = 'anothermake'
69
67
 
70
- File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
71
- extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
72
- end
68
+ configure_args '' do
69
+ File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
70
+ extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
71
+ end
73
72
 
74
- output = []
73
+ output = []
75
74
 
76
- assert_raises Gem::InstallError do
77
- Dir.chdir @ext do
78
- Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
75
+ assert_raises Gem::InstallError do
76
+ Dir.chdir @ext do
77
+ Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
78
+ end
79
79
  end
80
- end
81
80
 
82
- assert_equal "creating Makefile\n", output[1]
83
- assert_contains_make_command 'clean', output[2]
81
+ assert_equal "creating Makefile\n", output[1]
82
+ assert_contains_make_command 'clean', output[2]
83
+ end
84
84
  ensure
85
- RbConfig::CONFIG['configure_args'] = configure_args
86
85
  ENV['make'] = env_make
87
86
  end
88
87
 
@@ -108,6 +107,7 @@ class TestGemExtExtConfBuilder < Gem::TestCase
108
107
  assert_equal 'extconf failed, exit code 1', error.message
109
108
 
110
109
  assert_equal("#{Gem.ruby} extconf.rb", output[0])
110
+ assert_path_exists File.join @dest_path, 'mkmf.log'
111
111
  end
112
112
 
113
113
  def test_class_build_unconventional
@@ -188,5 +188,19 @@ end
188
188
  assert_equal 'Makefile not found', error.message
189
189
  end
190
190
 
191
+ def configure_args args = nil
192
+ configure_args = RbConfig::CONFIG['configure_args']
193
+ RbConfig::CONFIG['configure_args'] = args if args
194
+
195
+ yield
196
+
197
+ ensure
198
+ if configure_args then
199
+ RbConfig::CONFIG['configure_args'] = configure_args
200
+ else
201
+ RbConfig::CONFIG.delete 'configure_args'
202
+ end
203
+ end
204
+
191
205
  end
192
206