rubygems-update 1.5.3 → 1.6.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 (79) hide show
  1. data.tar.gz.sig +2 -1
  2. data/History.txt +60 -9
  3. data/Manifest.txt +1 -1
  4. data/Rakefile +0 -2
  5. data/lib/rubygems.rb +142 -65
  6. data/lib/rubygems/commands/owner_command.rb +3 -2
  7. data/lib/rubygems/commands/pristine_command.rb +5 -3
  8. data/lib/rubygems/commands/push_command.rb +8 -4
  9. data/lib/rubygems/commands/setup_command.rb +1 -2
  10. data/lib/rubygems/commands/uninstall_command.rb +5 -0
  11. data/lib/rubygems/commands/unpack_command.rb +10 -16
  12. data/lib/rubygems/config_file.rb +12 -5
  13. data/lib/rubygems/custom_require.rb +27 -7
  14. data/lib/rubygems/dependency.rb +33 -8
  15. data/lib/rubygems/dependency_installer.rb +21 -6
  16. data/lib/rubygems/dependency_list.rb +35 -3
  17. data/lib/rubygems/doc_manager.rb +6 -4
  18. data/lib/rubygems/gem_path_searcher.rb +45 -1
  19. data/lib/rubygems/gemcutter_utilities.rb +33 -0
  20. data/lib/rubygems/indexer.rb +1 -0
  21. data/lib/rubygems/installer.rb +11 -7
  22. data/lib/rubygems/installer_test_case.rb +23 -15
  23. data/lib/rubygems/mock_gem_ui.rb +1 -1
  24. data/lib/rubygems/remote_fetcher.rb +29 -10
  25. data/lib/rubygems/requirement.rb +1 -1
  26. data/lib/rubygems/security.rb +1 -0
  27. data/lib/rubygems/source_index.rb +3 -2
  28. data/lib/rubygems/spec_fetcher.rb +3 -1
  29. data/lib/rubygems/specification.rb +54 -12
  30. data/lib/rubygems/test_case.rb +99 -28
  31. data/lib/rubygems/test_utilities.rb +11 -1
  32. data/lib/rubygems/uninstaller.rb +22 -11
  33. data/lib/rubygems/user_interaction.rb +50 -29
  34. data/lib/rubygems/validator.rb +1 -1
  35. data/test/rubygems/fix_openssl_warnings.rb +12 -0
  36. data/test/rubygems/plugin/load/rubygems_plugin.rb +3 -1
  37. data/test/rubygems/test_gem.rb +384 -38
  38. data/test/rubygems/test_gem_builder.rb +1 -1
  39. data/test/rubygems/test_gem_command_manager.rb +2 -2
  40. data/test/rubygems/test_gem_commands_build_command.rb +1 -1
  41. data/test/rubygems/test_gem_commands_cert_command.rb +2 -1
  42. data/test/rubygems/test_gem_commands_dependency_command.rb +6 -5
  43. data/test/rubygems/test_gem_commands_fetch_command.rb +4 -4
  44. data/test/rubygems/test_gem_commands_install_command.rb +21 -18
  45. data/test/rubygems/test_gem_commands_lock_command.rb +1 -1
  46. data/test/rubygems/test_gem_commands_outdated_command.rb +2 -5
  47. data/test/rubygems/test_gem_commands_owner_command.rb +42 -0
  48. data/test/rubygems/test_gem_commands_pristine_command.rb +28 -8
  49. data/test/rubygems/test_gem_commands_push_command.rb +31 -5
  50. data/test/rubygems/test_gem_commands_specification_command.rb +8 -8
  51. data/test/rubygems/test_gem_commands_stale_command.rb +4 -2
  52. data/test/rubygems/test_gem_commands_uninstall_command.rb +23 -4
  53. data/test/rubygems/test_gem_commands_unpack_command.rb +10 -8
  54. data/test/rubygems/test_gem_commands_update_command.rb +16 -13
  55. data/test/rubygems/test_gem_commands_which_command.rb +1 -1
  56. data/test/rubygems/test_gem_config_file.rb +14 -0
  57. data/test/rubygems/test_gem_dependency.rb +39 -0
  58. data/test/rubygems/test_gem_dependency_installer.rb +213 -92
  59. data/test/rubygems/test_gem_dependency_list.rb +37 -17
  60. data/test/rubygems/test_gem_doc_manager.rb +5 -4
  61. data/test/rubygems/test_gem_format.rb +2 -2
  62. data/test/rubygems/test_gem_gemcutter_utilities.rb +48 -0
  63. data/test/rubygems/test_gem_indexer.rb +11 -10
  64. data/test/rubygems/test_gem_install_update_options.rb +0 -2
  65. data/test/rubygems/test_gem_installer.rb +151 -78
  66. data/test/rubygems/test_gem_package_tar_output.rb +3 -0
  67. data/test/rubygems/test_gem_remote_fetcher.rb +23 -14
  68. data/test/rubygems/test_gem_requirement.rb +4 -0
  69. data/test/rubygems/test_gem_security.rb +1 -0
  70. data/test/rubygems/test_gem_source_index.rb +17 -16
  71. data/test/rubygems/test_gem_spec_fetcher.rb +6 -1
  72. data/test/rubygems/test_gem_specification.rb +81 -31
  73. data/test/rubygems/test_gem_stream_ui.rb +11 -1
  74. data/test/rubygems/test_gem_uninstaller.rb +70 -10
  75. data/test/rubygems/test_gem_validator.rb +1 -1
  76. data/test/rubygems/test_kernel.rb +1 -1
  77. metadata +7 -7
  78. metadata.gz.sig +0 -0
  79. data/ChangeLog +0 -5811
@@ -8,17 +8,17 @@ class TestGemDependencyList < Gem::TestCase
8
8
 
9
9
  @deplist = Gem::DependencyList.new
10
10
 
11
- @a1 = quick_gem 'a', '1'
12
- @a2 = quick_gem 'a', '2'
13
- @a3 = quick_gem 'a', '3'
11
+ @a1 = quick_spec 'a', '1'
12
+ @a2 = quick_spec 'a', '2'
13
+ @a3 = quick_spec 'a', '3'
14
14
 
15
- @b1 = quick_gem 'b', '1' do |s| s.add_dependency 'a', '>= 1' end
16
- @b2 = quick_gem 'b', '2' do |s| s.add_dependency 'a', '>= 1' end
15
+ @b1 = quick_spec 'b', '1' do |s| s.add_dependency 'a', '>= 1' end
16
+ @b2 = quick_spec 'b', '2' do |s| s.add_dependency 'a', '>= 1' end
17
17
 
18
- @c1 = quick_gem 'c', '1' do |s| s.add_dependency 'b', '>= 1' end
19
- @c2 = quick_gem 'c', '2'
18
+ @c1 = quick_spec 'c', '1' do |s| s.add_dependency 'b', '>= 1' end
19
+ @c2 = quick_spec 'c', '2'
20
20
 
21
- @d1 = quick_gem 'd', '1' do |s| s.add_dependency 'c', '>= 1' end
21
+ @d1 = quick_spec 'd', '1' do |s| s.add_dependency 'c', '>= 1' end
22
22
  end
23
23
 
24
24
  def test_self_from_source_index
@@ -66,9 +66,9 @@ class TestGemDependencyList < Gem::TestCase
66
66
  end
67
67
 
68
68
  def test_dependency_order_development
69
- e1 = quick_gem 'e', '1'
70
- f1 = quick_gem 'f', '1'
71
- g1 = quick_gem 'g', '1'
69
+ e1 = quick_spec 'e', '1'
70
+ f1 = quick_spec 'f', '1'
71
+ g1 = quick_spec 'g', '1'
72
72
 
73
73
  @a1.add_dependency 'e'
74
74
  @a1.add_dependency 'f'
@@ -94,7 +94,7 @@ class TestGemDependencyList < Gem::TestCase
94
94
 
95
95
  def test_dependency_order_diamond
96
96
  util_diamond
97
- e1 = quick_gem 'e', '1'
97
+ e1 = quick_spec 'e', '1'
98
98
  @deplist.add e1
99
99
  @a1.add_dependency 'e', '>= 1'
100
100
 
@@ -122,6 +122,8 @@ class TestGemDependencyList < Gem::TestCase
122
122
  end
123
123
 
124
124
  def test_ok_eh
125
+ util_clear_gems
126
+
125
127
  assert @deplist.ok?, 'no dependencies'
126
128
 
127
129
  @deplist.add @b2
@@ -133,14 +135,30 @@ class TestGemDependencyList < Gem::TestCase
133
135
  assert @deplist.ok?, 'satisfied dependency'
134
136
  end
135
137
 
138
+ def test_why_not_ok_eh
139
+ util_clear_gems
140
+
141
+ assert_equal({}, @deplist.why_not_ok?)
142
+
143
+ @deplist.add @b2
144
+
145
+ exp = {
146
+ "b" => [
147
+ Gem::Dependency.new("a", ">= 1")
148
+ ]
149
+ }
150
+
151
+ assert_equal exp, @deplist.why_not_ok?
152
+ end
153
+
136
154
  def test_ok_eh_mismatch
137
- a1 = quick_gem 'a', '1'
138
- a2 = quick_gem 'a', '2'
155
+ a1 = quick_spec 'a', '1'
156
+ a2 = quick_spec 'a', '2'
139
157
 
140
- b = quick_gem 'b', '1' do |s| s.add_dependency 'a', '= 1' end
141
- c = quick_gem 'c', '1' do |s| s.add_dependency 'a', '= 2' end
158
+ b = quick_spec 'b', '1' do |s| s.add_dependency 'a', '= 1' end
159
+ c = quick_spec 'c', '1' do |s| s.add_dependency 'a', '= 2' end
142
160
 
143
- d = quick_gem 'd', '1' do |s|
161
+ d = quick_spec 'd', '1' do |s|
144
162
  s.add_dependency 'b'
145
163
  s.add_dependency 'c'
146
164
  end
@@ -186,6 +204,8 @@ class TestGemDependencyList < Gem::TestCase
186
204
  end
187
205
 
188
206
  def test_remove_by_name
207
+ util_clear_gems
208
+
189
209
  @deplist.add @a1, @b2
190
210
 
191
211
  @deplist.remove_by_name "a-1"
@@ -6,25 +6,26 @@ class TestGemDocManager < Gem::TestCase
6
6
  def setup
7
7
  super
8
8
 
9
- @spec = quick_gem 'a'
9
+ @spec = quick_gem 'a', 2
10
10
  @manager = Gem::DocManager.new(@spec)
11
11
  end
12
12
 
13
13
  def test_uninstall_doc_unwritable
14
- orig_mode = File.stat(@spec.installation_path).mode
14
+ path = @spec.installation_path
15
+ orig_mode = File.stat(path).mode
15
16
 
16
17
  # File.chmod has no effect on MS Windows directories (it needs ACL).
17
18
  if win_platform?
18
19
  skip("test_uninstall_doc_unwritable skipped on MS Windows")
19
20
  else
20
- File.chmod(0, @spec.installation_path)
21
+ File.chmod 0000, path
21
22
  end
22
23
 
23
24
  assert_raises Gem::FilePermissionError do
24
25
  @manager.uninstall_doc
25
26
  end
26
27
  ensure
27
- File.chmod orig_mode, @spec.installation_path
28
+ File.chmod orig_mode, path
28
29
  end
29
30
 
30
31
  end
@@ -1,5 +1,5 @@
1
1
  require 'rubygems/package/tar_test_case'
2
- require 'test/rubygems/simple_gem'
2
+ require 'rubygems/simple_gem'
3
3
  require 'rubygems/format'
4
4
 
5
5
  class TestGemFormat < Gem::Package::TarTestCase
@@ -14,7 +14,7 @@ class TestGemFormat < Gem::Package::TarTestCase
14
14
  def test_class_from_file_by_path
15
15
  util_make_gems
16
16
 
17
- gems = Dir[File.join(@gemhome, 'cache', '*.gem')]
17
+ gems = Dir[Gem.cache_gem('*.gem', @gemhome)]
18
18
 
19
19
  names = [@a1, @a2, @a3a, @a_evil9, @b2, @c1_2, @pl1].map do |spec|
20
20
  spec.original_name
@@ -1,5 +1,6 @@
1
1
  require 'rubygems/test_case'
2
2
  require 'rubygems'
3
+ require 'rubygems/command'
3
4
  require 'rubygems/gemcutter_utilities'
4
5
 
5
6
  class TestGemGemcutterUtilities < Gem::TestCase
@@ -14,6 +15,35 @@ class TestGemGemcutterUtilities < Gem::TestCase
14
15
  @cmd.extend Gem::GemcutterUtilities
15
16
  end
16
17
 
18
+ def test_api_key
19
+ keys = { :rubygems_api_key => 'KEY' }
20
+ FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
21
+
22
+ open Gem.configuration.credentials_path, 'w' do |f|
23
+ f.write keys.to_yaml
24
+ end
25
+
26
+ Gem.configuration.load_api_keys
27
+
28
+ assert_equal 'KEY', @cmd.api_key
29
+ end
30
+
31
+ def test_api_key_override
32
+ keys = { :rubygems_api_key => 'KEY', :other => 'OTHER' }
33
+ FileUtils.mkdir_p File.dirname Gem.configuration.credentials_path
34
+
35
+ open Gem.configuration.credentials_path, 'w' do |f|
36
+ f.write keys.to_yaml
37
+ end
38
+
39
+ Gem.configuration.load_api_keys
40
+
41
+ @cmd.add_key_option
42
+ @cmd.handle_options %w[--key other]
43
+
44
+ assert_equal 'OTHER', @cmd.api_key
45
+ end
46
+
17
47
  def test_sign_in
18
48
  api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'
19
49
  util_sign_in [api_key, 200, 'OK']
@@ -99,5 +129,23 @@ class TestGemGemcutterUtilities < Gem::TestCase
99
129
  end
100
130
  end
101
131
 
132
+ def test_verify_api_key
133
+ keys = {:other => 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903'}
134
+ FileUtils.mkdir_p File.dirname(Gem.configuration.credentials_path)
135
+ File.open Gem.configuration.credentials_path, 'w' do |f|
136
+ f.write keys.to_yaml
137
+ end
138
+ Gem.configuration.load_api_keys
139
+
140
+ assert_equal 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903',
141
+ @cmd.verify_api_key(:other)
142
+ end
143
+
144
+ def test_verify_missing_api_key
145
+ assert_raises Gem::MockGemUi::TermError do
146
+ @cmd.verify_api_key :missing
147
+ end
148
+ end
149
+
102
150
  end
103
151
 
@@ -12,21 +12,22 @@ class TestGemIndexer < Gem::TestCase
12
12
 
13
13
  util_make_gems
14
14
 
15
- @d2_0 = quick_gem 'd', '2.0' do |s|
15
+ @d2_0 = quick_spec 'd', '2.0' do |s|
16
16
  s.date = Gem::Specification::TODAY - 86400 * 3
17
17
  end
18
18
  util_build_gem @d2_0
19
19
 
20
- @d2_0_a = quick_gem 'd', '2.0.a'
20
+ @d2_0_a = quick_spec 'd', '2.0.a'
21
21
  util_build_gem @d2_0_a
22
22
 
23
- @d2_0_b = quick_gem 'd', '2.0.b'
23
+ @d2_0_b = quick_spec 'd', '2.0.b'
24
24
  util_build_gem @d2_0_b
25
25
 
26
+ @tempdir = File.join(@tempdir, 'indexer')
27
+
26
28
  gems = File.join(@tempdir, 'gems')
27
29
  FileUtils.mkdir_p gems
28
- cache_gems = File.join @gemhome, 'cache', '*.gem'
29
- FileUtils.mv Dir[cache_gems], gems
30
+ FileUtils.mv Dir[Gem.cache_gem('*.gem', @gemhome)], gems
30
31
 
31
32
  @indexer = Gem::Indexer.new @tempdir, :rss_title => 'ExampleForge gems',
32
33
  :rss_host => 'example.com',
@@ -54,7 +55,7 @@ class TestGemIndexer < Gem::TestCase
54
55
  end
55
56
 
56
57
  def test_build_indicies
57
- spec = quick_gem 'd', '2.0'
58
+ spec = quick_spec 'd', '2.0'
58
59
  spec.instance_variable_set :@original_platform, ''
59
60
 
60
61
  @indexer.make_temp_directories
@@ -504,17 +505,17 @@ eighty characters.&lt;/pre&gt;
504
505
  assert File.directory?(quickdir)
505
506
  assert File.directory?(marshal_quickdir)
506
507
 
507
- @d2_1 = quick_gem 'd', '2.1'
508
+ @d2_1 = quick_spec 'd', '2.1'
508
509
  util_build_gem @d2_1
509
510
  @d2_1_tuple = [@d2_1.name, @d2_1.version, @d2_1.original_platform]
510
511
 
511
- @d2_1_a = quick_gem 'd', '2.2.a'
512
+ @d2_1_a = quick_spec 'd', '2.2.a'
512
513
  util_build_gem @d2_1_a
513
514
  @d2_1_a_tuple = [@d2_1_a.name, @d2_1_a.version, @d2_1_a.original_platform]
514
515
 
515
516
  gems = File.join @tempdir, 'gems'
516
- FileUtils.mv File.join(@gemhome, 'cache', @d2_1.file_name), gems
517
- FileUtils.mv File.join(@gemhome, 'cache', @d2_1_a.file_name), gems
517
+ FileUtils.mv Gem.cache_gem(@d2_1.file_name, @gemhome), gems
518
+ FileUtils.mv Gem.cache_gem(@d2_1_a.file_name, @gemhome), gems
518
519
 
519
520
  use_ui @ui do
520
521
  @indexer.update_index
@@ -63,6 +63,4 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
63
63
  ensure
64
64
  FileUtils.chmod 0755, @gemhome
65
65
  end
66
-
67
66
  end
68
-
@@ -3,7 +3,8 @@ require 'rubygems/installer_test_case'
3
3
  class TestGemInstaller < Gem::InstallerTestCase
4
4
 
5
5
  def test_app_script_text
6
- util_make_exec '2', ''
6
+ @spec.version = 2
7
+ util_make_exec @spec, ''
7
8
 
8
9
  expected = <<-EOF
9
10
  #!#{Gem.ruby}
@@ -24,10 +25,10 @@ if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
24
25
  end
25
26
 
26
27
  gem 'a', version
27
- load Gem.bin_path('a', 'my_exec', version)
28
+ load Gem.bin_path('a', 'executable', version)
28
29
  EOF
29
30
 
30
- wrapper = @installer.app_script_text 'my_exec'
31
+ wrapper = @installer.app_script_text 'executable'
31
32
  assert_equal expected, wrapper
32
33
  end
33
34
 
@@ -95,7 +96,7 @@ load Gem.bin_path('a', 'my_exec', version)
95
96
  @installer.ensure_dependency @spec, dep
96
97
  end
97
98
 
98
- assert_equal 'a requires b (> 2, runtime)', e.message
99
+ assert_equal 'a requires b (> 2)', e.message
99
100
  end
100
101
 
101
102
  def test_extract_files
@@ -164,11 +165,11 @@ load Gem.bin_path('a', 'my_exec', version)
164
165
  def test_generate_bin_bindir
165
166
  @installer.wrappers = true
166
167
 
167
- @spec.executables = ["my_exec"]
168
+ @spec.executables = %w[executable]
168
169
  @spec.bindir = '.'
169
170
 
170
- exec_file = @installer.formatted_program_filename "my_exec"
171
- exec_path = File.join util_gem_dir(@spec.version), exec_file
171
+ exec_file = @installer.formatted_program_filename 'executable'
172
+ exec_path = File.join util_gem_dir(@spec), exec_file
172
173
  File.open exec_path, 'w' do |f|
173
174
  f.puts '#!/usr/bin/ruby'
174
175
  end
@@ -178,7 +179,7 @@ load Gem.bin_path('a', 'my_exec', version)
178
179
  @installer.generate_bin
179
180
 
180
181
  assert_equal true, File.directory?(util_inst_bindir)
181
- installed_exec = File.join(util_inst_bindir, "my_exec")
182
+ installed_exec = File.join(util_inst_bindir, 'executable')
182
183
  assert_equal true, File.exist?(installed_exec)
183
184
  assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
184
185
 
@@ -193,7 +194,7 @@ load Gem.bin_path('a', 'my_exec', version)
193
194
 
194
195
  @installer.generate_bin
195
196
  assert_equal true, File.directory?(util_inst_bindir)
196
- installed_exec = File.join(util_inst_bindir, "my_exec")
197
+ installed_exec = File.join(util_inst_bindir, 'executable')
197
198
  assert_equal true, File.exist?(installed_exec)
198
199
  assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
199
200
 
@@ -210,7 +211,7 @@ load Gem.bin_path('a', 'my_exec', version)
210
211
  Gem::Installer.exec_format = 'foo-%s-bar'
211
212
  @installer.generate_bin
212
213
  assert_equal true, File.directory?(util_inst_bindir)
213
- installed_exec = File.join util_inst_bindir, 'foo-my_exec-bar'
214
+ installed_exec = File.join util_inst_bindir, 'foo-executable-bar'
214
215
  assert_equal true, File.exist?(installed_exec)
215
216
  ensure
216
217
  Gem::Installer.exec_format = nil
@@ -224,7 +225,7 @@ load Gem.bin_path('a', 'my_exec', version)
224
225
  Gem::Installer.exec_format = 'foo-%s-bar'
225
226
  @installer.generate_bin
226
227
  assert_equal true, File.directory?(util_inst_bindir)
227
- installed_exec = File.join util_inst_bindir, 'my_exec'
228
+ installed_exec = File.join util_inst_bindir, 'executable'
228
229
  assert_equal true, File.exist?(installed_exec)
229
230
  ensure
230
231
  Gem::Installer.exec_format = nil
@@ -232,12 +233,12 @@ load Gem.bin_path('a', 'my_exec', version)
232
233
 
233
234
  def test_generate_bin_script_install_dir
234
235
  @installer.wrappers = true
235
- @spec.executables = ["my_exec"]
236
+ @spec.executables = %w[executable]
236
237
 
237
238
  gem_dir = File.join "#{@gemhome}2", 'gems', @spec.full_name
238
239
  gem_bindir = File.join gem_dir, 'bin'
239
240
  FileUtils.mkdir_p gem_bindir
240
- File.open File.join(gem_bindir, "my_exec"), 'w' do |f|
241
+ File.open File.join(gem_bindir, 'executable'), 'w' do |f|
241
242
  f.puts "#!/bin/ruby"
242
243
  end
243
244
 
@@ -246,7 +247,7 @@ load Gem.bin_path('a', 'my_exec', version)
246
247
 
247
248
  @installer.generate_bin
248
249
 
249
- installed_exec = File.join("#{@gemhome}2", 'bin', 'my_exec')
250
+ installed_exec = File.join("#{@gemhome}2", 'bin', 'executable')
250
251
  assert_equal true, File.exist?(installed_exec)
251
252
  assert_equal(0100755, File.stat(installed_exec).mode) unless win_platform?
252
253
 
@@ -255,9 +256,12 @@ load Gem.bin_path('a', 'my_exec', version)
255
256
  end
256
257
 
257
258
  def test_generate_bin_script_no_execs
259
+ util_execless
260
+
258
261
  @installer.wrappers = true
259
262
  @installer.generate_bin
260
- assert_equal false, File.exist?(util_inst_bindir)
263
+
264
+ refute File.exist?(util_inst_bindir), 'bin dir was created when not needed'
261
265
  end
262
266
 
263
267
  def test_generate_bin_script_no_perms
@@ -281,18 +285,18 @@ load Gem.bin_path('a', 'my_exec', version)
281
285
 
282
286
  def test_generate_bin_script_no_shebang
283
287
  @installer.wrappers = true
284
- @spec.executables = ["my_exec"]
288
+ @spec.executables = %w[executable]
285
289
 
286
290
  gem_dir = File.join @gemhome, 'gems', @spec.full_name
287
291
  gem_bindir = File.join gem_dir, 'bin'
288
292
  FileUtils.mkdir_p gem_bindir
289
- File.open File.join(gem_bindir, "my_exec"), 'w' do |f|
293
+ File.open File.join(gem_bindir, 'executable'), 'w' do |f|
290
294
  f.puts "blah blah blah"
291
295
  end
292
296
 
293
297
  @installer.generate_bin
294
298
 
295
- installed_exec = File.join @gemhome, 'bin', 'my_exec'
299
+ installed_exec = File.join @gemhome, 'bin', 'executable'
296
300
  assert_equal true, File.exist?(installed_exec)
297
301
  assert_equal 0100755, File.stat(installed_exec).mode unless win_platform?
298
302
 
@@ -306,9 +310,9 @@ load Gem.bin_path('a', 'my_exec', version)
306
310
  @installer.wrappers = true
307
311
  util_make_exec
308
312
  @installer.gem_dir = util_gem_dir
309
- installed_exec = File.join(util_inst_bindir, "my_exec")
313
+ installed_exec = File.join(util_inst_bindir, 'executable')
310
314
 
311
- real_exec = File.join util_gem_dir, 'bin', 'my_exec'
315
+ real_exec = File.join util_gem_dir, 'bin', 'executable'
312
316
 
313
317
  # fake --no-wrappers for previous install
314
318
  unless Gem.win_platform? then
@@ -336,16 +340,19 @@ load Gem.bin_path('a', 'my_exec', version)
336
340
 
337
341
  @installer.generate_bin
338
342
  assert_equal true, File.directory?(util_inst_bindir)
339
- installed_exec = File.join(util_inst_bindir, "my_exec")
343
+ installed_exec = File.join(util_inst_bindir, 'executable')
340
344
  assert_equal true, File.symlink?(installed_exec)
341
- assert_equal(File.join(util_gem_dir, "bin", "my_exec"),
345
+ assert_equal(File.join(util_gem_dir, 'bin', 'executable'),
342
346
  File.readlink(installed_exec))
343
347
  end
344
348
 
345
349
  def test_generate_bin_symlink_no_execs
350
+ util_execless
351
+
346
352
  @installer.wrappers = false
347
353
  @installer.generate_bin
348
- assert_equal false, File.exist?(util_inst_bindir)
354
+
355
+ refute File.exist?(util_inst_bindir)
349
356
  end
350
357
 
351
358
  def test_generate_bin_symlink_no_perms
@@ -376,8 +383,8 @@ load Gem.bin_path('a', 'my_exec', version)
376
383
  @installer.gem_dir = util_gem_dir
377
384
 
378
385
  @installer.generate_bin
379
- installed_exec = File.join(util_inst_bindir, "my_exec")
380
- assert_equal(File.join(util_gem_dir, "bin", "my_exec"),
386
+ installed_exec = File.join(util_inst_bindir, 'executable')
387
+ assert_equal(File.join(util_gem_dir, 'bin', 'executable'),
381
388
  File.readlink(installed_exec))
382
389
 
383
390
  @spec = Gem::Specification.new do |s|
@@ -389,11 +396,12 @@ load Gem.bin_path('a', 'my_exec', version)
389
396
  s.require_path = 'lib'
390
397
  end
391
398
 
392
- util_make_exec '3'
393
- @installer.gem_dir = File.join util_gem_dir('3')
399
+ @spec.version = 3
400
+ util_make_exec
401
+ @installer.gem_dir = File.join util_gem_dir @spec
394
402
  @installer.generate_bin
395
- installed_exec = File.join(util_inst_bindir, "my_exec")
396
- assert_equal(File.join(util_gem_bindir('3'), "my_exec"),
403
+ installed_exec = File.join(util_inst_bindir, 'executable')
404
+ assert_equal(File.join(util_gem_bindir(@spec), 'executable'),
397
405
  File.readlink(installed_exec),
398
406
  "Ensure symlink moved to latest version")
399
407
  end
@@ -406,8 +414,8 @@ load Gem.bin_path('a', 'my_exec', version)
406
414
  @installer.gem_dir = util_gem_dir
407
415
 
408
416
  @installer.generate_bin
409
- installed_exec = File.join(util_inst_bindir, "my_exec")
410
- assert_equal(File.join(util_gem_dir, "bin", "my_exec"),
417
+ installed_exec = File.join(util_inst_bindir, 'executable')
418
+ assert_equal(File.join(util_gem_dir, 'bin', 'executable'),
411
419
  File.readlink(installed_exec))
412
420
 
413
421
  spec = Gem::Specification.new do |s|
@@ -419,14 +427,16 @@ load Gem.bin_path('a', 'my_exec', version)
419
427
  s.require_path = 'lib'
420
428
  end
421
429
 
422
- util_make_exec '1'
423
- @installer.gem_dir = util_gem_dir('1')
430
+ util_make_exec
431
+ one = @spec.dup
432
+ one.version = 1
433
+ @installer.gem_dir = util_gem_dir one
424
434
  @installer.spec = spec
425
435
 
426
436
  @installer.generate_bin
427
437
 
428
- installed_exec = File.join(util_inst_bindir, "my_exec")
429
- assert_equal(File.join(util_gem_dir('2'), "bin", "my_exec"),
438
+ installed_exec = File.join(util_inst_bindir, 'executable')
439
+ assert_equal(File.join(util_gem_dir, 'bin', 'executable'),
430
440
  File.readlink(installed_exec),
431
441
  "Ensure symlink not moved")
432
442
  end
@@ -439,7 +449,7 @@ load Gem.bin_path('a', 'my_exec', version)
439
449
  @installer.gem_dir = util_gem_dir
440
450
 
441
451
  @installer.generate_bin
442
- installed_exec = File.join(util_inst_bindir, "my_exec")
452
+ installed_exec = File.join(util_inst_bindir, 'executable')
443
453
  assert_equal true, File.exist?(installed_exec)
444
454
 
445
455
  @spec = Gem::Specification.new do |s|
@@ -452,11 +462,12 @@ load Gem.bin_path('a', 'my_exec', version)
452
462
  end
453
463
 
454
464
  @installer.wrappers = false
455
- util_make_exec '3'
456
- @installer.gem_dir = util_gem_dir '3'
465
+ @spec.version = 3
466
+ util_make_exec
467
+ @installer.gem_dir = util_gem_dir
457
468
  @installer.generate_bin
458
- installed_exec = File.join(util_inst_bindir, "my_exec")
459
- assert_equal(File.join(util_gem_dir('3'), "bin", "my_exec"),
469
+ installed_exec = File.join(util_inst_bindir, 'executable')
470
+ assert_equal(File.join(util_gem_dir, 'bin', 'executable'),
460
471
  File.readlink(installed_exec),
461
472
  "Ensure symlink moved to latest version")
462
473
  end
@@ -473,7 +484,7 @@ load Gem.bin_path('a', 'my_exec', version)
473
484
  end
474
485
 
475
486
  assert_equal true, File.directory?(util_inst_bindir)
476
- installed_exec = File.join(util_inst_bindir, "my_exec")
487
+ installed_exec = File.join(util_inst_bindir, 'executable')
477
488
  assert_equal true, File.exist?(installed_exec)
478
489
 
479
490
  assert_match(/Unable to use symlinks on Windows, installing wrapper/i,
@@ -494,19 +505,18 @@ load Gem.bin_path('a', 'my_exec', version)
494
505
  @installer.generate_bin
495
506
 
496
507
  default_shebang = Gem.ruby
497
- shebang_line = open("#{@gemhome}/bin/my_exec") { |f| f.readlines.first }
508
+ shebang_line = open("#{@gemhome}/bin/executable") { |f| f.readlines.first }
498
509
  assert_match(/\A#!/, shebang_line)
499
510
  assert_match(/#{default_shebang}/, shebang_line)
500
511
  end
501
512
 
502
513
  def test_initialize
503
- spec = quick_gem 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end
514
+ spec = quick_spec 'a' do |s| s.platform = Gem::Platform.new 'mswin32' end
504
515
  gem = File.join @tempdir, spec.file_name
505
516
 
506
517
  Dir.mkdir util_inst_bindir
507
518
  util_build_gem spec
508
- FileUtils.mv File.join(@gemhome, 'cache', spec.file_name),
509
- @tempdir
519
+ FileUtils.mv Gem.cache_gem(spec.file_name, @gemhome), @tempdir
510
520
 
511
521
  installer = Gem::Installer.new gem
512
522
 
@@ -519,7 +529,7 @@ load Gem.bin_path('a', 'my_exec', version)
519
529
  util_clear_gems
520
530
 
521
531
  gemdir = File.join @gemhome, 'gems', @spec.full_name
522
- cache_file = File.join @gemhome, 'cache', @spec.file_name
532
+ cache_file = Gem.cache_gem(@spec.file_name, @gemhome)
523
533
  stub_exe = File.join @gemhome, 'bin', 'executable'
524
534
  rakefile = File.join gemdir, 'ext', 'a', 'Rakefile'
525
535
 
@@ -568,6 +578,42 @@ load Gem.bin_path('a', 'my_exec', version)
568
578
  assert_same @installer, @pre_install_hook_arg
569
579
  end
570
580
 
581
+ def test_install_with_no_prior_files
582
+ Dir.mkdir util_inst_bindir
583
+ util_clear_gems
584
+
585
+ util_setup_gem
586
+ build_rake_in do
587
+ use_ui @ui do
588
+ assert_equal @spec, @installer.install
589
+ end
590
+ end
591
+
592
+ gemdir = File.join(@gemhome, 'gems', @spec.full_name)
593
+ assert File.exist?(File.join(gemdir, 'lib', 'code.rb'))
594
+
595
+ util_setup_gem
596
+ # Morph spec to have lib/other.rb instead of code.rb and recreate
597
+ @spec.files = File.join('lib', 'other.rb')
598
+ Dir.chdir @tempdir do
599
+ File.open File.join('lib', 'other.rb'), 'w' do |f| f.puts '1' end
600
+ use_ui ui do
601
+ FileUtils.rm @gem
602
+ Gem::Builder.new(@spec).build
603
+ end
604
+ end
605
+ @installer = Gem::Installer.new @gem
606
+ build_rake_in do
607
+ use_ui @ui do
608
+ assert_equal @spec, @installer.install
609
+ end
610
+ end
611
+
612
+ assert File.exist?(File.join(gemdir, 'lib', 'other.rb'))
613
+ refute(File.exist?(File.join(gemdir, 'lib', 'code.rb')),
614
+ "code.rb from prior install of same gem shouldn't remain here")
615
+ end
616
+
571
617
  def test_install_bad_gem
572
618
  gem = nil
573
619
 
@@ -604,7 +650,7 @@ load Gem.bin_path('a', 'my_exec', version)
604
650
  gemhome2 = "#{@gemhome}2"
605
651
  @spec.add_dependency 'b'
606
652
 
607
- b2 = quick_gem 'b', 2
653
+ b2 = quick_spec 'b', 2
608
654
 
609
655
  FileUtils.mv @gemhome, gemhome2
610
656
  Gem.source_index.gems.delete b2.full_name
@@ -660,7 +706,7 @@ load Gem.bin_path('a', 'my_exec', version)
660
706
  end
661
707
 
662
708
  def test_install_missing_dirs
663
- FileUtils.rm_f File.join(Gem.dir, 'cache')
709
+ FileUtils.rm_f Gem.cache_dir
664
710
  FileUtils.rm_f File.join(Gem.dir, 'docs')
665
711
  FileUtils.rm_f File.join(Gem.dir, 'specifications')
666
712
 
@@ -670,11 +716,11 @@ load Gem.bin_path('a', 'my_exec', version)
670
716
  @installer.install
671
717
  end
672
718
 
673
- File.directory? File.join(Gem.dir, 'cache')
719
+ File.directory? Gem.cache_dir
674
720
  File.directory? File.join(Gem.dir, 'docs')
675
721
  File.directory? File.join(Gem.dir, 'specifications')
676
722
 
677
- assert File.exist?(File.join(@gemhome, 'cache', @spec.file_name))
723
+ assert File.exist?(Gem.cache_gem(@spec.file_name, @gemhome))
678
724
  assert File.exist?(File.join(@gemhome, 'specifications', @spec.spec_name))
679
725
  end
680
726
 
@@ -780,13 +826,13 @@ load Gem.bin_path('a', 'my_exec', version)
780
826
  end
781
827
 
782
828
  def test_install_wrong_rubygems_version
783
- spec = quick_gem 'old_rubygems_required', '1' do |s|
829
+ spec = quick_spec 'old_rubygems_required', '1' do |s|
784
830
  s.required_rubygems_version = '< 0'
785
831
  end
786
832
 
787
833
  util_build_gem spec
788
834
 
789
- gem = File.join @gemhome, 'cache', spec.file_name
835
+ gem = Gem.cache_gem(spec.file_name, @gemhome)
790
836
 
791
837
  use_ui @ui do
792
838
  @installer = Gem::Installer.new gem
@@ -807,49 +853,49 @@ load Gem.bin_path('a', 'my_exec', version)
807
853
  end
808
854
 
809
855
  def test_shebang
810
- util_make_exec '2', "#!/usr/bin/ruby"
856
+ util_make_exec @spec, "#!/usr/bin/ruby"
811
857
 
812
- shebang = @installer.shebang 'my_exec'
858
+ shebang = @installer.shebang 'executable'
813
859
 
814
860
  assert_equal "#!#{Gem.ruby}", shebang
815
861
  end
816
862
 
817
863
  def test_shebang_arguments
818
- util_make_exec '2', "#!/usr/bin/ruby -ws"
864
+ util_make_exec @spec, "#!/usr/bin/ruby -ws"
819
865
 
820
- shebang = @installer.shebang 'my_exec'
866
+ shebang = @installer.shebang 'executable'
821
867
 
822
868
  assert_equal "#!#{Gem.ruby} -ws", shebang
823
869
  end
824
870
 
825
871
  def test_shebang_empty
826
- util_make_exec '2', ''
872
+ util_make_exec @spec, ''
827
873
 
828
- shebang = @installer.shebang 'my_exec'
874
+ shebang = @installer.shebang 'executable'
829
875
  assert_equal "#!#{Gem.ruby}", shebang
830
876
  end
831
877
 
832
878
  def test_shebang_env
833
- util_make_exec '2', "#!/usr/bin/env ruby"
879
+ util_make_exec @spec, "#!/usr/bin/env ruby"
834
880
 
835
- shebang = @installer.shebang 'my_exec'
881
+ shebang = @installer.shebang 'executable'
836
882
 
837
883
  assert_equal "#!#{Gem.ruby}", shebang
838
884
  end
839
885
 
840
886
  def test_shebang_env_arguments
841
- util_make_exec '2', "#!/usr/bin/env ruby -ws"
887
+ util_make_exec @spec, "#!/usr/bin/env ruby -ws"
842
888
 
843
- shebang = @installer.shebang 'my_exec'
889
+ shebang = @installer.shebang 'executable'
844
890
 
845
891
  assert_equal "#!#{Gem.ruby} -ws", shebang
846
892
  end
847
893
 
848
894
  def test_shebang_env_shebang
849
- util_make_exec '2', ''
895
+ util_make_exec @spec, ''
850
896
  @installer.env_shebang = true
851
897
 
852
- shebang = @installer.shebang 'my_exec'
898
+ shebang = @installer.shebang 'executable'
853
899
 
854
900
  env_shebang = "/usr/bin/env" unless Gem.win_platform?
855
901
 
@@ -858,49 +904,49 @@ load Gem.bin_path('a', 'my_exec', version)
858
904
  end
859
905
 
860
906
  def test_shebang_nested
861
- util_make_exec '2', "#!/opt/local/ruby/bin/ruby"
907
+ util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
862
908
 
863
- shebang = @installer.shebang 'my_exec'
909
+ shebang = @installer.shebang 'executable'
864
910
 
865
911
  assert_equal "#!#{Gem.ruby}", shebang
866
912
  end
867
913
 
868
914
  def test_shebang_nested_arguments
869
- util_make_exec '2', "#!/opt/local/ruby/bin/ruby -ws"
915
+ util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
870
916
 
871
- shebang = @installer.shebang 'my_exec'
917
+ shebang = @installer.shebang 'executable'
872
918
 
873
919
  assert_equal "#!#{Gem.ruby} -ws", shebang
874
920
  end
875
921
 
876
922
  def test_shebang_version
877
- util_make_exec '2', "#!/usr/bin/ruby18"
923
+ util_make_exec @spec, "#!/usr/bin/ruby18"
878
924
 
879
- shebang = @installer.shebang 'my_exec'
925
+ shebang = @installer.shebang 'executable'
880
926
 
881
927
  assert_equal "#!#{Gem.ruby}", shebang
882
928
  end
883
929
 
884
930
  def test_shebang_version_arguments
885
- util_make_exec '2', "#!/usr/bin/ruby18 -ws"
931
+ util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
886
932
 
887
- shebang = @installer.shebang 'my_exec'
933
+ shebang = @installer.shebang 'executable'
888
934
 
889
935
  assert_equal "#!#{Gem.ruby} -ws", shebang
890
936
  end
891
937
 
892
938
  def test_shebang_version_env
893
- util_make_exec '2', "#!/usr/bin/env ruby18"
939
+ util_make_exec @spec, "#!/usr/bin/env ruby18"
894
940
 
895
- shebang = @installer.shebang 'my_exec'
941
+ shebang = @installer.shebang 'executable'
896
942
 
897
943
  assert_equal "#!#{Gem.ruby}", shebang
898
944
  end
899
945
 
900
946
  def test_shebang_version_env_arguments
901
- util_make_exec '2', "#!/usr/bin/env ruby18 -ws"
947
+ util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
902
948
 
903
- shebang = @installer.shebang 'my_exec'
949
+ shebang = @installer.shebang 'executable'
904
950
 
905
951
  assert_equal "#!#{Gem.ruby} -ws", shebang
906
952
  end
@@ -931,14 +977,41 @@ load Gem.bin_path('a', 'my_exec', version)
931
977
  assert_equal @spec, eval(File.read(spec_file))
932
978
  end
933
979
 
980
+ def test_write_spec_writes_cached_spec
981
+ spec_dir = File.join @gemhome, 'specifications'
982
+ spec_file = File.join spec_dir, @spec.spec_name
983
+ FileUtils.rm spec_file
984
+ refute File.exist?(spec_file)
985
+
986
+ @spec.files = %w[a.rb b.rb c.rb]
987
+
988
+ @installer.spec = @spec
989
+ @installer.gem_home = @gemhome
990
+
991
+ @installer.write_spec
992
+
993
+ # cached specs have no file manifest:
994
+ @spec.files = []
995
+
996
+ assert_equal @spec, eval(File.read(spec_file))
997
+ end
998
+
934
999
  def old_ruby_required
935
- spec = quick_gem 'old_ruby_required', '1' do |s|
1000
+ spec = quick_spec 'old_ruby_required', '1' do |s|
936
1001
  s.required_ruby_version = '= 1.4.6'
937
1002
  end
938
1003
 
939
1004
  util_build_gem spec
940
1005
 
941
- File.join @gemhome, 'cache', spec.file_name
1006
+ Gem.cache_gem(spec.file_name, @gemhome)
1007
+ end
1008
+
1009
+ def util_execless
1010
+ @spec = quick_spec 'z'
1011
+
1012
+ gem = File.join @tempdir, @spec.file_name
1013
+
1014
+ @installer = util_installer @spec, gem, @gemhome
942
1015
  end
943
1016
 
944
1017
  end