rubygems-update 1.5.3 → 1.6.0
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.
- data.tar.gz.sig +2 -1
- data/History.txt +60 -9
- data/Manifest.txt +1 -1
- data/Rakefile +0 -2
- data/lib/rubygems.rb +142 -65
- data/lib/rubygems/commands/owner_command.rb +3 -2
- data/lib/rubygems/commands/pristine_command.rb +5 -3
- data/lib/rubygems/commands/push_command.rb +8 -4
- data/lib/rubygems/commands/setup_command.rb +1 -2
- data/lib/rubygems/commands/uninstall_command.rb +5 -0
- data/lib/rubygems/commands/unpack_command.rb +10 -16
- data/lib/rubygems/config_file.rb +12 -5
- data/lib/rubygems/custom_require.rb +27 -7
- data/lib/rubygems/dependency.rb +33 -8
- data/lib/rubygems/dependency_installer.rb +21 -6
- data/lib/rubygems/dependency_list.rb +35 -3
- data/lib/rubygems/doc_manager.rb +6 -4
- data/lib/rubygems/gem_path_searcher.rb +45 -1
- data/lib/rubygems/gemcutter_utilities.rb +33 -0
- data/lib/rubygems/indexer.rb +1 -0
- data/lib/rubygems/installer.rb +11 -7
- data/lib/rubygems/installer_test_case.rb +23 -15
- data/lib/rubygems/mock_gem_ui.rb +1 -1
- data/lib/rubygems/remote_fetcher.rb +29 -10
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/security.rb +1 -0
- data/lib/rubygems/source_index.rb +3 -2
- data/lib/rubygems/spec_fetcher.rb +3 -1
- data/lib/rubygems/specification.rb +54 -12
- data/lib/rubygems/test_case.rb +99 -28
- data/lib/rubygems/test_utilities.rb +11 -1
- data/lib/rubygems/uninstaller.rb +22 -11
- data/lib/rubygems/user_interaction.rb +50 -29
- data/lib/rubygems/validator.rb +1 -1
- data/test/rubygems/fix_openssl_warnings.rb +12 -0
- data/test/rubygems/plugin/load/rubygems_plugin.rb +3 -1
- data/test/rubygems/test_gem.rb +384 -38
- data/test/rubygems/test_gem_builder.rb +1 -1
- data/test/rubygems/test_gem_command_manager.rb +2 -2
- data/test/rubygems/test_gem_commands_build_command.rb +1 -1
- data/test/rubygems/test_gem_commands_cert_command.rb +2 -1
- data/test/rubygems/test_gem_commands_dependency_command.rb +6 -5
- data/test/rubygems/test_gem_commands_fetch_command.rb +4 -4
- data/test/rubygems/test_gem_commands_install_command.rb +21 -18
- data/test/rubygems/test_gem_commands_lock_command.rb +1 -1
- data/test/rubygems/test_gem_commands_outdated_command.rb +2 -5
- data/test/rubygems/test_gem_commands_owner_command.rb +42 -0
- data/test/rubygems/test_gem_commands_pristine_command.rb +28 -8
- data/test/rubygems/test_gem_commands_push_command.rb +31 -5
- data/test/rubygems/test_gem_commands_specification_command.rb +8 -8
- data/test/rubygems/test_gem_commands_stale_command.rb +4 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +23 -4
- data/test/rubygems/test_gem_commands_unpack_command.rb +10 -8
- data/test/rubygems/test_gem_commands_update_command.rb +16 -13
- data/test/rubygems/test_gem_commands_which_command.rb +1 -1
- data/test/rubygems/test_gem_config_file.rb +14 -0
- data/test/rubygems/test_gem_dependency.rb +39 -0
- data/test/rubygems/test_gem_dependency_installer.rb +213 -92
- data/test/rubygems/test_gem_dependency_list.rb +37 -17
- data/test/rubygems/test_gem_doc_manager.rb +5 -4
- data/test/rubygems/test_gem_format.rb +2 -2
- data/test/rubygems/test_gem_gemcutter_utilities.rb +48 -0
- data/test/rubygems/test_gem_indexer.rb +11 -10
- data/test/rubygems/test_gem_install_update_options.rb +0 -2
- data/test/rubygems/test_gem_installer.rb +151 -78
- data/test/rubygems/test_gem_package_tar_output.rb +3 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +23 -14
- data/test/rubygems/test_gem_requirement.rb +4 -0
- data/test/rubygems/test_gem_security.rb +1 -0
- data/test/rubygems/test_gem_source_index.rb +17 -16
- data/test/rubygems/test_gem_spec_fetcher.rb +6 -1
- data/test/rubygems/test_gem_specification.rb +81 -31
- data/test/rubygems/test_gem_stream_ui.rb +11 -1
- data/test/rubygems/test_gem_uninstaller.rb +70 -10
- data/test/rubygems/test_gem_validator.rb +1 -1
- data/test/rubygems/test_kernel.rb +1 -1
- metadata +7 -7
- metadata.gz.sig +0 -0
- data/ChangeLog +0 -5811
@@ -8,17 +8,17 @@ class TestGemDependencyList < Gem::TestCase
|
|
8
8
|
|
9
9
|
@deplist = Gem::DependencyList.new
|
10
10
|
|
11
|
-
@a1 =
|
12
|
-
@a2 =
|
13
|
-
@a3 =
|
11
|
+
@a1 = quick_spec 'a', '1'
|
12
|
+
@a2 = quick_spec 'a', '2'
|
13
|
+
@a3 = quick_spec 'a', '3'
|
14
14
|
|
15
|
-
@b1 =
|
16
|
-
@b2 =
|
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 =
|
19
|
-
@c2 =
|
18
|
+
@c1 = quick_spec 'c', '1' do |s| s.add_dependency 'b', '>= 1' end
|
19
|
+
@c2 = quick_spec 'c', '2'
|
20
20
|
|
21
|
-
@d1 =
|
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 =
|
70
|
-
f1 =
|
71
|
-
g1 =
|
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 =
|
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 =
|
138
|
-
a2 =
|
155
|
+
a1 = quick_spec 'a', '1'
|
156
|
+
a2 = quick_spec 'a', '2'
|
139
157
|
|
140
|
-
b =
|
141
|
-
c =
|
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 =
|
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
|
-
|
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
|
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,
|
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 '
|
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[
|
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 =
|
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 =
|
20
|
+
@d2_0_a = quick_spec 'd', '2.0.a'
|
21
21
|
util_build_gem @d2_0_a
|
22
22
|
|
23
|
-
@d2_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
|
-
|
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 =
|
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.</pre>
|
|
504
505
|
assert File.directory?(quickdir)
|
505
506
|
assert File.directory?(marshal_quickdir)
|
506
507
|
|
507
|
-
@d2_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 =
|
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
|
517
|
-
FileUtils.mv
|
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
|
@@ -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
|
-
|
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', '
|
28
|
+
load Gem.bin_path('a', 'executable', version)
|
28
29
|
EOF
|
29
30
|
|
30
|
-
wrapper = @installer.app_script_text '
|
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
|
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 = [
|
168
|
+
@spec.executables = %w[executable]
|
168
169
|
@spec.bindir = '.'
|
169
170
|
|
170
|
-
exec_file = @installer.formatted_program_filename
|
171
|
-
exec_path = File.join util_gem_dir(@spec
|
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,
|
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,
|
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-
|
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, '
|
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 = [
|
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,
|
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', '
|
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
|
-
|
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 = [
|
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,
|
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', '
|
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,
|
313
|
+
installed_exec = File.join(util_inst_bindir, 'executable')
|
310
314
|
|
311
|
-
real_exec = File.join util_gem_dir, 'bin', '
|
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,
|
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,
|
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
|
-
|
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,
|
380
|
-
assert_equal(File.join(util_gem_dir,
|
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
|
-
|
393
|
-
|
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,
|
396
|
-
assert_equal(File.join(util_gem_bindir(
|
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,
|
410
|
-
assert_equal(File.join(util_gem_dir,
|
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
|
423
|
-
|
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,
|
429
|
-
assert_equal(File.join(util_gem_dir
|
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,
|
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
|
-
|
456
|
-
|
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,
|
459
|
-
assert_equal(File.join(util_gem_dir
|
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,
|
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/
|
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 =
|
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
|
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 =
|
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 =
|
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
|
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?
|
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?(
|
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 =
|
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 =
|
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
|
856
|
+
util_make_exec @spec, "#!/usr/bin/ruby"
|
811
857
|
|
812
|
-
shebang = @installer.shebang '
|
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
|
864
|
+
util_make_exec @spec, "#!/usr/bin/ruby -ws"
|
819
865
|
|
820
|
-
shebang = @installer.shebang '
|
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
|
872
|
+
util_make_exec @spec, ''
|
827
873
|
|
828
|
-
shebang = @installer.shebang '
|
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
|
879
|
+
util_make_exec @spec, "#!/usr/bin/env ruby"
|
834
880
|
|
835
|
-
shebang = @installer.shebang '
|
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
|
887
|
+
util_make_exec @spec, "#!/usr/bin/env ruby -ws"
|
842
888
|
|
843
|
-
shebang = @installer.shebang '
|
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
|
895
|
+
util_make_exec @spec, ''
|
850
896
|
@installer.env_shebang = true
|
851
897
|
|
852
|
-
shebang = @installer.shebang '
|
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
|
907
|
+
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby"
|
862
908
|
|
863
|
-
shebang = @installer.shebang '
|
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
|
915
|
+
util_make_exec @spec, "#!/opt/local/ruby/bin/ruby -ws"
|
870
916
|
|
871
|
-
shebang = @installer.shebang '
|
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
|
923
|
+
util_make_exec @spec, "#!/usr/bin/ruby18"
|
878
924
|
|
879
|
-
shebang = @installer.shebang '
|
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
|
931
|
+
util_make_exec @spec, "#!/usr/bin/ruby18 -ws"
|
886
932
|
|
887
|
-
shebang = @installer.shebang '
|
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
|
939
|
+
util_make_exec @spec, "#!/usr/bin/env ruby18"
|
894
940
|
|
895
|
-
shebang = @installer.shebang '
|
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
|
947
|
+
util_make_exec @spec, "#!/usr/bin/env ruby18 -ws"
|
902
948
|
|
903
|
-
shebang = @installer.shebang '
|
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 =
|
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
|
-
|
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
|