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.
- 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
|