rubygems-update 2.4.1 → 2.4.2
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.txt +38 -0
- data/README.rdoc +1 -1
- data/Rakefile +3 -3
- data/lib/rubygems.rb +1 -1
- data/lib/rubygems/command_manager.rb +1 -1
- data/lib/rubygems/commands/owner_command.rb +3 -1
- data/lib/rubygems/commands/update_command.rb +6 -5
- data/lib/rubygems/config_file.rb +1 -1
- data/lib/rubygems/dependency.rb +4 -2
- data/lib/rubygems/dependency_installer.rb +2 -0
- data/lib/rubygems/exceptions.rb +2 -2
- data/lib/rubygems/installer.rb +13 -4
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/package/tar_reader/entry.rb +2 -0
- data/lib/rubygems/rdoc.rb +0 -1
- data/lib/rubygems/request/connection_pools.rb +5 -3
- data/lib/rubygems/request_set.rb +57 -1
- data/lib/rubygems/request_set/gem_dependency_api.rb +58 -10
- data/lib/rubygems/request_set/lockfile.rb +13 -5
- data/lib/rubygems/resolver.rb +2 -1
- data/lib/rubygems/resolver/composed_set.rb +12 -0
- data/lib/rubygems/resolver/conflict.rb +2 -2
- data/lib/rubygems/resolver/dependency_request.rb +2 -2
- data/lib/rubygems/resolver/index_set.rb +1 -1
- data/lib/rubygems/resolver/installer_set.rb +6 -0
- data/lib/rubygems/resolver/lock_specification.rb +4 -0
- data/lib/rubygems/resolver/set.rb +8 -2
- data/lib/rubygems/resolver/vendor_set.rb +2 -0
- data/lib/rubygems/source.rb +2 -0
- data/lib/rubygems/source/git.rb +10 -2
- data/lib/rubygems/specification.rb +9 -3
- data/lib/rubygems/stub_specification.rb +5 -0
- data/lib/rubygems/test_case.rb +1 -1
- data/lib/rubygems/test_utilities.rb +2 -0
- data/lib/rubygems/user_interaction.rb +10 -0
- data/lib/rubygems/util.rb +14 -1
- data/test/rubygems/test_gem_commands_setup_command.rb +6 -8
- data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
- data/test/rubygems/test_gem_commands_update_command.rb +28 -0
- data/test/rubygems/test_gem_dependency.rb +27 -0
- data/test/rubygems/test_gem_dependency_installer.rb +21 -0
- data/test/rubygems/test_gem_ext_builder.rb +1 -1
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +6 -6
- data/test/rubygems/test_gem_installer.rb +27 -3
- data/test/rubygems/test_gem_remote_fetcher.rb +4 -0
- data/test/rubygems/test_gem_request_connection_pools.rb +37 -0
- data/test/rubygems/test_gem_request_set.rb +20 -1
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +95 -9
- data/test/rubygems/test_gem_request_set_lockfile.rb +54 -0
- data/test/rubygems/test_gem_resolver_composed_set.rb +13 -0
- data/test/rubygems/test_gem_resolver_conflict.rb +2 -2
- data/test/rubygems/test_gem_resolver_dependency_request.rb +9 -0
- data/test/rubygems/test_gem_resolver_installer_set.rb +12 -0
- data/test/rubygems/test_gem_resolver_lock_specification.rb +11 -0
- data/test/rubygems/test_gem_resolver_vendor_set.rb +3 -1
- data/test/rubygems/test_gem_silent_ui.rb +5 -0
- data/test/rubygems/test_gem_source.rb +13 -0
- data/test/rubygems/test_gem_source_git.rb +15 -0
- data/test/rubygems/test_gem_specification.rb +46 -10
- data/test/rubygems/test_gem_stub_specification.rb +10 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
@@ -126,6 +126,27 @@ class TestGemDependencyInstaller < Gem::TestCase
|
|
126
126
|
assert_equal [p1a], inst.installed_gems
|
127
127
|
end
|
128
128
|
|
129
|
+
def test_install_prerelease_bug_990
|
130
|
+
spec_fetcher do |fetcher|
|
131
|
+
fetcher.gem 'a', '1.b' do |s|
|
132
|
+
s.add_dependency 'b', '~> 1.a'
|
133
|
+
end
|
134
|
+
|
135
|
+
fetcher.gem 'b', '1.b' do |s|
|
136
|
+
s.add_dependency 'c', '>= 1'
|
137
|
+
end
|
138
|
+
|
139
|
+
fetcher.gem 'c', '1.1.b'
|
140
|
+
end
|
141
|
+
|
142
|
+
dep = Gem::Dependency.new 'a'
|
143
|
+
|
144
|
+
inst = Gem::DependencyInstaller.new :prerelease => true
|
145
|
+
inst.install dep
|
146
|
+
|
147
|
+
assert_equal %w[a-1.b b-1.b c-1.1.b], Gem::Specification.map(&:full_name)
|
148
|
+
end
|
149
|
+
|
129
150
|
def test_install_when_only_prerelease
|
130
151
|
p1a, gem = util_gem 'p', '1.a'
|
131
152
|
|
@@ -245,7 +245,7 @@ install:
|
|
245
245
|
refute_path_exists @spec.gem_build_complete_path
|
246
246
|
|
247
247
|
skip "Gem.ruby is not the name of the binary being run in the end" \
|
248
|
-
unless File.read(gem_make_out).include? "#{
|
248
|
+
unless File.read(gem_make_out).include? "#{Gem.ruby}:"
|
249
249
|
|
250
250
|
assert_match %r%#{Regexp.escape Gem.ruby}: No such file%,
|
251
251
|
File.read(gem_make_out)
|
@@ -32,24 +32,24 @@ rye-0.9.8 requires net-ssh (>= 2.0.13) but it conflicted:
|
|
32
32
|
which does not match conflicting dependency (~> 2.2.2)
|
33
33
|
|
34
34
|
Conflicting dependency chains:
|
35
|
-
rye (= 0.9.8), 0.9.8 activated depends on
|
35
|
+
rye (= 0.9.8), 0.9.8 activated, depends on
|
36
36
|
net-ssh (>= 2.0.13), 2.6.5 activated
|
37
37
|
|
38
38
|
versus:
|
39
|
-
rye (= 0.9.8), 0.9.8 activated depends on
|
40
|
-
net-ssh (>= 2.0.13), 2.6.5 activated depends on
|
39
|
+
rye (= 0.9.8), 0.9.8 activated, depends on
|
40
|
+
net-ssh (>= 2.0.13), 2.6.5 activated, depends on
|
41
41
|
net-ssh (~> 2.2.2)
|
42
42
|
|
43
43
|
Activated net-ssh-2.2.2
|
44
44
|
which does not match conflicting dependency (>= 2.6.5)
|
45
45
|
|
46
46
|
Conflicting dependency chains:
|
47
|
-
rye (= 0.9.8), 0.9.8 activated depends on
|
47
|
+
rye (= 0.9.8), 0.9.8 activated, depends on
|
48
48
|
net-ssh (>= 2.0.13), 2.2.2 activated
|
49
49
|
|
50
50
|
versus:
|
51
|
-
rye (= 0.9.8), 0.9.8 activated depends on
|
52
|
-
net-ssh (>= 2.0.13), 2.2.2 activated depends on
|
51
|
+
rye (= 0.9.8), 0.9.8 activated, depends on
|
52
|
+
net-ssh (>= 2.0.13), 2.2.2 activated, depends on
|
53
53
|
net-ssh (>= 2.6.5)
|
54
54
|
|
55
55
|
EXPECTED
|
@@ -189,8 +189,14 @@ gem 'other', version
|
|
189
189
|
end unless Gem.win_platform?
|
190
190
|
|
191
191
|
def test_check_that_user_bin_dir_is_in_path
|
192
|
+
bin_dir = @installer.bin_dir
|
193
|
+
|
194
|
+
if Gem.win_platform?
|
195
|
+
bin_dir = bin_dir.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
|
196
|
+
end
|
197
|
+
|
192
198
|
orig_PATH, ENV['PATH'] =
|
193
|
-
ENV['PATH'], [ENV['PATH'],
|
199
|
+
ENV['PATH'], [ENV['PATH'], bin_dir].join(File::PATH_SEPARATOR)
|
194
200
|
|
195
201
|
use_ui @ui do
|
196
202
|
@installer.check_that_user_bin_dir_is_in_path
|
@@ -202,6 +208,8 @@ gem 'other', version
|
|
202
208
|
end
|
203
209
|
|
204
210
|
def test_check_that_user_bin_dir_is_in_path_tilde
|
211
|
+
skip "Tilde is PATH is not supported under MS Windows" if win_platform?
|
212
|
+
|
205
213
|
orig_PATH, ENV['PATH'] =
|
206
214
|
ENV['PATH'], [ENV['PATH'], '~/bin'].join(File::PATH_SEPARATOR)
|
207
215
|
|
@@ -213,7 +221,7 @@ gem 'other', version
|
|
213
221
|
|
214
222
|
assert_empty @ui.error
|
215
223
|
ensure
|
216
|
-
ENV['PATH'] = orig_PATH
|
224
|
+
ENV['PATH'] = orig_PATH unless win_platform?
|
217
225
|
end
|
218
226
|
|
219
227
|
def test_check_that_user_bin_dir_is_in_path_not_in_path
|
@@ -221,7 +229,13 @@ gem 'other', version
|
|
221
229
|
@installer.check_that_user_bin_dir_is_in_path
|
222
230
|
end
|
223
231
|
|
224
|
-
|
232
|
+
expected = @installer.bin_dir
|
233
|
+
|
234
|
+
if Gem.win_platform? then
|
235
|
+
expected = expected.downcase.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
|
236
|
+
end
|
237
|
+
|
238
|
+
assert_match expected, @ui.error
|
225
239
|
end
|
226
240
|
|
227
241
|
def test_ensure_dependency
|
@@ -1112,6 +1126,16 @@ gem 'other', version
|
|
1112
1126
|
refute @installer.installation_satisfies_dependency?(dep)
|
1113
1127
|
end
|
1114
1128
|
|
1129
|
+
def test_installation_satisfies_dependency_eh_development
|
1130
|
+
@installer.options[:development] = true
|
1131
|
+
@installer.options[:dev_shallow] = true
|
1132
|
+
|
1133
|
+
util_spec 'a'
|
1134
|
+
|
1135
|
+
dep = Gem::Dependency.new 'a', :development
|
1136
|
+
assert @installer.installation_satisfies_dependency?(dep)
|
1137
|
+
end
|
1138
|
+
|
1115
1139
|
def test_pre_install_checks_dependencies
|
1116
1140
|
@spec.add_dependency 'b', '> 5'
|
1117
1141
|
util_setup_gem
|
@@ -837,6 +837,8 @@ gems:
|
|
837
837
|
rescue Exception => ex
|
838
838
|
abort ex.message
|
839
839
|
puts "ERROR during server thread: #{ex.message}"
|
840
|
+
ensure
|
841
|
+
server.shutdown
|
840
842
|
end
|
841
843
|
end
|
842
844
|
while server.status != :Running
|
@@ -888,6 +890,8 @@ gems:
|
|
888
890
|
s.start
|
889
891
|
rescue Exception => ex
|
890
892
|
abort "ERROR during server thread: #{ex.message}"
|
893
|
+
ensure
|
894
|
+
s.shutdown
|
891
895
|
end
|
892
896
|
end
|
893
897
|
th[:server] = s
|
@@ -35,6 +35,43 @@ class TestGemRequestConnectionPool < Gem::TestCase
|
|
35
35
|
assert_equal conn, pool.checkout
|
36
36
|
end
|
37
37
|
|
38
|
+
def test_to_proxy_eh
|
39
|
+
pools = Gem::Request::ConnectionPools.new nil, []
|
40
|
+
|
41
|
+
env_no_proxy = %w[
|
42
|
+
1.no-proxy.example
|
43
|
+
2.no-proxy.example
|
44
|
+
]
|
45
|
+
|
46
|
+
no_proxy = pools.send :no_proxy?, '2.no-proxy.example', env_no_proxy
|
47
|
+
|
48
|
+
assert no_proxy, 'match'
|
49
|
+
|
50
|
+
no_proxy = pools.send :no_proxy?, 'proxy.example', env_no_proxy
|
51
|
+
|
52
|
+
refute no_proxy, 'mismatch'
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_to_proxy_eh_wildcard
|
56
|
+
pools = Gem::Request::ConnectionPools.new nil, []
|
57
|
+
|
58
|
+
env_no_proxy = %w[
|
59
|
+
.no-proxy.example
|
60
|
+
]
|
61
|
+
|
62
|
+
no_proxy = pools.send :no_proxy?, '2.no-proxy.example', env_no_proxy
|
63
|
+
|
64
|
+
assert no_proxy, 'wildcard matching subdomain'
|
65
|
+
|
66
|
+
no_proxy = pools.send :no_proxy?, 'no-proxy.example', env_no_proxy
|
67
|
+
|
68
|
+
assert no_proxy, 'wildcard matching dotless domain'
|
69
|
+
|
70
|
+
no_proxy = pools.send :no_proxy?, 'proxy.example', env_no_proxy
|
71
|
+
|
72
|
+
refute no_proxy, 'wildcard mismatch'
|
73
|
+
end
|
74
|
+
|
38
75
|
def test_net_http_args
|
39
76
|
pools = Gem::Request::ConnectionPools.new nil, []
|
40
77
|
|
@@ -229,7 +229,7 @@ ruby "0"
|
|
229
229
|
def test_load_gemdeps_installing
|
230
230
|
rs = Gem::RequestSet.new
|
231
231
|
|
232
|
-
Tempfile.open 'gem.deps.rb' do |io|
|
232
|
+
tf = Tempfile.open 'gem.deps.rb' do |io|
|
233
233
|
io.puts 'ruby "0"'
|
234
234
|
io.puts 'gem "a"'
|
235
235
|
io.flush
|
@@ -237,7 +237,9 @@ ruby "0"
|
|
237
237
|
gem_deps = rs.load_gemdeps io.path, [], true
|
238
238
|
|
239
239
|
assert_kind_of Gem::RequestSet::GemDependencyAPI, gem_deps
|
240
|
+
io
|
240
241
|
end
|
242
|
+
tf.close! if tf.respond_to? :close!
|
241
243
|
|
242
244
|
assert_equal [dep('a')], rs.dependencies
|
243
245
|
end
|
@@ -276,6 +278,23 @@ ruby "0"
|
|
276
278
|
refute_same orig_errors, rs.errors
|
277
279
|
end
|
278
280
|
|
281
|
+
def test_bug_bug_990
|
282
|
+
a = util_spec 'a', '1.b', 'b' => '~> 1.a'
|
283
|
+
b = util_spec 'b', '1.b', 'c' => '>= 1'
|
284
|
+
c = util_spec 'c', '1.1.b'
|
285
|
+
|
286
|
+
rs = Gem::RequestSet.new
|
287
|
+
rs.gem 'a'
|
288
|
+
rs.prerelease = true
|
289
|
+
|
290
|
+
res = rs.resolve StaticSet.new([a, b, c])
|
291
|
+
assert_equal 3, res.size
|
292
|
+
|
293
|
+
names = res.map { |s| s.full_name }.sort
|
294
|
+
|
295
|
+
assert_equal %w[a-1.b b-1.b c-1.1.b], names
|
296
|
+
end
|
297
|
+
|
279
298
|
def test_resolve_development
|
280
299
|
a = util_spec 'a', 1
|
281
300
|
spec = Gem::Resolver::SpecSpecification.new nil, a
|
@@ -74,6 +74,18 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
74
74
|
assert_equal expected, @gda.dependencies
|
75
75
|
end
|
76
76
|
|
77
|
+
def test_gem_duplicate
|
78
|
+
@gda.gem 'a'
|
79
|
+
|
80
|
+
_, err = capture_io do
|
81
|
+
@gda.gem 'a'
|
82
|
+
end
|
83
|
+
|
84
|
+
expected = "Gem dependencies file gem.deps.rb requires a more than once."
|
85
|
+
|
86
|
+
assert_match expected, err
|
87
|
+
end
|
88
|
+
|
77
89
|
def test_gem_git
|
78
90
|
@gda.gem 'a', :git => 'git/a'
|
79
91
|
|
@@ -86,6 +98,32 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
86
98
|
assert_equal expected, @gda.dependencies
|
87
99
|
end
|
88
100
|
|
101
|
+
def test_gem_bitbucket
|
102
|
+
@gda.gem 'a', :bitbucket => 'example/repository'
|
103
|
+
|
104
|
+
assert_equal [dep('a')], @set.dependencies
|
105
|
+
|
106
|
+
assert_equal %w[https://example@bitbucket.org/example/repository.git master],
|
107
|
+
@git_set.repositories['a']
|
108
|
+
|
109
|
+
expected = { 'a' => '!' }
|
110
|
+
|
111
|
+
assert_equal expected, @gda.dependencies
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_gem_bitbucket_expand_path
|
115
|
+
@gda.gem 'a', :bitbucket => 'example'
|
116
|
+
|
117
|
+
assert_equal [dep('a')], @set.dependencies
|
118
|
+
|
119
|
+
assert_equal %w[https://example@bitbucket.org/example/example.git master],
|
120
|
+
@git_set.repositories['a']
|
121
|
+
|
122
|
+
expected = { 'a' => '!' }
|
123
|
+
|
124
|
+
assert_equal expected, @gda.dependencies
|
125
|
+
end
|
126
|
+
|
89
127
|
def test_gem_git_branch
|
90
128
|
@gda.gem 'a', :git => 'git/a', :branch => 'other', :tag => 'v1'
|
91
129
|
|
@@ -141,6 +179,19 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
141
179
|
assert_equal expected, @gda.dependencies
|
142
180
|
end
|
143
181
|
|
182
|
+
def test_gem_github_expand_path
|
183
|
+
@gda.gem 'a', :github => 'example'
|
184
|
+
|
185
|
+
assert_equal [dep('a')], @set.dependencies
|
186
|
+
|
187
|
+
assert_equal %w[git://github.com/example/example.git master],
|
188
|
+
@git_set.repositories['a']
|
189
|
+
|
190
|
+
expected = { 'a' => '!' }
|
191
|
+
|
192
|
+
assert_equal expected, @gda.dependencies
|
193
|
+
end
|
194
|
+
|
144
195
|
def test_gem_group
|
145
196
|
@gda.gem 'a', :group => :test
|
146
197
|
|
@@ -274,6 +325,18 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
274
325
|
Gem.win_platform = win_platform
|
275
326
|
end
|
276
327
|
|
328
|
+
def test_gem_platforms_platform
|
329
|
+
win_platform, Gem.win_platform = Gem.win_platform?, false
|
330
|
+
|
331
|
+
with_engine_version 'ruby', '2.0.0' do
|
332
|
+
@gda.gem 'a', :platforms => :jruby, :platform => :ruby
|
333
|
+
|
334
|
+
refute_empty @set.dependencies
|
335
|
+
end
|
336
|
+
ensure
|
337
|
+
Gem.win_platform = win_platform
|
338
|
+
end
|
339
|
+
|
277
340
|
def test_gem_platforms_version
|
278
341
|
with_engine_version 'ruby', '2.0.0' do
|
279
342
|
@gda.gem 'a', :platforms => :ruby_18
|
@@ -397,9 +460,18 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
397
460
|
|
398
461
|
@gda.gemspec
|
399
462
|
|
400
|
-
assert_equal [dep('b', '= 2'), dep('c', '=3')],
|
463
|
+
assert_equal [dep('a', '= 1'), dep('b', '= 2'), dep('c', '=3')],
|
464
|
+
@set.dependencies
|
401
465
|
|
402
466
|
assert_equal %w[a], @gda.requires['a']
|
467
|
+
|
468
|
+
expected = {
|
469
|
+
'a' => '!',
|
470
|
+
'b' => req('= 2'),
|
471
|
+
'c' => req('= 3'),
|
472
|
+
}
|
473
|
+
|
474
|
+
assert_equal expected, @gda.dependencies
|
403
475
|
end
|
404
476
|
|
405
477
|
def test_gemspec_bad
|
@@ -426,7 +498,7 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
426
498
|
|
427
499
|
@gda.gemspec :development_group => :other
|
428
500
|
|
429
|
-
assert_equal [dep('b', '= 2')], @set.dependencies
|
501
|
+
assert_equal [dep('a', '= 1'), dep('b', '= 2')], @set.dependencies
|
430
502
|
|
431
503
|
assert_equal %w[a], @gda.requires['a']
|
432
504
|
end
|
@@ -462,7 +534,7 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
462
534
|
|
463
535
|
@gda.gemspec :name => 'b'
|
464
536
|
|
465
|
-
assert_equal [dep('c', '= 3')], @set.dependencies
|
537
|
+
assert_equal [dep('b', '= 2'), dep('c', '= 3')], @set.dependencies
|
466
538
|
end
|
467
539
|
|
468
540
|
def test_gemspec_named
|
@@ -474,7 +546,7 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
474
546
|
|
475
547
|
@gda.gemspec
|
476
548
|
|
477
|
-
assert_equal [dep('b', '= 2')], @set.dependencies
|
549
|
+
assert_equal [dep('a', '= 1'), dep('b', '= 2')], @set.dependencies
|
478
550
|
end
|
479
551
|
|
480
552
|
def test_gemspec_none
|
@@ -496,7 +568,7 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
496
568
|
|
497
569
|
@gda.gemspec :path => 'other'
|
498
570
|
|
499
|
-
assert_equal [dep('b', '= 2')], @set.dependencies
|
571
|
+
assert_equal [dep('a', '= 1'), dep('b', '= 2')], @set.dependencies
|
500
572
|
end
|
501
573
|
|
502
574
|
def test_git
|
@@ -511,6 +583,16 @@ class TestGemRequestSetGemDependencyAPI < Gem::TestCase
|
|
511
583
|
assert_equal %w[git://example/repo.git master], @git_set.repositories['b']
|
512
584
|
end
|
513
585
|
|
586
|
+
def test_git_source
|
587
|
+
@gda.git_source :example do |repo_name|
|
588
|
+
"git://example/#{repo_name}.git"
|
589
|
+
end
|
590
|
+
|
591
|
+
@gda.gem 'a', :example => 'repo'
|
592
|
+
|
593
|
+
assert_equal %w[git://example/repo.git master], @git_set.repositories['a']
|
594
|
+
end
|
595
|
+
|
514
596
|
def test_group
|
515
597
|
@gda.group :test do
|
516
598
|
@gda.gem 'a'
|
@@ -586,17 +668,21 @@ end
|
|
586
668
|
def test_platform_multiple
|
587
669
|
win_platform, Gem.win_platform = Gem.win_platform?, false
|
588
670
|
|
671
|
+
gda = @GDA.new @set, nil
|
672
|
+
|
589
673
|
with_engine_version 'ruby', '1.8.7' do
|
590
|
-
|
591
|
-
|
674
|
+
gda.platform :mri_19, :mri_20 do
|
675
|
+
gda.gem 'a'
|
592
676
|
end
|
593
677
|
end
|
594
678
|
|
595
679
|
assert_empty @set.dependencies
|
596
680
|
|
681
|
+
gda = @GDA.new @set, nil
|
682
|
+
|
597
683
|
with_engine_version 'ruby', '2.0.0' do
|
598
|
-
|
599
|
-
|
684
|
+
gda.platform :mri_19, :mri_20 do
|
685
|
+
gda.gem 'a'
|
600
686
|
end
|
601
687
|
end
|
602
688
|
|
@@ -361,6 +361,8 @@ DEPENDENCIES
|
|
361
361
|
end
|
362
362
|
|
363
363
|
def test_parse_GIT
|
364
|
+
@set.instance_variable_set :@install_dir, 'install_dir'
|
365
|
+
|
364
366
|
write_lockfile <<-LOCKFILE
|
365
367
|
GIT
|
366
368
|
remote: git://example/a.git
|
@@ -400,6 +402,7 @@ DEPENDENCIES
|
|
400
402
|
}
|
401
403
|
|
402
404
|
assert_equal expected, git_set.repositories
|
405
|
+
assert_equal 'install_dir', git_set.root_dir
|
403
406
|
end
|
404
407
|
|
405
408
|
def test_parse_GIT_branch
|
@@ -521,6 +524,7 @@ PATH
|
|
521
524
|
remote: #{directory}
|
522
525
|
specs:
|
523
526
|
a (1)
|
527
|
+
b (2)
|
524
528
|
|
525
529
|
DEPENDENCIES
|
526
530
|
a!
|
@@ -543,6 +547,28 @@ DEPENDENCIES
|
|
543
547
|
assert vendor_set, 'could not find a VendorSet'
|
544
548
|
|
545
549
|
assert_equal %w[a-1], vendor_set.specs.values.map { |s| s.full_name }
|
550
|
+
|
551
|
+
spec = vendor_set.load_spec 'a', nil, nil, nil
|
552
|
+
|
553
|
+
assert_equal [dep('b', '= 2')], spec.dependencies
|
554
|
+
end
|
555
|
+
|
556
|
+
def test_parse_dependency
|
557
|
+
write_lockfile ' 1)'
|
558
|
+
|
559
|
+
@lockfile.tokenize
|
560
|
+
|
561
|
+
parsed = @lockfile.parse_dependency 'a', '='
|
562
|
+
|
563
|
+
assert_equal dep('a', '= 1'), parsed
|
564
|
+
|
565
|
+
write_lockfile ')'
|
566
|
+
|
567
|
+
@lockfile.tokenize
|
568
|
+
|
569
|
+
parsed = @lockfile.parse_dependency 'a', '2'
|
570
|
+
|
571
|
+
assert_equal dep('a', '= 2'), parsed
|
546
572
|
end
|
547
573
|
|
548
574
|
def test_parse_gem_specs_dependency
|
@@ -617,6 +643,16 @@ DEPENDENCIES
|
|
617
643
|
assert_equal [:EOF], @lockfile.peek
|
618
644
|
end
|
619
645
|
|
646
|
+
def test_relative_path_from
|
647
|
+
path = @lockfile.relative_path_from '/foo', '/foo/bar'
|
648
|
+
|
649
|
+
assert_equal '/foo', path
|
650
|
+
|
651
|
+
path = @lockfile.relative_path_from '/foo', '/foo'
|
652
|
+
|
653
|
+
assert_equal '.', path
|
654
|
+
end
|
655
|
+
|
620
656
|
def test_skip
|
621
657
|
tokens = [[:token]]
|
622
658
|
|
@@ -1190,5 +1226,23 @@ DEPENDENCIES
|
|
1190
1226
|
refute_empty File.read gem_deps_lock_file
|
1191
1227
|
end
|
1192
1228
|
|
1229
|
+
def test_write_error
|
1230
|
+
@set.gem 'nonexistent'
|
1231
|
+
|
1232
|
+
gem_deps_lock_file = "#{@gem_deps_file}.lock"
|
1233
|
+
|
1234
|
+
open gem_deps_lock_file, 'w' do |io|
|
1235
|
+
io.write 'hello'
|
1236
|
+
end
|
1237
|
+
|
1238
|
+
assert_raises Gem::UnsatisfiableDependencyError do
|
1239
|
+
@lockfile.write
|
1240
|
+
end
|
1241
|
+
|
1242
|
+
assert_path_exists gem_deps_lock_file
|
1243
|
+
|
1244
|
+
assert_equal 'hello', File.read(gem_deps_lock_file)
|
1245
|
+
end
|
1246
|
+
|
1193
1247
|
end
|
1194
1248
|
|