rubygems-update 1.6.2 → 1.7.0

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 (40) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.autotest +0 -1
  3. data/History.txt +70 -4
  4. data/README.rdoc +3 -0
  5. data/Rakefile +76 -0
  6. data/lib/rubygems.rb +57 -27
  7. data/lib/rubygems/command.rb +6 -4
  8. data/lib/rubygems/commands/contents_command.rb +14 -11
  9. data/lib/rubygems/commands/fetch_command.rb +6 -3
  10. data/lib/rubygems/commands/outdated_command.rb +2 -1
  11. data/lib/rubygems/commands/pristine_command.rb +4 -3
  12. data/lib/rubygems/commands/unpack_command.rb +46 -4
  13. data/lib/rubygems/commands/update_command.rb +24 -10
  14. data/lib/rubygems/custom_require.rb +1 -2
  15. data/lib/rubygems/dependency_installer.rb +1 -1
  16. data/lib/rubygems/ext/rake_builder.rb +1 -1
  17. data/lib/rubygems/gem_runner.rb +1 -0
  18. data/lib/rubygems/mock_gem_ui.rb +2 -1
  19. data/lib/rubygems/package/tar_input.rb +1 -0
  20. data/lib/rubygems/remote_fetcher.rb +62 -39
  21. data/lib/rubygems/server.rb +1 -1
  22. data/lib/rubygems/source_index.rb +64 -43
  23. data/lib/rubygems/spec_fetcher.rb +5 -6
  24. data/lib/rubygems/specification.rb +375 -402
  25. data/lib/rubygems/test_case.rb +7 -8
  26. data/lib/rubygems/uninstaller.rb +2 -2
  27. data/lib/rubygems/user_interaction.rb +27 -31
  28. data/test/rubygems/test_gem.rb +2 -44
  29. data/test/rubygems/test_gem_commands_contents_command.rb +19 -30
  30. data/test/rubygems/test_gem_commands_unpack_command.rb +24 -0
  31. data/test/rubygems/test_gem_commands_update_command.rb +26 -1
  32. data/test/rubygems/test_gem_dependency_installer.rb +9 -5
  33. data/test/rubygems/test_gem_dependency_list.rb +2 -6
  34. data/test/rubygems/test_gem_gem_runner.rb +1 -4
  35. data/test/rubygems/test_gem_installer.rb +1 -2
  36. data/test/rubygems/test_gem_remote_fetcher.rb +131 -24
  37. data/test/rubygems/test_gem_source_index.rb +7 -192
  38. data/test/rubygems/test_gem_specification.rb +132 -103
  39. metadata +9 -9
  40. metadata.gz.sig +0 -0
@@ -310,7 +310,6 @@ class Gem::TestCase < MiniTest::Unit::TestCase
310
310
  s.author = 'A User'
311
311
  s.email = 'example@example.com'
312
312
  s.homepage = 'http://example.com'
313
- s.has_rdoc = true
314
313
  s.summary = "this is a summary"
315
314
  s.description = "This is a test description"
316
315
 
@@ -319,12 +318,12 @@ class Gem::TestCase < MiniTest::Unit::TestCase
319
318
 
320
319
  path = File.join "specifications", spec.spec_name
321
320
  written_path = write_file path do |io|
322
- io.write(spec.to_ruby)
321
+ io.write spec.to_ruby_for_cache
323
322
  end
324
323
 
325
- spec.loaded_from = written_path
324
+ spec.loaded_from = spec.loaded_from = written_path
326
325
 
327
- Gem.source_index.add_spec spec
326
+ Gem.source_index.add_spec spec.for_cache
328
327
 
329
328
  return spec
330
329
  end
@@ -339,14 +338,14 @@ class Gem::TestCase < MiniTest::Unit::TestCase
339
338
  s.author = 'A User'
340
339
  s.email = 'example@example.com'
341
340
  s.homepage = 'http://example.com'
342
- s.has_rdoc = true
343
341
  s.summary = "this is a summary"
344
342
  s.description = "This is a test description"
345
343
 
346
344
  yield(s) if block_given?
347
345
  end
348
346
 
349
- spec.loaded_from = @gemhome
347
+ path = File.join @gemhome, "specifications", spec.spec_name
348
+ spec.loaded_from = path
350
349
 
351
350
  Gem.source_index.add_spec spec
352
351
 
@@ -605,8 +604,8 @@ Also, a list:
605
604
  # Best used with +@all_gems+ from #util_setup_fake_fetcher.
606
605
 
607
606
  def util_setup_spec_fetcher(*specs)
608
- specs = Hash[*specs.map { |spec| [spec.full_name, spec] }.flatten]
609
- si = Gem::SourceIndex.new specs
607
+ si = Gem::SourceIndex.new
608
+ si.add_specs(*specs)
610
609
 
611
610
  spec_fetcher = Gem::SpecFetcher.fetcher
612
611
 
@@ -57,11 +57,11 @@ class Gem::Uninstaller
57
57
  @user_install = options[:user_install] unless options[:install_dir]
58
58
 
59
59
  spec_dir = File.join @gem_home, 'specifications'
60
- @source_index = Gem::SourceIndex.from_gems_in spec_dir
60
+ @source_index = Gem::SourceIndex.new [spec_dir]
61
61
 
62
62
  if @user_install then
63
63
  user_dir = File.join Gem.user_dir, 'specifications'
64
- @user_index = Gem::SourceIndex.from_gems_in user_dir
64
+ @user_index = Gem::SourceIndex.new [user_dir]
65
65
  end
66
66
  end
67
67
 
@@ -84,44 +84,40 @@ module Gem::UserInteraction
84
84
 
85
85
  include Gem::DefaultUserInteraction
86
86
 
87
- ##
88
- # :method: alert
87
+ def alert(*args)
88
+ ui.alert(*args)
89
+ end
89
90
 
90
- ##
91
- # :method: alert_error
91
+ def alert_error(*args)
92
+ ui.alert_error(*args)
93
+ end
92
94
 
93
- ##
94
- # :method: alert_warning
95
+ def alert_warning(*args)
96
+ ui.alert_warning(*args)
97
+ end
95
98
 
96
- ##
97
- # :method: ask
99
+ def ask(*args)
100
+ ui.ask(*args)
101
+ end
98
102
 
99
- ##
100
- # :method: ask_yes_no
103
+ def ask_for_password(*args)
104
+ ui.ask_for_password(*args)
105
+ end
101
106
 
102
- ##
103
- # :method: choose_from_list
107
+ def ask_yes_no(*args)
108
+ ui.ask_yes_no(*args)
109
+ end
104
110
 
105
- ##
106
- # :method: say
111
+ def choose_from_list(*args)
112
+ ui.choose_from_list(*args)
113
+ end
107
114
 
108
- ##
109
- # :method: terminate_interaction
110
-
111
- [:alert,
112
- :alert_error,
113
- :alert_warning,
114
- :ask,
115
- :ask_for_password,
116
- :ask_yes_no,
117
- :choose_from_list,
118
- :say,
119
- :terminate_interaction ].each do |methname|
120
- class_eval %{
121
- def #{methname}(*args)
122
- ui.#{methname}(*args)
123
- end
124
- }, __FILE__, __LINE__
115
+ def say(*args)
116
+ ui.say(*args)
117
+ end
118
+
119
+ def terminate_interaction(*args)
120
+ ui.terminate_interaction(*args)
125
121
  end
126
122
  end
127
123
 
@@ -406,22 +406,6 @@ class TestGem < Gem::TestCase
406
406
  assert_activate %w[d-1 e-1], e1, "d"
407
407
  end
408
408
 
409
- def test_self_all_load_paths
410
- util_make_gems
411
-
412
- expected = [
413
- File.join(@gemhome, *%W[gems #{@a1.full_name} lib]),
414
- File.join(@gemhome, *%W[gems #{@a2.full_name} lib]),
415
- File.join(@gemhome, *%W[gems #{@a3a.full_name} lib]),
416
- File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]),
417
- File.join(@gemhome, *%W[gems #{@b2.full_name} lib]),
418
- File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]),
419
- File.join(@gemhome, *%W[gems #{@pl1.full_name} lib]),
420
- ]
421
-
422
- assert_equal expected, Gem.all_load_paths.sort
423
- end
424
-
425
409
  def test_self_available?
426
410
  util_make_gems
427
411
  assert(Gem.available?("a"))
@@ -440,16 +424,6 @@ class TestGem < Gem::TestCase
440
424
  assert_equal @abin_path, Gem.bin_path('a', 'abin', '4')
441
425
  end
442
426
 
443
- def test_self_bin_path_name
444
- util_exec_gem
445
- assert_equal @exec_path, Gem.bin_path('a')
446
- end
447
-
448
- def test_self_bin_path_name_version
449
- util_exec_gem
450
- assert_equal @exec_path, Gem.bin_path('a', nil, '4')
451
- end
452
-
453
427
  def test_self_bin_path_nonexistent_binfile
454
428
  quick_spec 'a', '2' do |s|
455
429
  s.executables = ['exec']
@@ -461,14 +435,14 @@ class TestGem < Gem::TestCase
461
435
 
462
436
  def test_self_bin_path_no_bin_file
463
437
  quick_spec 'a', '1'
464
- assert_raises(Gem::Exception) do
438
+ assert_raises(ArgumentError) do
465
439
  Gem.bin_path('a', nil, '1')
466
440
  end
467
441
  end
468
442
 
469
443
  def test_self_bin_path_not_found
470
444
  assert_raises(Gem::GemNotFoundException) do
471
- Gem.bin_path('non-existent')
445
+ Gem.bin_path('non-existent', 'blah')
472
446
  end
473
447
  end
474
448
 
@@ -476,7 +450,6 @@ class TestGem < Gem::TestCase
476
450
  util_exec_gem
477
451
  quick_spec 'a', '10' do |s|
478
452
  s.executables = []
479
- s.default_executable = nil
480
453
  end
481
454
  # Should not find a-10's non-abin (bug)
482
455
  assert_equal @abin_path, Gem.bin_path('a', 'abin')
@@ -692,20 +665,6 @@ class TestGem < Gem::TestCase
692
665
  assert_equal cwd, $LOAD_PATH.shift
693
666
  end
694
667
 
695
- def test_self_latest_load_paths
696
- util_make_gems
697
-
698
- expected = [
699
- File.join(@gemhome, *%W[gems #{@a3a.full_name} lib]),
700
- File.join(@gemhome, *%W[gems #{@a_evil9.full_name} lib]),
701
- File.join(@gemhome, *%W[gems #{@b2.full_name} lib]),
702
- File.join(@gemhome, *%W[gems #{@c1_2.full_name} lib]),
703
- File.join(@gemhome, *%W[gems #{@pl1.full_name} lib]),
704
- ]
705
-
706
- assert_equal expected, Gem.latest_load_paths.sort
707
- end
708
-
709
668
  def test_self_loaded_specs
710
669
  foo = quick_spec 'foo'
711
670
  install_gem foo
@@ -1115,7 +1074,6 @@ class TestGem < Gem::TestCase
1115
1074
 
1116
1075
  def util_exec_gem
1117
1076
  spec, _ = quick_spec 'a', '4' do |s|
1118
- s.default_executable = 'exec'
1119
1077
  s.executables = ['exec', 'abin']
1120
1078
  end
1121
1079
 
@@ -9,11 +9,18 @@ class TestGemCommandsContentsCommand < Gem::TestCase
9
9
  @cmd = Gem::Commands::ContentsCommand.new
10
10
  end
11
11
 
12
+ def gem name
13
+ spec = quick_gem name do |gem|
14
+ gem.files = %W[lib/#{name}.rb Rakefile]
15
+ end
16
+ write_file File.join(*%W[gems #{spec.full_name} lib #{name}.rb])
17
+ write_file File.join(*%W[gems #{spec.full_name} Rakefile])
18
+ end
19
+
12
20
  def test_execute
13
21
  @cmd.options[:args] = %w[foo]
14
- quick_gem 'foo' do |gem|
15
- gem.files = %w[lib/foo.rb Rakefile]
16
- end
22
+
23
+ gem 'foo'
17
24
 
18
25
  use_ui @ui do
19
26
  @cmd.execute
@@ -27,13 +34,8 @@ class TestGemCommandsContentsCommand < Gem::TestCase
27
34
  def test_execute_all
28
35
  @cmd.options[:all] = true
29
36
 
30
- quick_gem 'foo' do |gem|
31
- gem.files = %w[lib/foo.rb Rakefile]
32
- end
33
-
34
- quick_gem 'bar' do |gem|
35
- gem.files = %w[lib/bar.rb Rakefile]
36
- end
37
+ gem 'foo'
38
+ gem 'bar'
37
39
 
38
40
  use_ui @ui do
39
41
  @cmd.execute
@@ -61,13 +63,8 @@ class TestGemCommandsContentsCommand < Gem::TestCase
61
63
 
62
64
  def test_execute_exact_match
63
65
  @cmd.options[:args] = %w[foo]
64
- quick_gem 'foo' do |gem|
65
- gem.files = %w[lib/foo.rb Rakefile]
66
- end
67
-
68
- quick_gem 'foo_bar' do |gem|
69
- gem.files = %w[lib/foo_bar.rb Rakefile]
70
- end
66
+ gem 'foo'
67
+ gem 'bar'
71
68
 
72
69
  use_ui @ui do
73
70
  @cmd.execute
@@ -82,9 +79,7 @@ class TestGemCommandsContentsCommand < Gem::TestCase
82
79
  @cmd.options[:args] = %w[foo]
83
80
  @cmd.options[:lib_only] = true
84
81
 
85
- quick_gem 'foo' do |gem|
86
- gem.files = %w[lib/foo.rb Rakefile]
87
- end
82
+ gem 'foo'
88
83
 
89
84
  use_ui @ui do
90
85
  @cmd.execute
@@ -98,13 +93,9 @@ class TestGemCommandsContentsCommand < Gem::TestCase
98
93
 
99
94
  def test_execute_multiple
100
95
  @cmd.options[:args] = %w[foo bar]
101
- quick_gem 'foo' do |gem|
102
- gem.files = %w[lib/foo.rb Rakefile]
103
- end
104
96
 
105
- quick_gem 'bar' do |gem|
106
- gem.files = %w[lib/bar.rb Rakefile]
107
- end
97
+ gem 'foo'
98
+ gem 'bar'
108
99
 
109
100
  use_ui @ui do
110
101
  @cmd.execute
@@ -120,17 +111,15 @@ class TestGemCommandsContentsCommand < Gem::TestCase
120
111
  @cmd.options[:args] = %w[foo]
121
112
  @cmd.options[:prefix] = false
122
113
 
123
- quick_gem 'foo' do |gem|
124
- gem.files = %w[lib/foo.rb Rakefile]
125
- end
114
+ gem 'foo'
126
115
 
127
116
  use_ui @ui do
128
117
  @cmd.execute
129
118
  end
130
119
 
131
120
  expected = <<-EOF
132
- lib/foo.rb
133
121
  Rakefile
122
+ lib/foo.rb
134
123
  EOF
135
124
 
136
125
  assert_equal expected, @ui.output
@@ -136,6 +136,22 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
136
136
  assert File.exist?(File.join(@tempdir, 'a-2')), 'a should be unpacked'
137
137
  end
138
138
 
139
+ def test_execute_spec
140
+ util_make_gems
141
+
142
+ @cmd.options[:args] = %w[a b]
143
+ @cmd.options[:spec] = true
144
+
145
+ use_ui @ui do
146
+ Dir.chdir @tempdir do
147
+ @cmd.execute
148
+ end
149
+ end
150
+
151
+ assert File.exist?(File.join(@tempdir, 'a-3.a.gemspec'))
152
+ assert File.exist?(File.join(@tempdir, 'b-2.gemspec'))
153
+ end
154
+
139
155
  def test_execute_sudo
140
156
  util_make_gems
141
157
 
@@ -197,5 +213,13 @@ class TestGemCommandsUnpackCommand < Gem::TestCase
197
213
  assert File.exist?(File.join(@tempdir, foo_spec.full_name))
198
214
  end
199
215
 
216
+ def test_handle_options_metadata
217
+ refute @cmd.options[:spec]
218
+
219
+ @cmd.send :handle_options, %w[--spec a]
220
+
221
+ assert @cmd.options[:spec]
222
+ end
223
+
200
224
  end
201
225
 
@@ -117,7 +117,7 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
117
117
  @cmd.options[:generate_rdoc] = false
118
118
  @cmd.options[:generate_ri] = false
119
119
 
120
- assert_raises Gem::SystemExitException do
120
+ assert_raises Gem::MockGemUi::SystemExitException do
121
121
  use_ui @ui do
122
122
  @cmd.execute
123
123
  end
@@ -178,6 +178,31 @@ class TestGemCommandsUpdateCommand < Gem::TestCase
178
178
  assert_empty out
179
179
  end
180
180
 
181
+ def test_execute_system_specifically_to_latest_version
182
+ util_clear_gems
183
+ util_setup_rubygem9
184
+ util_setup_rubygem8
185
+ util_setup_spec_fetcher @rubygem8, @rubygem9
186
+ util_add_to_fetcher @rubygem8, @rubygem9
187
+
188
+ @cmd.options[:args] = []
189
+ @cmd.options[:system] = "9"
190
+ @cmd.options[:generate_rdoc] = false
191
+ @cmd.options[:generate_ri] = false
192
+
193
+ use_ui @ui do
194
+ @cmd.execute
195
+ end
196
+
197
+ out = @ui.output.split "\n"
198
+ assert_equal "Updating rubygems-update", out.shift
199
+ assert_equal "Successfully installed rubygems-update-9", out.shift
200
+ assert_equal "Installing RubyGems 9", out.shift
201
+ assert_equal "RubyGems system software updated", out.shift
202
+
203
+ assert_empty out
204
+ end
205
+
181
206
  def test_execute_system_with_gems
182
207
  @cmd.options[:args] = %w[gem]
183
208
  @cmd.options[:system] = true
@@ -33,8 +33,10 @@ class TestGemDependencyInstaller < Gem::TestCase
33
33
  inst.install 'a'
34
34
  end
35
35
 
36
- assert_equal Gem::SourceIndex.new(@a1.full_name => @a1),
37
- Gem::SourceIndex.from_installed_gems
36
+ si = Gem::SourceIndex.new
37
+ si.add_spec @a1
38
+
39
+ assert_equal Gem.source_index, si
38
40
 
39
41
  assert_equal [@a1], inst.installed_gems
40
42
  end
@@ -103,7 +105,7 @@ class TestGemDependencyInstaller < Gem::TestCase
103
105
  inst.install 'b'
104
106
  end
105
107
 
106
- installed = Gem::SourceIndex.from_installed_gems.map { |n,s| s.full_name }
108
+ installed = Gem.source_index.map { |n,s| s.full_name }
107
109
 
108
110
  assert_equal %w[a-2 b-1], installed.sort
109
111
 
@@ -396,8 +398,10 @@ class TestGemDependencyInstaller < Gem::TestCase
396
398
  inst.install 'a'
397
399
  end
398
400
 
399
- assert_equal Gem::SourceIndex.new(@a1.full_name => @a1),
400
- Gem::SourceIndex.from_installed_gems
401
+ si = Gem::SourceIndex.new
402
+ si.add_spec @a1
403
+
404
+ assert_equal Gem.source_index, si
401
405
 
402
406
  assert_equal %w[a-1], inst.installed_gems.map { |s| s.full_name }
403
407
  end
@@ -22,12 +22,8 @@ class TestGemDependencyList < Gem::TestCase
22
22
  end
23
23
 
24
24
  def test_self_from_source_index
25
- hash = {
26
- 'a-1' => @a1,
27
- 'b-2' => @b2,
28
- }
29
-
30
- si = Gem::SourceIndex.new hash
25
+ si = Gem::SourceIndex.new
26
+ si.add_specs @a1, @b2
31
27
  deps = Gem::DependencyList.from_source_index si
32
28
 
33
29
  assert_equal %w[b-2 a-1], deps.dependency_order.map { |s| s.full_name }