rubygems-update 2.4.8 → 2.5.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CODE_OF_CONDUCT.md +40 -0
- data/CVE-2015-3900.txt +40 -0
- data/History.txt +173 -2
- data/Manifest.txt +14 -1
- data/Rakefile +36 -1
- data/lib/rubygems.rb +32 -14
- data/lib/rubygems/basic_specification.rb +31 -9
- data/lib/rubygems/commands/dependency_command.rb +25 -15
- data/lib/rubygems/commands/environment_command.rb +2 -0
- data/lib/rubygems/commands/help_command.rb +0 -10
- data/lib/rubygems/commands/install_command.rb +1 -1
- data/lib/rubygems/commands/list_command.rb +1 -1
- data/lib/rubygems/commands/pristine_command.rb +11 -1
- data/lib/rubygems/commands/query_command.rb +1 -1
- data/lib/rubygems/commands/sources_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +2 -2
- data/lib/rubygems/config_file.rb +4 -4
- data/lib/rubygems/core_ext/kernel_require.rb +2 -2
- data/lib/rubygems/dependency.rb +9 -6
- data/lib/rubygems/dependency_list.rb +3 -0
- data/lib/rubygems/ext/builder.rb +2 -0
- data/lib/rubygems/ext/ext_conf_builder.rb +6 -1
- data/lib/rubygems/indexer.rb +26 -91
- data/lib/rubygems/installer.rb +58 -26
- data/lib/rubygems/installer_test_case.rb +2 -2
- data/lib/rubygems/package.rb +18 -6
- data/lib/rubygems/package/old.rb +2 -2
- data/lib/rubygems/package/tar_reader/entry.rb +7 -1
- data/lib/rubygems/package/tar_test_case.rb +12 -3
- data/lib/rubygems/package/tar_writer.rb +19 -1
- data/lib/rubygems/platform.rb +3 -2
- data/lib/rubygems/rdoc.rb +1 -2
- data/lib/rubygems/remote_fetcher.rb +25 -6
- data/lib/rubygems/request/connection_pools.rb +8 -4
- data/lib/rubygems/request_set.rb +3 -4
- data/lib/rubygems/request_set/gem_dependency_api.rb +2 -2
- data/lib/rubygems/request_set/lockfile.rb +1 -1
- data/lib/rubygems/request_set/lockfile/parser.rb +54 -43
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +16 -13
- data/lib/rubygems/resolver.rb +47 -242
- data/lib/rubygems/resolver/activation_request.rb +2 -1
- data/lib/rubygems/resolver/conflict.rb +0 -1
- data/lib/rubygems/resolver/dependency_request.rb +4 -1
- data/lib/rubygems/resolver/git_specification.rb +1 -2
- data/lib/rubygems/resolver/molinillo.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +5 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +266 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +69 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +3 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +99 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +63 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +430 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +43 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +51 -0
- data/lib/rubygems/resolver/specification.rb +1 -1
- data/lib/rubygems/specification.rb +256 -86
- data/lib/rubygems/stub_specification.rb +37 -29
- data/lib/rubygems/test_case.rb +65 -28
- data/lib/rubygems/test_utilities.rb +18 -18
- data/lib/rubygems/text.rb +0 -2
- data/lib/rubygems/uninstaller.rb +1 -1
- data/lib/rubygems/util.rb +4 -4
- data/lib/rubygems/util/licenses.rb +309 -0
- data/lib/rubygems/util/list.rb +9 -21
- data/lib/rubygems/version.rb +24 -14
- data/test/rubygems/simple_gem.rb +1 -1
- data/test/rubygems/test_config.rb +10 -1
- data/test/rubygems/test_gem.rb +58 -11
- data/test/rubygems/test_gem_available_set.rb +2 -1
- data/test/rubygems/test_gem_commands_cleanup_command.rb +6 -5
- data/test/rubygems/test_gem_commands_dependency_command.rb +9 -1
- data/test/rubygems/test_gem_commands_install_command.rb +17 -28
- data/test/rubygems/test_gem_commands_mirror.rb +0 -13
- data/test/rubygems/test_gem_commands_outdated_command.rb +2 -3
- data/test/rubygems/test_gem_commands_pristine_command.rb +33 -5
- data/test/rubygems/test_gem_commands_query_command.rb +123 -158
- data/test/rubygems/test_gem_commands_server_command.rb +2 -2
- data/test/rubygems/test_gem_commands_specification_command.rb +4 -4
- data/test/rubygems/test_gem_commands_stale_command.rb +2 -0
- data/test/rubygems/test_gem_commands_uninstall_command.rb +5 -4
- data/test/rubygems/test_gem_commands_unpack_command.rb +4 -6
- data/test/rubygems/test_gem_commands_update_command.rb +22 -52
- data/test/rubygems/test_gem_commands_which_command.rb +1 -0
- data/test/rubygems/test_gem_config_file.rb +1 -1
- data/test/rubygems/test_gem_dependency.rb +7 -3
- data/test/rubygems/test_gem_dependency_installer.rb +5 -5
- data/test/rubygems/test_gem_doctor.rb +1 -1
- data/test/rubygems/test_gem_ext_builder.rb +2 -0
- data/test/rubygems/test_gem_ext_configure_builder.rb +8 -4
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +25 -21
- data/test/rubygems/test_gem_indexer.rb +4 -4
- data/test/rubygems/test_gem_install_update_options.rb +2 -2
- data/test/rubygems/test_gem_installer.rb +32 -26
- data/test/rubygems/test_gem_package.rb +46 -1
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +8 -1
- data/test/rubygems/test_gem_package_tar_writer.rb +10 -1
- data/test/rubygems/test_gem_package_task.rb +5 -2
- data/test/rubygems/test_gem_platform.rb +11 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +64 -3
- data/test/rubygems/test_gem_request.rb +1 -1
- data/test/rubygems/test_gem_request_connection_pools.rb +10 -1
- data/test/rubygems/test_gem_request_set.rb +5 -8
- data/test/rubygems/test_gem_request_set_lockfile.rb +2 -4
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
- data/test/rubygems/test_gem_resolver.rb +12 -31
- data/test/rubygems/test_gem_resolver_git_specification.rb +1 -0
- data/test/rubygems/test_gem_resolver_installer_set.rb +7 -11
- data/test/rubygems/test_gem_resolver_lock_specification.rb +3 -2
- data/test/rubygems/test_gem_security_trust_dir.rb +2 -0
- data/test/rubygems/test_gem_server.rb +4 -0
- data/test/rubygems/test_gem_specification.rb +344 -61
- data/test/rubygems/test_gem_stream_ui.rb +6 -6
- data/test/rubygems/test_gem_stub_specification.rb +21 -6
- data/test/rubygems/test_gem_text.rb +2 -0
- data/test/rubygems/test_gem_uninstaller.rb +2 -1
- data/test/rubygems/test_gem_util.rb +8 -0
- data/test/rubygems/test_require.rb +156 -125
- data/util/generate_spdx_license_list.rb +21 -0
- data/util/update_bundled_ca_certificates.rb +2 -1
- metadata +42 -6
- metadata.gz.sig +0 -0
- data/lib/rubygems/util/stringio.rb +0 -34
@@ -15,35 +15,34 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
15
15
|
end
|
16
16
|
|
17
17
|
class StubLine # :nodoc: all
|
18
|
-
attr_reader :
|
18
|
+
attr_reader :name, :version, :platform, :require_paths
|
19
19
|
|
20
20
|
def initialize(data)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
@parts
|
26
|
-
end
|
27
|
-
|
28
|
-
def version
|
29
|
-
Gem::Version.new @parts[1]
|
21
|
+
parts = data[PREFIX.length..-1].split(" ")
|
22
|
+
@name = parts[0].freeze
|
23
|
+
@version = Gem::Version.new parts[1]
|
24
|
+
@platform = Gem::Platform.new parts[2]
|
25
|
+
@require_paths = parts.drop(3).join(" ").split("\0")
|
30
26
|
end
|
27
|
+
end
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
def self.default_gemspec_stub filename
|
30
|
+
new filename, true
|
31
|
+
end
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
end
|
33
|
+
def self.gemspec_stub filename
|
34
|
+
new filename, false
|
39
35
|
end
|
40
36
|
|
41
|
-
def initialize
|
37
|
+
def initialize filename, default_gem
|
38
|
+
filename.untaint
|
39
|
+
|
42
40
|
self.loaded_from = filename
|
43
41
|
@data = nil
|
44
42
|
@extensions = nil
|
45
43
|
@name = nil
|
46
44
|
@spec = nil
|
45
|
+
@default_gem = default_gem
|
47
46
|
end
|
48
47
|
|
49
48
|
##
|
@@ -57,6 +56,10 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
59
|
+
def default_gem?
|
60
|
+
@default_gem
|
61
|
+
end
|
62
|
+
|
60
63
|
def build_extensions # :nodoc:
|
61
64
|
return if default_gem?
|
62
65
|
return if extensions.empty?
|
@@ -72,18 +75,23 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
72
75
|
unless @data
|
73
76
|
@extensions = []
|
74
77
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
78
|
+
begin
|
79
|
+
saved_lineno = $.
|
80
|
+
open loaded_from, OPEN_MODE do |file|
|
81
|
+
begin
|
82
|
+
file.readline # discard encoding line
|
83
|
+
stubline = file.readline.chomp
|
84
|
+
if stubline.start_with?(PREFIX) then
|
85
|
+
@data = StubLine.new stubline
|
86
|
+
|
87
|
+
@extensions = $'.split "\0" if
|
88
|
+
/\A#{PREFIX}/ =~ file.readline.chomp
|
89
|
+
end
|
90
|
+
rescue EOFError
|
84
91
|
end
|
85
|
-
rescue EOFError
|
86
92
|
end
|
93
|
+
ensure
|
94
|
+
$. = saved_lineno
|
87
95
|
end
|
88
96
|
end
|
89
97
|
|
@@ -135,14 +143,14 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
135
143
|
# Name of the gem
|
136
144
|
|
137
145
|
def name
|
138
|
-
|
146
|
+
data.name
|
139
147
|
end
|
140
148
|
|
141
149
|
##
|
142
150
|
# Platform of the gem
|
143
151
|
|
144
152
|
def platform
|
145
|
-
|
153
|
+
data.platform
|
146
154
|
end
|
147
155
|
|
148
156
|
##
|
data/lib/rubygems/test_case.rb
CHANGED
@@ -36,9 +36,7 @@ require 'shellwords'
|
|
36
36
|
require 'tmpdir'
|
37
37
|
require 'uri'
|
38
38
|
require 'zlib'
|
39
|
-
|
40
|
-
Gem.load_yaml
|
41
|
-
|
39
|
+
require 'benchmark' # stdlib
|
42
40
|
require 'rubygems/mock_gem_ui'
|
43
41
|
|
44
42
|
module Gem
|
@@ -221,6 +219,9 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
221
219
|
@orig_gem_home = ENV['GEM_HOME']
|
222
220
|
@orig_gem_path = ENV['GEM_PATH']
|
223
221
|
@orig_gem_vendor = ENV['GEM_VENDOR']
|
222
|
+
@orig_gem_spec_cache = ENV['GEM_SPEC_CACHE']
|
223
|
+
@orig_rubygems_gemdeps = ENV['RUBYGEMS_GEMDEPS']
|
224
|
+
@orig_rubygems_host = ENV['RUBYGEMS_HOST']
|
224
225
|
|
225
226
|
ENV['GEM_VENDOR'] = nil
|
226
227
|
|
@@ -265,13 +266,16 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
265
266
|
Gem.ensure_gem_subdirectories @gemhome
|
266
267
|
|
267
268
|
@orig_LOAD_PATH = $LOAD_PATH.dup
|
268
|
-
$LOAD_PATH.map! { |s|
|
269
|
+
$LOAD_PATH.map! { |s|
|
270
|
+
(expand_path = File.expand_path(s)) == s ? s : expand_path.untaint
|
271
|
+
}
|
269
272
|
|
270
273
|
Dir.chdir @tempdir
|
271
274
|
|
272
275
|
@orig_ENV_HOME = ENV['HOME']
|
273
276
|
ENV['HOME'] = @userhome
|
274
277
|
Gem.instance_variable_set :@user_home, nil
|
278
|
+
Gem.instance_variable_set :@gemdeps, nil
|
275
279
|
Gem.send :remove_instance_variable, :@ruby_version if
|
276
280
|
Gem.instance_variables.include? :@ruby_version
|
277
281
|
|
@@ -326,6 +330,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
326
330
|
end
|
327
331
|
|
328
332
|
@marshal_version = "#{Marshal::MAJOR_VERSION}.#{Marshal::MINOR_VERSION}"
|
333
|
+
@orig_LOADED_FEATURES = $LOADED_FEATURES.dup
|
329
334
|
end
|
330
335
|
|
331
336
|
##
|
@@ -334,6 +339,18 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
334
339
|
|
335
340
|
def teardown
|
336
341
|
$LOAD_PATH.replace @orig_LOAD_PATH if @orig_LOAD_PATH
|
342
|
+
if @orig_LOADED_FEATURES
|
343
|
+
if @orig_LOAD_PATH
|
344
|
+
paths = @orig_LOAD_PATH.map {|path| File.join(File.expand_path(path), "/")}
|
345
|
+
($LOADED_FEATURES - @orig_LOADED_FEATURES).each do |feat|
|
346
|
+
unless paths.any? {|path| feat.start_with?(path)}
|
347
|
+
$LOADED_FEATURES.delete(feat)
|
348
|
+
end
|
349
|
+
end
|
350
|
+
else
|
351
|
+
$LOADED_FEATURES.replace @orig_LOADED_FEATURES
|
352
|
+
end
|
353
|
+
end
|
337
354
|
|
338
355
|
if @orig_BASERUBY
|
339
356
|
RbConfig::CONFIG['BASERUBY'] = @orig_BASERUBY
|
@@ -353,6 +370,9 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
353
370
|
ENV['GEM_HOME'] = @orig_gem_home
|
354
371
|
ENV['GEM_PATH'] = @orig_gem_path
|
355
372
|
ENV['GEM_VENDOR'] = @orig_gem_vendor
|
373
|
+
ENV['GEM_SPEC_CACHE'] = @orig_gem_spec_cache
|
374
|
+
ENV['RUBYGEMS_GEMDEPS'] = @orig_rubygems_gemdeps
|
375
|
+
ENV['RUBYGEMS_HOST'] = @orig_rubygems_host
|
356
376
|
|
357
377
|
Gem.ruby = @orig_ruby if @orig_ruby
|
358
378
|
|
@@ -367,6 +387,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
367
387
|
ENV['GEM_PRIVATE_KEY_PASSPHRASE'] = @orig_gem_private_key_passphrase
|
368
388
|
|
369
389
|
Gem::Specification._clear_load_cache
|
390
|
+
Gem::Specification.unresolved_deps.clear
|
370
391
|
end
|
371
392
|
|
372
393
|
def common_installer_setup
|
@@ -482,7 +503,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
482
503
|
gem = File.join(@tempdir, File.basename(spec.cache_file)).untaint
|
483
504
|
end
|
484
505
|
|
485
|
-
Gem::Installer.
|
506
|
+
Gem::Installer.at(gem, options.merge({:wrappers => true})).install
|
486
507
|
end
|
487
508
|
|
488
509
|
##
|
@@ -497,8 +518,11 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
497
518
|
def uninstall_gem spec
|
498
519
|
require 'rubygems/uninstaller'
|
499
520
|
|
500
|
-
Gem::Uninstaller
|
501
|
-
|
521
|
+
Class.new(Gem::Uninstaller) {
|
522
|
+
def ask_if_ok spec
|
523
|
+
true
|
524
|
+
end
|
525
|
+
}.new(spec.name, :executables => true, :user_install => true).uninstall
|
502
526
|
end
|
503
527
|
|
504
528
|
##
|
@@ -592,7 +616,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
592
616
|
|
593
617
|
spec.loaded_from = spec.loaded_from = written_path
|
594
618
|
|
595
|
-
Gem::Specification.
|
619
|
+
Gem::Specification.reset
|
596
620
|
|
597
621
|
return spec
|
598
622
|
end
|
@@ -648,7 +672,10 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
648
672
|
# Install the provided specs
|
649
673
|
|
650
674
|
def install_specs(*specs)
|
651
|
-
|
675
|
+
specs.each do |spec|
|
676
|
+
Gem::Installer.for_spec(spec).install
|
677
|
+
end
|
678
|
+
|
652
679
|
Gem.searcher = nil
|
653
680
|
end
|
654
681
|
|
@@ -669,8 +696,9 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
669
696
|
# Install the provided default specs
|
670
697
|
|
671
698
|
def install_default_specs(*specs)
|
672
|
-
install_specs(*specs)
|
673
699
|
specs.each do |spec|
|
700
|
+
installer = Gem::Installer.for_spec(spec, :install_as_default => true)
|
701
|
+
installer.install
|
674
702
|
Gem.register_default_spec(spec)
|
675
703
|
end
|
676
704
|
end
|
@@ -782,9 +810,7 @@ class Gem::TestCase < MiniTest::Unit::TestCase
|
|
782
810
|
end
|
783
811
|
end
|
784
812
|
|
785
|
-
|
786
|
-
|
787
|
-
Gem::Specification.add_spec spec
|
813
|
+
Gem::Specification.reset
|
788
814
|
|
789
815
|
return spec
|
790
816
|
end
|
@@ -971,14 +997,13 @@ Also, a list:
|
|
971
997
|
# Best used with +@all_gems+ from #util_setup_fake_fetcher.
|
972
998
|
|
973
999
|
def util_setup_spec_fetcher(*specs)
|
974
|
-
|
975
|
-
Gem::Specification.
|
1000
|
+
all_specs = Gem::Specification.to_a + specs
|
1001
|
+
Gem::Specification._resort! all_specs
|
976
1002
|
|
977
1003
|
spec_fetcher = Gem::SpecFetcher.fetcher
|
978
1004
|
|
979
|
-
prerelease, all =
|
980
|
-
|
981
|
-
}
|
1005
|
+
prerelease, all = all_specs.partition { |spec| spec.version.prerelease? }
|
1006
|
+
latest = Gem::Specification._latest_specs all_specs
|
982
1007
|
|
983
1008
|
spec_fetcher.specs[@uri] = []
|
984
1009
|
all.each do |spec|
|
@@ -986,7 +1011,7 @@ Also, a list:
|
|
986
1011
|
end
|
987
1012
|
|
988
1013
|
spec_fetcher.latest_specs[@uri] = []
|
989
|
-
|
1014
|
+
latest.each do |spec|
|
990
1015
|
spec_fetcher.latest_specs[@uri] << spec.name_tuple
|
991
1016
|
end
|
992
1017
|
|
@@ -1002,7 +1027,7 @@ Also, a list:
|
|
1002
1027
|
specs = all.map { |spec| spec.name_tuple }
|
1003
1028
|
s_zip = util_gzip Marshal.dump Gem::NameTuple.to_basic specs
|
1004
1029
|
|
1005
|
-
latest_specs =
|
1030
|
+
latest_specs = latest.map do |spec|
|
1006
1031
|
spec.name_tuple
|
1007
1032
|
end
|
1008
1033
|
|
@@ -1017,7 +1042,7 @@ Also, a list:
|
|
1017
1042
|
|
1018
1043
|
v = Gem.marshal_version
|
1019
1044
|
|
1020
|
-
|
1045
|
+
all_specs.each do |spec|
|
1021
1046
|
path = "#{@gem_repo}quick/Marshal.#{v}/#{spec.original_name}.gemspec.rz"
|
1022
1047
|
data = Marshal.dump spec
|
1023
1048
|
data_deflate = Zlib::Deflate.deflate data
|
@@ -1102,7 +1127,7 @@ Also, a list:
|
|
1102
1127
|
# other platforms, including Cygwin, it will return 'make'.
|
1103
1128
|
|
1104
1129
|
def self.make_command
|
1105
|
-
ENV["make"] || (vc_windows? ? 'nmake' : 'make')
|
1130
|
+
ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
|
1106
1131
|
end
|
1107
1132
|
|
1108
1133
|
##
|
@@ -1111,7 +1136,7 @@ Also, a list:
|
|
1111
1136
|
# other platforms, including Cygwin, it will return 'make'.
|
1112
1137
|
|
1113
1138
|
def make_command
|
1114
|
-
ENV["make"] || (vc_windows? ? 'nmake' : 'make')
|
1139
|
+
ENV["make"] || ENV["MAKE"] || (vc_windows? ? 'nmake' : 'make')
|
1115
1140
|
end
|
1116
1141
|
|
1117
1142
|
##
|
@@ -1194,8 +1219,8 @@ Also, a list:
|
|
1194
1219
|
end
|
1195
1220
|
|
1196
1221
|
@@ruby = rubybin
|
1197
|
-
@@good_rake = "#{rubybin} #{File.expand_path('../../../test/rubygems/good_rake.rb', __FILE__)}"
|
1198
|
-
@@bad_rake = "#{rubybin} #{File.expand_path('../../../test/rubygems/bad_rake.rb', __FILE__)}"
|
1222
|
+
@@good_rake = "#{rubybin} \"#{File.expand_path('../../../test/rubygems/good_rake.rb', __FILE__)}\""
|
1223
|
+
@@bad_rake = "#{rubybin} \"#{File.expand_path('../../../test/rubygems/bad_rake.rb', __FILE__)}\""
|
1199
1224
|
|
1200
1225
|
##
|
1201
1226
|
# Construct a new Gem::Dependency.
|
@@ -1433,7 +1458,10 @@ begin
|
|
1433
1458
|
rescue Gem::LoadError
|
1434
1459
|
end
|
1435
1460
|
|
1436
|
-
|
1461
|
+
begin
|
1462
|
+
require 'rake/packagetask'
|
1463
|
+
rescue LoadError
|
1464
|
+
end
|
1437
1465
|
|
1438
1466
|
begin
|
1439
1467
|
gem 'rdoc'
|
@@ -1441,7 +1469,16 @@ begin
|
|
1441
1469
|
rescue LoadError, Gem::LoadError
|
1442
1470
|
end
|
1443
1471
|
|
1472
|
+
begin
|
1473
|
+
gem 'builder'
|
1474
|
+
require 'builder/xchar'
|
1475
|
+
rescue LoadError, Gem::LoadError
|
1476
|
+
end
|
1477
|
+
|
1444
1478
|
require 'rubygems/test_utilities'
|
1445
|
-
|
1446
|
-
ENV['
|
1479
|
+
tmpdirs = []
|
1480
|
+
tmpdirs << (ENV['GEM_HOME'] = Dir.mktmpdir("home"))
|
1481
|
+
tmpdirs << (ENV['GEM_PATH'] = Dir.mktmpdir("path"))
|
1482
|
+
pid = $$
|
1483
|
+
END {tmpdirs.each {|dir| Dir.rmdir(dir)} if $$ == pid}
|
1447
1484
|
Gem.clear_paths
|
@@ -186,7 +186,6 @@ end
|
|
186
186
|
# f.gem 'a', 1
|
187
187
|
# f.spec 'a', 2
|
188
188
|
# f.gem 'b', 1' 'a' => '~> 1.0'
|
189
|
-
# f.clear
|
190
189
|
# end
|
191
190
|
#
|
192
191
|
# The above declaration creates two gems, a-1 and b-1, with a dependency from
|
@@ -214,18 +213,11 @@ class Gem::TestCase::SpecFetcherSetup
|
|
214
213
|
@repository = repository
|
215
214
|
|
216
215
|
@gems = {}
|
216
|
+
@downloaded = []
|
217
217
|
@installed = []
|
218
218
|
@operations = []
|
219
219
|
end
|
220
220
|
|
221
|
-
##
|
222
|
-
# Removes any created gems or specifications from Gem.dir (the default
|
223
|
-
# install location).
|
224
|
-
|
225
|
-
def clear
|
226
|
-
@operations << [:clear]
|
227
|
-
end
|
228
|
-
|
229
221
|
##
|
230
222
|
# Returns a Hash of created Specification full names and the corresponding
|
231
223
|
# Specification.
|
@@ -254,9 +246,6 @@ class Gem::TestCase::SpecFetcherSetup
|
|
254
246
|
def execute_operations # :nodoc:
|
255
247
|
@operations.each do |operation, *arguments|
|
256
248
|
case operation
|
257
|
-
when :clear then
|
258
|
-
@test.util_clear_gems
|
259
|
-
@installed.clear
|
260
249
|
when :gem then
|
261
250
|
spec, gem = @test.util_gem(*arguments, &arguments.pop)
|
262
251
|
|
@@ -264,6 +253,11 @@ class Gem::TestCase::SpecFetcherSetup
|
|
264
253
|
|
265
254
|
@gems[spec] = gem
|
266
255
|
@installed << spec
|
256
|
+
when :download then
|
257
|
+
spec, gem = @test.util_gem(*arguments, &arguments.pop)
|
258
|
+
|
259
|
+
@gems[spec] = gem
|
260
|
+
@downloaded << spec
|
267
261
|
when :spec then
|
268
262
|
spec = @test.util_spec(*arguments, &arguments.pop)
|
269
263
|
|
@@ -286,6 +280,17 @@ class Gem::TestCase::SpecFetcherSetup
|
|
286
280
|
@operations << [:gem, name, version, dependencies, block]
|
287
281
|
end
|
288
282
|
|
283
|
+
##
|
284
|
+
# Creates a gem with +name+, +version+ and +deps+. The created gem is
|
285
|
+
# downloaded in to the cache directory but is not installed
|
286
|
+
#
|
287
|
+
# The specification will be yielded before gem creation for customization,
|
288
|
+
# but only the block or the dependencies may be set, not both.
|
289
|
+
|
290
|
+
def download name, version, dependencies = nil, &block
|
291
|
+
@operations << [:download, name, version, dependencies, block]
|
292
|
+
end
|
293
|
+
|
289
294
|
##
|
290
295
|
# Creates a legacy platform spec with the name 'pl' and version 1
|
291
296
|
|
@@ -312,17 +317,12 @@ class Gem::TestCase::SpecFetcherSetup
|
|
312
317
|
gem_repo, @test.gem_repo = @test.gem_repo, @repository
|
313
318
|
@test.uri = URI @repository
|
314
319
|
|
315
|
-
@test.util_setup_spec_fetcher(*@
|
320
|
+
@test.util_setup_spec_fetcher(*@downloaded)
|
316
321
|
ensure
|
317
322
|
@test.gem_repo = gem_repo
|
318
323
|
@test.uri = URI gem_repo
|
319
324
|
end
|
320
325
|
|
321
|
-
# This works around util_setup_spec_fetcher adding all created gems to the
|
322
|
-
# installed set.
|
323
|
-
Gem::Specification.reset
|
324
|
-
Gem::Specification.add_specs(*@installed)
|
325
|
-
|
326
326
|
@gems.each do |spec, gem|
|
327
327
|
next unless gem
|
328
328
|
|