rubygems-update 2.4.5 → 2.4.6

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.

Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +27 -0
  3. data/Manifest.txt +4 -0
  4. data/lib/rubygems.rb +2 -2
  5. data/lib/rubygems/basic_specification.rb +2 -3
  6. data/lib/rubygems/commands/help_command.rb +2 -2
  7. data/lib/rubygems/commands/open_command.rb +3 -1
  8. data/lib/rubygems/commands/yank_command.rb +1 -1
  9. data/lib/rubygems/compatibility.rb +1 -2
  10. data/lib/rubygems/dependency_installer.rb +11 -1
  11. data/lib/rubygems/installer.rb +1 -1
  12. data/lib/rubygems/package.rb +2 -1
  13. data/lib/rubygems/package/tar_writer.rb +4 -4
  14. data/lib/rubygems/path_support.rb +0 -7
  15. data/lib/rubygems/psych_additions.rb +1 -1
  16. data/lib/rubygems/remote_fetcher.rb +1 -1
  17. data/lib/rubygems/request_set.rb +10 -4
  18. data/lib/rubygems/request_set/gem_dependency_api.rb +4 -4
  19. data/lib/rubygems/request_set/lockfile.rb +52 -464
  20. data/lib/rubygems/request_set/lockfile/parser.rb +334 -0
  21. data/lib/rubygems/request_set/lockfile/tokenizer.rb +108 -0
  22. data/lib/rubygems/requirement.rb +12 -1
  23. data/lib/rubygems/security/signer.rb +1 -1
  24. data/lib/rubygems/specification.rb +12 -12
  25. data/lib/rubygems/test_case.rb +18 -1
  26. data/lib/rubygems/user_interaction.rb +0 -8
  27. data/test/rubygems/test_gem.rb +2 -5
  28. data/test/rubygems/test_gem_commands_open_command.rb +9 -3
  29. data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
  30. data/test/rubygems/test_gem_commands_unpack_command.rb +2 -2
  31. data/test/rubygems/test_gem_dependency_installer.rb +27 -1
  32. data/test/rubygems/test_gem_ext_cmake_builder.rb +1 -1
  33. data/test/rubygems/test_gem_installer.rb +1 -1
  34. data/test/rubygems/test_gem_package.rb +1 -1
  35. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +30 -11
  36. data/test/rubygems/test_gem_request_set_lockfile.rb +19 -824
  37. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +543 -0
  38. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +305 -0
  39. data/test/rubygems/test_gem_requirement.rb +10 -0
  40. data/test/rubygems/test_gem_specification.rb +7 -1
  41. data/test/rubygems/test_gem_stub_specification.rb +1 -1
  42. data/test/rubygems/test_gem_uninstaller.rb +2 -2
  43. metadata +8 -2
@@ -0,0 +1,543 @@
1
+ require 'rubygems/test_case'
2
+ require 'rubygems/request_set'
3
+ require 'rubygems/request_set/lockfile'
4
+ require 'rubygems/request_set/lockfile/tokenizer'
5
+ require 'rubygems/request_set/lockfile/parser'
6
+
7
+ class TestGemRequestSetLockfileParser < Gem::TestCase
8
+ def setup
9
+ super
10
+ @gem_deps_file = 'gem.deps.rb'
11
+ @lock_file = File.expand_path "#{@gem_deps_file}.lock"
12
+ @set = Gem::RequestSet.new
13
+ end
14
+
15
+ def test_get
16
+ tokenizer = Gem::RequestSet::Lockfile::Tokenizer.new "\n"
17
+ parser = tokenizer.make_parser nil, nil
18
+
19
+ assert_equal :newline, parser.get.first
20
+ end
21
+
22
+ def test_get_type_mismatch
23
+ filename = File.expand_path("#{@gem_deps_file}.lock")
24
+ tokenizer = Gem::RequestSet::Lockfile::Tokenizer.new "foo", filename, 1, 0
25
+ parser = tokenizer.make_parser nil, nil
26
+
27
+ e = assert_raises Gem::RequestSet::Lockfile::ParseError do
28
+ parser.get :section
29
+ end
30
+
31
+ expected =
32
+ 'unexpected token [:text, "foo"], expected :section (at line 1 column 0)'
33
+
34
+ assert_equal expected, e.message
35
+
36
+ assert_equal 1, e.line
37
+ assert_equal 0, e.column
38
+ assert_equal filename, e.path
39
+ end
40
+
41
+ def test_get_type_multiple
42
+ filename = File.expand_path("#{@gem_deps_file}.lock")
43
+ tokenizer = Gem::RequestSet::Lockfile::Tokenizer.new "x", filename, 1
44
+ parser = tokenizer.make_parser nil, nil
45
+
46
+ assert parser.get [:text, :section]
47
+ end
48
+
49
+ def test_get_type_value_mismatch
50
+ filename = File.expand_path("#{@gem_deps_file}.lock")
51
+ tokenizer = Gem::RequestSet::Lockfile::Tokenizer.new "x", filename, 1
52
+ parser = tokenizer.make_parser nil, nil
53
+
54
+ e = assert_raises Gem::RequestSet::Lockfile::ParseError do
55
+ parser.get :text, 'y'
56
+ end
57
+
58
+ expected =
59
+ 'unexpected token [:text, "x"], expected [:text, "y"] (at line 1 column 0)'
60
+
61
+ assert_equal expected, e.message
62
+
63
+ assert_equal 1, e.line
64
+ assert_equal 0, e.column
65
+ assert_equal File.expand_path("#{@gem_deps_file}.lock"), e.path
66
+ end
67
+
68
+
69
+ def test_parse
70
+ write_lockfile <<-LOCKFILE.strip
71
+ GEM
72
+ remote: #{@gem_repo}
73
+ specs:
74
+ a (2)
75
+
76
+ PLATFORMS
77
+ #{Gem::Platform::RUBY}
78
+
79
+ DEPENDENCIES
80
+ a
81
+ LOCKFILE
82
+
83
+ platforms = []
84
+ parse_lockfile @set, platforms
85
+
86
+ assert_equal [dep('a')], @set.dependencies
87
+
88
+ assert_equal [Gem::Platform::RUBY], platforms
89
+
90
+ lockfile_set = @set.sets.find do |set|
91
+ Gem::Resolver::LockSet === set
92
+ end
93
+
94
+ assert lockfile_set, 'could not find a LockSet'
95
+
96
+ assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name }
97
+ end
98
+
99
+ def test_parse_dependencies
100
+ write_lockfile <<-LOCKFILE
101
+ GEM
102
+ remote: #{@gem_repo}
103
+ specs:
104
+ a (2)
105
+
106
+ PLATFORMS
107
+ #{Gem::Platform::RUBY}
108
+
109
+ DEPENDENCIES
110
+ a (>= 1, <= 2)
111
+ LOCKFILE
112
+
113
+ platforms = []
114
+ parse_lockfile @set, platforms
115
+
116
+ assert_equal [dep('a', '>= 1', '<= 2')], @set.dependencies
117
+
118
+ assert_equal [Gem::Platform::RUBY], platforms
119
+
120
+ lockfile_set = @set.sets.find do |set|
121
+ Gem::Resolver::LockSet === set
122
+ end
123
+
124
+ assert lockfile_set, 'could not find a LockSet'
125
+
126
+ assert_equal %w[a-2], lockfile_set.specs.map { |tuple| tuple.full_name }
127
+ end
128
+
129
+ def test_parse_DEPENDENCIES_git
130
+ write_lockfile <<-LOCKFILE
131
+ GIT
132
+ remote: git://git.example/josevalim/rails-footnotes.git
133
+ revision: 3a6ac1971e91d822f057650cc5916ebfcbd6ee37
134
+ specs:
135
+ rails-footnotes (3.7.9)
136
+ rails (>= 3.0.0)
137
+
138
+ GIT
139
+ remote: git://git.example/svenfuchs/i18n-active_record.git
140
+ revision: 55507cf59f8f2173d38e07e18df0e90d25b1f0f6
141
+ specs:
142
+ i18n-active_record (0.0.2)
143
+ i18n (>= 0.5.0)
144
+
145
+ GEM
146
+ remote: http://gems.example/
147
+ specs:
148
+ i18n (0.6.9)
149
+ rails (4.0.0)
150
+
151
+ PLATFORMS
152
+ ruby
153
+
154
+ DEPENDENCIES
155
+ i18n-active_record!
156
+ rails-footnotes!
157
+ LOCKFILE
158
+
159
+ parse_lockfile @set, []
160
+
161
+ expected = [
162
+ dep('i18n-active_record', '= 0.0.2'),
163
+ dep('rails-footnotes', '= 3.7.9'),
164
+ ]
165
+
166
+ assert_equal expected, @set.dependencies
167
+ end
168
+
169
+ def test_parse_DEPENDENCIES_git_version
170
+ write_lockfile <<-LOCKFILE
171
+ GIT
172
+ remote: git://github.com/progrium/ruby-jwt.git
173
+ revision: 8d74770c6cd92ea234b428b5d0c1f18306a4f41c
174
+ specs:
175
+ jwt (1.1)
176
+
177
+ GEM
178
+ remote: http://gems.example/
179
+ specs:
180
+
181
+ PLATFORMS
182
+ ruby
183
+
184
+ DEPENDENCIES
185
+ jwt (= 1.1)!
186
+ LOCKFILE
187
+
188
+ parse_lockfile @set, []
189
+
190
+ expected = [
191
+ dep('jwt', '= 1.1'),
192
+ ]
193
+
194
+ assert_equal expected, @set.dependencies
195
+ end
196
+
197
+ def test_parse_GEM
198
+ write_lockfile <<-LOCKFILE
199
+ GEM
200
+ specs:
201
+ a (2)
202
+
203
+ PLATFORMS
204
+ ruby
205
+
206
+ DEPENDENCIES
207
+ a
208
+ LOCKFILE
209
+
210
+ parse_lockfile @set, []
211
+
212
+ assert_equal [dep('a', '>= 0')], @set.dependencies
213
+
214
+ lockfile_set = @set.sets.find do |set|
215
+ Gem::Resolver::LockSet === set
216
+ end
217
+
218
+ assert lockfile_set, 'found a LockSet'
219
+
220
+ assert_equal %w[a-2], lockfile_set.specs.map { |s| s.full_name }
221
+ end
222
+
223
+ def test_parse_GEM_remote_multiple
224
+ write_lockfile <<-LOCKFILE
225
+ GEM
226
+ remote: https://gems.example/
227
+ remote: https://other.example/
228
+ specs:
229
+ a (2)
230
+
231
+ PLATFORMS
232
+ ruby
233
+
234
+ DEPENDENCIES
235
+ a
236
+ LOCKFILE
237
+
238
+ parse_lockfile @set, []
239
+
240
+ assert_equal [dep('a', '>= 0')], @set.dependencies
241
+
242
+ lockfile_set = @set.sets.find do |set|
243
+ Gem::Resolver::LockSet === set
244
+ end
245
+
246
+ assert lockfile_set, 'found a LockSet'
247
+
248
+ assert_equal %w[a-2 a-2], lockfile_set.specs.map { |s| s.full_name }
249
+
250
+ assert_equal %w[https://gems.example/ https://other.example/],
251
+ lockfile_set.specs.map { |s| s.source.uri.to_s }
252
+ end
253
+
254
+ def test_parse_GIT
255
+ @set.instance_variable_set :@install_dir, 'install_dir'
256
+
257
+ write_lockfile <<-LOCKFILE
258
+ GIT
259
+ remote: git://example/a.git
260
+ revision: master
261
+ specs:
262
+ a (2)
263
+ b (>= 3)
264
+ c
265
+
266
+ DEPENDENCIES
267
+ a!
268
+ LOCKFILE
269
+
270
+ parse_lockfile @set, []
271
+
272
+ assert_equal [dep('a', '= 2')], @set.dependencies
273
+
274
+ lockfile_set = @set.sets.find do |set|
275
+ Gem::Resolver::LockSet === set
276
+ end
277
+
278
+ refute lockfile_set, 'fount a LockSet'
279
+
280
+ git_set = @set.sets.find do |set|
281
+ Gem::Resolver::GitSet === set
282
+ end
283
+
284
+ assert git_set, 'could not find a GitSet'
285
+
286
+ assert_equal %w[a-2], git_set.specs.values.map { |s| s.full_name }
287
+
288
+ assert_equal [dep('b', '>= 3'), dep('c')],
289
+ git_set.specs.values.first.dependencies
290
+
291
+ expected = {
292
+ 'a' => %w[git://example/a.git master],
293
+ }
294
+
295
+ assert_equal expected, git_set.repositories
296
+ assert_equal 'install_dir', git_set.root_dir
297
+ end
298
+
299
+ def test_parse_GIT_branch
300
+ write_lockfile <<-LOCKFILE
301
+ GIT
302
+ remote: git://example/a.git
303
+ revision: 1234abc
304
+ branch: 0-9-12-stable
305
+ specs:
306
+ a (2)
307
+ b (>= 3)
308
+
309
+ DEPENDENCIES
310
+ a!
311
+ LOCKFILE
312
+
313
+ parse_lockfile @set, []
314
+
315
+ assert_equal [dep('a', '= 2')], @set.dependencies
316
+
317
+ lockfile_set = @set.sets.find do |set|
318
+ Gem::Resolver::LockSet === set
319
+ end
320
+
321
+ refute lockfile_set, 'fount a LockSet'
322
+
323
+ git_set = @set.sets.find do |set|
324
+ Gem::Resolver::GitSet === set
325
+ end
326
+
327
+ assert git_set, 'could not find a GitSet'
328
+
329
+ expected = {
330
+ 'a' => %w[git://example/a.git 1234abc],
331
+ }
332
+
333
+ assert_equal expected, git_set.repositories
334
+ end
335
+
336
+ def test_parse_GIT_ref
337
+ write_lockfile <<-LOCKFILE
338
+ GIT
339
+ remote: git://example/a.git
340
+ revision: 1234abc
341
+ ref: 1234abc
342
+ specs:
343
+ a (2)
344
+ b (>= 3)
345
+
346
+ DEPENDENCIES
347
+ a!
348
+ LOCKFILE
349
+
350
+ parse_lockfile @set, []
351
+
352
+ assert_equal [dep('a', '= 2')], @set.dependencies
353
+
354
+ lockfile_set = @set.sets.find do |set|
355
+ Gem::Resolver::LockSet === set
356
+ end
357
+
358
+ refute lockfile_set, 'fount a LockSet'
359
+
360
+ git_set = @set.sets.find do |set|
361
+ Gem::Resolver::GitSet === set
362
+ end
363
+
364
+ assert git_set, 'could not find a GitSet'
365
+
366
+ expected = {
367
+ 'a' => %w[git://example/a.git 1234abc],
368
+ }
369
+
370
+ assert_equal expected, git_set.repositories
371
+ end
372
+
373
+ def test_parse_GIT_tag
374
+ write_lockfile <<-LOCKFILE
375
+ GIT
376
+ remote: git://example/a.git
377
+ revision: 1234abc
378
+ tag: v0.9.12
379
+ specs:
380
+ a (2)
381
+ b (>= 3)
382
+
383
+ DEPENDENCIES
384
+ a!
385
+ LOCKFILE
386
+
387
+ parse_lockfile @set, []
388
+
389
+ assert_equal [dep('a', '= 2')], @set.dependencies
390
+
391
+ lockfile_set = @set.sets.find do |set|
392
+ Gem::Resolver::LockSet === set
393
+ end
394
+
395
+ refute lockfile_set, 'fount a LockSet'
396
+
397
+ git_set = @set.sets.find do |set|
398
+ Gem::Resolver::GitSet === set
399
+ end
400
+
401
+ assert git_set, 'could not find a GitSet'
402
+
403
+ expected = {
404
+ 'a' => %w[git://example/a.git 1234abc],
405
+ }
406
+
407
+ assert_equal expected, git_set.repositories
408
+ end
409
+
410
+ def test_parse_PATH
411
+ _, _, directory = vendor_gem
412
+
413
+ write_lockfile <<-LOCKFILE
414
+ PATH
415
+ remote: #{directory}
416
+ specs:
417
+ a (1)
418
+ b (2)
419
+
420
+ DEPENDENCIES
421
+ a!
422
+ LOCKFILE
423
+
424
+ parse_lockfile @set, []
425
+
426
+ assert_equal [dep('a', '= 1')], @set.dependencies
427
+
428
+ lockfile_set = @set.sets.find do |set|
429
+ Gem::Resolver::LockSet === set
430
+ end
431
+
432
+ refute lockfile_set, 'found a LockSet'
433
+
434
+ vendor_set = @set.sets.find do |set|
435
+ Gem::Resolver::VendorSet === set
436
+ end
437
+
438
+ assert vendor_set, 'could not find a VendorSet'
439
+
440
+ assert_equal %w[a-1], vendor_set.specs.values.map { |s| s.full_name }
441
+
442
+ spec = vendor_set.load_spec 'a', nil, nil, nil
443
+
444
+ assert_equal [dep('b', '= 2')], spec.dependencies
445
+ end
446
+
447
+ def test_parse_dependency
448
+ write_lockfile ' 1)'
449
+
450
+ tokenizer = Gem::RequestSet::Lockfile::Tokenizer.from_file @lock_file
451
+ parser = tokenizer.make_parser nil, nil
452
+
453
+ parsed = parser.parse_dependency 'a', '='
454
+
455
+ assert_equal dep('a', '= 1'), parsed
456
+
457
+ write_lockfile ')'
458
+
459
+ tokenizer = Gem::RequestSet::Lockfile::Tokenizer.from_file @lock_file
460
+ parser = tokenizer.make_parser nil, nil
461
+
462
+ parsed = parser.parse_dependency 'a', '2'
463
+
464
+ assert_equal dep('a', '= 2'), parsed
465
+ end
466
+
467
+ def test_parse_gem_specs_dependency
468
+ write_lockfile <<-LOCKFILE
469
+ GEM
470
+ remote: #{@gem_repo}
471
+ specs:
472
+ a (2)
473
+ b (= 3)
474
+ c (~> 4)
475
+ d
476
+ e (~> 5.0, >= 5.0.1)
477
+ b (3-x86_64-linux)
478
+
479
+ PLATFORMS
480
+ #{Gem::Platform::RUBY}
481
+
482
+ DEPENDENCIES
483
+ a
484
+ LOCKFILE
485
+
486
+ platforms = []
487
+ parse_lockfile @set, platforms
488
+
489
+ assert_equal [dep('a')], @set.dependencies
490
+
491
+ assert_equal [Gem::Platform::RUBY], platforms
492
+
493
+ lockfile_set = @set.sets.find do |set|
494
+ Gem::Resolver::LockSet === set
495
+ end
496
+
497
+ assert lockfile_set, 'could not find a LockSet'
498
+
499
+ assert_equal %w[a-2 b-3], lockfile_set.specs.map { |tuple| tuple.full_name }
500
+
501
+ expected = [
502
+ Gem::Platform::RUBY,
503
+ Gem::Platform.new('x86_64-linux'),
504
+ ]
505
+
506
+ assert_equal expected, lockfile_set.specs.map { |tuple| tuple.platform }
507
+
508
+ spec = lockfile_set.specs.first
509
+
510
+ expected = [
511
+ dep('b', '= 3'),
512
+ dep('c', '~> 4'),
513
+ dep('d'),
514
+ dep('e', '~> 5.0', '>= 5.0.1'),
515
+ ]
516
+
517
+ assert_equal expected, spec.dependencies
518
+ end
519
+
520
+ def test_parse_missing
521
+ assert_raises(Errno::ENOENT) do
522
+ parse_lockfile @set, []
523
+ end
524
+
525
+ lockfile_set = @set.sets.find do |set|
526
+ Gem::Resolver::LockSet === set
527
+ end
528
+
529
+ refute lockfile_set
530
+ end
531
+
532
+ def write_lockfile lockfile
533
+ open @lock_file, 'w' do |io|
534
+ io.write lockfile
535
+ end
536
+ end
537
+
538
+ def parse_lockfile set, platforms
539
+ tokenizer = Gem::RequestSet::Lockfile::Tokenizer.from_file @lock_file
540
+ parser = tokenizer.make_parser set, platforms
541
+ parser.parse
542
+ end
543
+ end