rubygems-update 1.3.3 → 1.3.4

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.

Potentially problematic release.


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

Files changed (46) hide show
  1. data.tar.gz.sig +0 -0
  2. data/ChangeLog +238 -184
  3. data/lib/rubygems.rb +11 -5
  4. data/lib/rubygems/command.rb +4 -1
  5. data/lib/rubygems/commands/install_command.rb +40 -0
  6. data/lib/rubygems/commands/query_command.rb +16 -1
  7. data/lib/rubygems/commands/setup_command.rb +1 -1
  8. data/lib/rubygems/commands/update_command.rb +1 -1
  9. data/lib/rubygems/config_file.rb +0 -1
  10. data/lib/rubygems/defaults.rb +2 -1
  11. data/lib/rubygems/dependency.rb +0 -2
  12. data/lib/rubygems/dependency_list.rb +36 -16
  13. data/lib/rubygems/exceptions.rb +0 -2
  14. data/lib/rubygems/ext/builder.rb +0 -2
  15. data/lib/rubygems/gem_openssl.rb +0 -1
  16. data/lib/rubygems/gem_path_searcher.rb +0 -2
  17. data/lib/rubygems/indexer.rb +1 -0
  18. data/lib/rubygems/package/f_sync_dir.rb +0 -2
  19. data/lib/rubygems/package/tar_header.rb +0 -2
  20. data/lib/rubygems/package/tar_input.rb +0 -2
  21. data/lib/rubygems/package/tar_output.rb +0 -2
  22. data/lib/rubygems/package/tar_reader.rb +2 -2
  23. data/lib/rubygems/package/tar_reader/entry.rb +0 -2
  24. data/lib/rubygems/package/tar_writer.rb +0 -2
  25. data/lib/rubygems/platform.rb +0 -2
  26. data/lib/rubygems/remote_fetcher.rb +5 -1
  27. data/lib/rubygems/requirement.rb +2 -4
  28. data/lib/rubygems/rubygems_version.rb +1 -1
  29. data/lib/rubygems/source_index.rb +19 -9
  30. data/lib/rubygems/spec_fetcher.rb +0 -1
  31. data/lib/rubygems/specification.rb +0 -1
  32. data/lib/rubygems/uninstaller.rb +4 -4
  33. data/lib/rubygems/version.rb +0 -2
  34. data/test/gemutilities.rb +13 -4
  35. data/test/test_gem.rb +54 -5
  36. data/test/test_gem_commands_install_command.rb +2 -0
  37. data/test/test_gem_commands_query_command.rb +68 -8
  38. data/test/test_gem_commands_unpack_command.rb +4 -4
  39. data/test/test_gem_dependency_installer.rb +3 -1
  40. data/test/test_gem_format.rb +1 -1
  41. data/test/test_gem_indexer.rb +5 -3
  42. data/test/test_gem_source_index.rb +14 -445
  43. data/test/test_gem_source_info_cache.rb +1 -1
  44. data/test/test_gem_specification.rb +2 -1
  45. metadata +4 -4
  46. metadata.gz.sig +0 -0
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
-
3
1
  ##
4
2
  # Available list of platforms for targeting Gem installations.
5
3
 
@@ -139,7 +139,11 @@ class Gem::RemoteFetcher
139
139
  Gem.configuration.really_verbose
140
140
  when nil then # TODO test for local overriding cache
141
141
  begin
142
- FileUtils.cp URI.unescape(source_uri.path), local_gem_path
142
+ if Gem.win_platform? && source_uri.scheme && !source_uri.path.include?(':')
143
+ FileUtils.cp URI.unescape(source_uri.scheme + ':' + source_uri.path), local_gem_path
144
+ else
145
+ FileUtils.cp URI.unescape(source_uri.path), local_gem_path
146
+ end
143
147
  rescue Errno::EACCES
144
148
  local_gem_path = source_uri.to_s
145
149
  end
@@ -4,8 +4,6 @@
4
4
  # See LICENSE.txt for permissions.
5
5
  #++
6
6
 
7
- require 'rubygems/version'
8
-
9
7
  ##
10
8
  # Requirement version includes a prefaced comparator in addition
11
9
  # to a version number.
@@ -65,7 +63,7 @@ class Gem::Requirement
65
63
 
66
64
  ##
67
65
  # Constructs a Requirement from +requirements+ which can be a String, a
68
- # Gem::Version, or an Array of those. See parse for details on the
66
+ # Gem::Version, or an Array of those. See #parse for details on the
69
67
  # formatting of requirement strings.
70
68
 
71
69
  def initialize(requirements)
@@ -142,7 +140,7 @@ class Gem::Requirement
142
140
  # Parse the version requirement obj returning the operator and version.
143
141
  #
144
142
  # The requirement can be a String or a Gem::Version. A String can be an
145
- # operator (<, <=, =, =>, >, !=, ~>), a version number, or both, operator
143
+ # operator (<, <=, =, >=, >, !=, ~>), a version number, or both, operator
146
144
  # first.
147
145
 
148
146
  def parse(obj)
@@ -9,7 +9,7 @@ module Gem
9
9
  ##
10
10
  # The version of RubyGems you are using
11
11
 
12
- RubyGemsVersion = '1.3.3'
12
+ RubyGemsVersion = '1.3.4'
13
13
 
14
14
  ##
15
15
  # The version of RubyGems you are using (duplicated for familiarity)
@@ -4,7 +4,6 @@
4
4
  # See LICENSE.txt for permissions.
5
5
  #++
6
6
 
7
- require 'rubygems'
8
7
  require 'rubygems/user_interaction'
9
8
  require 'rubygems/specification'
10
9
 
@@ -116,11 +115,11 @@ class Gem::SourceIndex
116
115
  end
117
116
 
118
117
  ##
119
- # Constructs a source index instance from the provided
120
- # specifications
121
- #
122
- # specifications::
123
- # [Hash] hash of [Gem name, Gem::Specification] pairs
118
+ # Constructs a source index instance from the provided specifications, which
119
+ # is a Hash of gem full names and Gem::Specifications.
120
+ #--
121
+ # TODO merge @gems and @prerelease_gems and provide a separate method
122
+ # #prerelease_gems
124
123
 
125
124
  def initialize(specifications={})
126
125
  @gems, @prerelease_gems = [{}, {}]
@@ -128,6 +127,13 @@ class Gem::SourceIndex
128
127
  @spec_dirs = nil
129
128
  end
130
129
 
130
+ ##
131
+ # Both regular and prerelease gems
132
+
133
+ def all_gems
134
+ @gems.merge @prerelease_gems
135
+ end
136
+
131
137
  ##
132
138
  # Reconstruct the source index from the specifications in +spec_dirs+.
133
139
 
@@ -215,7 +221,11 @@ class Gem::SourceIndex
215
221
  # Remove a gem specification named +full_name+.
216
222
 
217
223
  def remove_spec(full_name)
218
- @gems.delete(full_name)
224
+ if @gems.key? full_name then
225
+ @gems.delete full_name
226
+ else
227
+ @prerelease_gems.delete full_name
228
+ end
219
229
  end
220
230
 
221
231
  ##
@@ -279,7 +289,7 @@ class Gem::SourceIndex
279
289
 
280
290
  # TODO - Remove support and warning for legacy arguments after 2008/11
281
291
  unless Gem::Dependency === gem_pattern
282
- warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated"
292
+ warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated, use #find_name"
283
293
  end
284
294
 
285
295
  case gem_pattern
@@ -304,7 +314,7 @@ class Gem::SourceIndex
304
314
  version_requirement = Gem::Requirement.create version_requirement
305
315
  end
306
316
 
307
- specs = @gems.values.select do |spec|
317
+ specs = all_gems.values.select do |spec|
308
318
  spec.name =~ gem_pattern and
309
319
  version_requirement.satisfied_by? spec.version
310
320
  end
@@ -1,7 +1,6 @@
1
1
  require 'zlib'
2
2
  require 'fileutils'
3
3
 
4
- require 'rubygems'
5
4
  require 'rubygems/remote_fetcher'
6
5
  require 'rubygems/user_interaction'
7
6
 
@@ -4,7 +4,6 @@
4
4
  # See LICENSE.txt for permissions.
5
5
  #++
6
6
 
7
- require 'rubygems'
8
7
  require 'rubygems/version'
9
8
  require 'rubygems/requirement'
10
9
  require 'rubygems/platform'
@@ -126,14 +126,14 @@ class Gem::Uninstaller
126
126
  unless spec.executables.empty? then
127
127
  bindir = @bin_dir ? @bin_dir : Gem.bindir(spec.installation_path)
128
128
 
129
- list = @source_index.find_name(spec.name).delete_if { |spec|
130
- spec.version == spec.version
129
+ list = @source_index.find_name(spec.name).delete_if { |s|
130
+ s.version == spec.version
131
131
  }
132
132
 
133
133
  executables = spec.executables.clone
134
134
 
135
- list.each do |spec|
136
- spec.executables.each do |exe_name|
135
+ list.each do |s|
136
+ s.executables.each do |exe_name|
137
137
  executables.delete exe_name
138
138
  end
139
139
  end
@@ -4,8 +4,6 @@
4
4
  # See LICENSE.txt for permissions.
5
5
  #++
6
6
 
7
- require 'rubygems'
8
-
9
7
  ##
10
8
  # The Version class processes string versions into comparable
11
9
  # values. A version string should normally be a series of numbers
data/test/gemutilities.rb CHANGED
@@ -8,7 +8,11 @@ at_exit { $SAFE = 1 }
8
8
 
9
9
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
10
10
 
11
- require 'rubygems'
11
+ if RUBY_VERSION > '1.9' then
12
+ Gem::QuickLoader.load_full_rubygems_library
13
+ else
14
+ require 'rubygems'
15
+ end
12
16
  require 'fileutils'
13
17
  begin
14
18
  gem 'minitest', '>= 1.3.1'
@@ -329,6 +333,7 @@ Also, a list:
329
333
  end
330
334
 
331
335
  @a2 = quick_gem('a', '2', &init)
336
+ @a3a = quick_gem('a', '3.a', &init)
332
337
  @a_evil9 = quick_gem('a_evil', '9', &init)
333
338
  @b2 = quick_gem('b', '2', &init)
334
339
  @c1_2 = quick_gem('c', '1.2', &init)
@@ -348,11 +353,14 @@ Also, a list:
348
353
 
349
354
  write_file File.join(*%W[gems #{@a1.original_name} lib code.rb]) do end
350
355
  write_file File.join(*%W[gems #{@a2.original_name} lib code.rb]) do end
356
+ write_file File.join(*%W[gems #{@a3a.original_name} lib code.rb]) do end
351
357
  write_file File.join(*%W[gems #{@b2.original_name} lib code.rb]) do end
352
358
  write_file File.join(*%W[gems #{@c1_2.original_name} lib code.rb]) do end
353
359
  write_file File.join(*%W[gems #{@pl1.original_name} lib code.rb]) do end
354
360
 
355
- [@a1, @a2, @a_evil9, @b2, @c1_2, @pl1].each { |spec| util_build_gem spec }
361
+ [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2, @pl1].each do |spec|
362
+ util_build_gem spec
363
+ end
356
364
 
357
365
  FileUtils.rm_r File.join(@gemhome, 'gems', @pl1.original_name)
358
366
 
@@ -381,15 +389,16 @@ Also, a list:
381
389
 
382
390
  util_make_gems(prerelease)
383
391
 
384
- @all_gems = [@a1, @a2, @a_evil9, @b2, @c1_2].sort
392
+ @all_gems = [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2].sort
385
393
  @all_gem_names = @all_gems.map { |gem| gem.full_name }
386
394
 
387
- gem_names = [@a1.full_name, @a2.full_name, @b2.full_name]
395
+ gem_names = [@a1.full_name, @a2.full_name, @a3a.full_name, @b2.full_name]
388
396
  @gem_names = gem_names.sort.join("\n")
389
397
 
390
398
  @source_index = Gem::SourceIndex.new
391
399
  @source_index.add_spec @a1
392
400
  @source_index.add_spec @a2
401
+ @source_index.add_spec @a3a
393
402
  @source_index.add_spec @a_evil9
394
403
  @source_index.add_spec @c1_2
395
404
  @source_index.add_spec @a2_pre if prerelease
data/test/test_gem.rb CHANGED
@@ -24,6 +24,7 @@ class TestGem < RubyGemTestCase
24
24
  expected = [
25
25
  File.join(@gemhome, *%W[gems #{@a1.full_name} lib]),
26
26
  File.join(@gemhome, *%W[gems #{@a2.full_name} lib]),
27
+ File.join(@gemhome, *%W[gems #{@a3a.full_name} lib]),
27
28
  File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]),
28
29
  File.join(@gemhome, *%W[gems #{@b2.full_name} lib]),
29
30
  File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]),
@@ -305,7 +306,7 @@ class TestGem < RubyGemTestCase
305
306
  util_make_gems
306
307
 
307
308
  expected = [
308
- File.join(@gemhome, *%W[gems #{@a2.full_name} lib]),
309
+ File.join(@gemhome, *%W[gems #{@a3a.full_name} lib]),
309
310
  File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]),
310
311
  File.join(@gemhome, *%W[gems #{@b2.full_name} lib]),
311
312
  File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]),
@@ -512,11 +513,28 @@ class TestGem < RubyGemTestCase
512
513
  Gem::ConfigMap[:EXEEXT] = orig_exe_ext
513
514
  end
514
515
 
515
- def test_self_ruby_version
516
- version = RUBY_VERSION.dup
517
- version << ".#{RUBY_PATCHLEVEL}" if defined?(RUBY_PATCHLEVEL) && RUBY_PATCHLEVEL != -1
516
+ def test_self_ruby_version_1_8_5
517
+ util_set_RUBY_VERSION '1.8.5'
518
+
519
+ assert_equal Gem::Version.new('1.8.5'), Gem.ruby_version
520
+ ensure
521
+ util_restore_RUBY_VERSION
522
+ end
523
+
524
+ def test_self_ruby_version_1_8_6p287
525
+ util_set_RUBY_VERSION '1.8.6', 287
518
526
 
519
- assert_equal Gem::Version.new(version), Gem.ruby_version
527
+ assert_equal Gem::Version.new('1.8.6.287'), Gem.ruby_version
528
+ ensure
529
+ util_restore_RUBY_VERSION
530
+ end
531
+
532
+ def test_self_ruby_version_1_9_2dev_r23493
533
+ util_set_RUBY_VERSION '1.9.2', -1, 23493
534
+
535
+ assert_equal Gem::Version.new('1.9.2.dev.23493'), Gem.ruby_version
536
+ ensure
537
+ util_restore_RUBY_VERSION
520
538
  end
521
539
 
522
540
  def test_self_searcher
@@ -625,5 +643,36 @@ class TestGem < RubyGemTestCase
625
643
  @abin_path = File.join spec.full_gem_path, spec.bindir, 'abin'
626
644
  end
627
645
 
646
+ def util_set_RUBY_VERSION(version, patchlevel = nil, revision = nil)
647
+ if Gem.instance_variables.include? :@ruby_version or
648
+ Gem.instance_variables.include? '@ruby_version' then
649
+ Gem.send :remove_instance_variable, :@ruby_version
650
+ end
651
+
652
+ @RUBY_VERSION = RUBY_VERSION
653
+ @RUBY_PATCHLEVEL = RUBY_PATCHLEVEL if defined?(RUBY_PATCHLEVEL)
654
+ @RUBY_REVISION = RUBY_REVISION if defined?(RUBY_REVISION)
655
+
656
+ Object.send :remove_const, :RUBY_VERSION
657
+ Object.send :remove_const, :RUBY_PATCHLEVEL if defined?(RUBY_PATCHLEVEL)
658
+ Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION)
659
+
660
+ Object.const_set :RUBY_VERSION, version
661
+ Object.const_set :RUBY_PATCHLEVEL, patchlevel if patchlevel
662
+ Object.const_set :RUBY_REVISION, revision if revision
663
+ end
664
+
665
+ def util_restore_RUBY_VERSION
666
+ Object.send :remove_const, :RUBY_VERSION
667
+ Object.send :remove_const, :RUBY_PATCHLEVEL if defined?(RUBY_PATCHLEVEL)
668
+ Object.send :remove_const, :RUBY_REVISION if defined?(RUBY_REVISION)
669
+
670
+ Object.const_set :RUBY_VERSION, @RUBY_VERSION
671
+ Object.const_set :RUBY_PATCHLEVEL, @RUBY_PATCHLEVEL if
672
+ defined?(@RUBY_PATCHLEVEL)
673
+ Object.const_set :RUBY_REVISION, @RUBY_REVISION if
674
+ defined?(@RUBY_REVISION)
675
+ end
676
+
628
677
  end
629
678
 
@@ -104,6 +104,8 @@ class TestGemCommandsInstallCommand < RubyGemTestCase
104
104
  end
105
105
 
106
106
  def test_no_user_install
107
+ skip 'skipped on MS Windows (chmod has no effect)' if win_platform?
108
+
107
109
  util_setup_fake_fetcher
108
110
  @cmd.options[:user_install] = false
109
111
 
@@ -10,7 +10,7 @@ class TestGemCommandsQueryCommand < RubyGemTestCase
10
10
 
11
11
  util_setup_fake_fetcher
12
12
 
13
- @si = util_setup_spec_fetcher @a1, @a2, @pl1
13
+ @si = util_setup_spec_fetcher @a1, @a2, @pl1, @a3a
14
14
 
15
15
  @fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] = proc do
16
16
  raise Gem::RemoteFetcher::FetchError
@@ -252,11 +252,30 @@ RubyGems will revert to legacy indexes degrading performance.
252
252
  assert_equal expected, @ui.error
253
253
  end
254
254
 
255
+ def test_execute_legacy_prerelease
256
+ Gem::SpecFetcher.fetcher = nil
257
+ si = util_setup_source_info_cache @a1, @a2, @pl1
258
+
259
+ @fetcher.data["#{@gem_repo}yaml"] = YAML.dump si
260
+ @fetcher.data["#{@gem_repo}Marshal.#{Gem.marshal_version}"] =
261
+ si.dump
262
+
263
+ @fetcher.data.delete "#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"
264
+
265
+ @cmd.handle_options %w[-r --prerelease]
266
+
267
+ e = assert_raises Gem::OperationNotSupportedError do
268
+ @cmd.execute
269
+ end
270
+
271
+ assert_equal 'Prereleases not supported on legacy repositories', e.message
272
+ end
273
+
255
274
  def test_execute_local_details
256
- @a2.summary = 'This is a lot of text. ' * 4
257
- @a2.authors = ['Abraham Lincoln', 'Hirohito']
258
- @a2.homepage = 'http://a.example.com/'
259
- @a2.rubyforge_project = 'rubygems'
275
+ @a3a.summary = 'This is a lot of text. ' * 4
276
+ @a3a.authors = ['Abraham Lincoln', 'Hirohito']
277
+ @a3a.homepage = 'http://a.example.com/'
278
+ @a3a.rubyforge_project = 'rubygems'
260
279
 
261
280
  @cmd.handle_options %w[--local --details]
262
281
 
@@ -268,10 +287,11 @@ RubyGems will revert to legacy indexes degrading performance.
268
287
 
269
288
  *** LOCAL GEMS ***
270
289
 
271
- a (2, 1)
290
+ a (3.a, 2, 1)
272
291
  Author: A User
273
292
  Homepage: http://example.com
274
- Installed at (2): #{@gemhome}
293
+ Installed at (3.a): #{@gemhome}
294
+ (2): #{@gemhome}
275
295
  (1): #{@gemhome}
276
296
 
277
297
  this is a summary
@@ -320,7 +340,7 @@ pl (1)
320
340
  end
321
341
 
322
342
  expected = <<-EOF
323
- a (2, 1)
343
+ a (3.a, 2, 1)
324
344
  a_evil (9)
325
345
  b (2)
326
346
  c (1.2)
@@ -368,5 +388,45 @@ pl (1)
368
388
  assert_equal '', @ui.error
369
389
  end
370
390
 
391
+ def test_execute_prerelease
392
+ @cmd.handle_options %w[-r --prerelease]
393
+
394
+ use_ui @ui do
395
+ @cmd.execute
396
+ end
397
+
398
+ expected = <<-EOF
399
+
400
+ *** REMOTE GEMS ***
401
+
402
+ a (3.a)
403
+ EOF
404
+
405
+ assert_equal expected, @ui.output
406
+ assert_equal '', @ui.error
407
+ end
408
+
409
+ def test_execute_prerelease_local
410
+ @cmd.handle_options %w[-l --prerelease]
411
+
412
+ use_ui @ui do
413
+ @cmd.execute
414
+ end
415
+
416
+ expected = <<-EOF
417
+
418
+ *** LOCAL GEMS ***
419
+
420
+ a (3.a, 2, 1)
421
+ a_evil (9)
422
+ b (2)
423
+ c (1.2)
424
+ pl (1)
425
+ EOF
426
+
427
+ assert_equal expected, @ui.output
428
+ assert_equal "WARNING: prereleases are always shown locally\n", @ui.error
429
+ end
430
+
371
431
  end
372
432
 
@@ -22,8 +22,8 @@ class TestGemCommandsUnpackCommand < RubyGemTestCase
22
22
  end
23
23
  end
24
24
 
25
- assert File.exist?(File.join(@tempdir, 'a-2')), 'a should be installed'
26
- assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be installed'
25
+ assert File.exist?(File.join(@tempdir, 'a-3.a')), 'a should be installed'
26
+ assert File.exist?(File.join(@tempdir, 'b-2')), 'b should be installed'
27
27
  end
28
28
 
29
29
  def test_execute_gem_path
@@ -44,7 +44,7 @@ class TestGemCommandsUnpackCommand < RubyGemTestCase
44
44
  end
45
45
  end
46
46
 
47
- assert File.exist?(File.join(@tempdir, 'a-2'))
47
+ assert File.exist?(File.join(@tempdir, 'a-3.a'))
48
48
  end
49
49
 
50
50
  def test_execute_gem_path_missing
@@ -81,7 +81,7 @@ class TestGemCommandsUnpackCommand < RubyGemTestCase
81
81
  end
82
82
  end
83
83
 
84
- assert File.exist?(File.join(@tempdir, target, 'a-2'))
84
+ assert File.exist?(File.join(@tempdir, target, 'a-3.a'))
85
85
  end
86
86
 
87
87
  def test_execute_exact_match