rubygems-update 2.7.6 → 2.7.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -23
- data/History.txt +116 -0
- data/Manifest.txt +3 -3
- data/Rakefile +12 -2
- data/bundler/CHANGELOG.md +130 -0
- data/bundler/README.md +5 -1
- data/bundler/bundler.gemspec +2 -1
- data/bundler/lib/bundler.rb +12 -8
- data/bundler/lib/bundler/build_metadata.rb +19 -2
- data/bundler/lib/bundler/cli.rb +3 -1
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/exec.rb +4 -4
- data/bundler/lib/bundler/cli/gem.rb +5 -2
- data/bundler/lib/bundler/cli/init.rb +5 -0
- data/bundler/lib/bundler/cli/install.rb +2 -2
- data/bundler/lib/bundler/cli/outdated.rb +1 -1
- data/bundler/lib/bundler/cli/update.rb +3 -3
- data/bundler/lib/bundler/compact_index_client/updater.rb +10 -1
- data/bundler/lib/bundler/current_ruby.rb +8 -1
- data/bundler/lib/bundler/definition.rb +33 -23
- data/bundler/lib/bundler/dep_proxy.rb +2 -2
- data/bundler/lib/bundler/dependency.rb +1 -0
- data/bundler/lib/bundler/deprecate.rb +2 -1
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/env.rb +10 -8
- data/bundler/lib/bundler/fetcher.rb +3 -3
- data/bundler/lib/bundler/fetcher/downloader.rb +10 -5
- data/bundler/lib/bundler/fetcher/index.rb +2 -2
- data/bundler/lib/bundler/friendly_errors.rb +2 -0
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +12 -0
- data/bundler/lib/bundler/injector.rb +5 -5
- data/bundler/lib/bundler/installer.rb +12 -4
- data/bundler/lib/bundler/installer/gem_installer.rb +9 -2
- data/bundler/lib/bundler/installer/parallel_installer.rb +1 -1
- data/bundler/lib/bundler/lazy_specification.rb +1 -1
- data/bundler/lib/bundler/mirror.rb +2 -2
- data/bundler/lib/bundler/plugin.rb +2 -2
- data/bundler/lib/bundler/plugin/index.rb +7 -2
- data/bundler/lib/bundler/process_lock.rb +1 -1
- data/bundler/lib/bundler/resolver.rb +10 -9
- data/bundler/lib/bundler/resolver/spec_group.rb +0 -5
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_integration.rb +9 -3
- data/bundler/lib/bundler/runtime.rb +2 -2
- data/bundler/lib/bundler/shared_helpers.rb +15 -3
- data/bundler/lib/bundler/source/git.rb +2 -1
- data/bundler/lib/bundler/source/git/git_proxy.rb +6 -1
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +11 -2
- data/bundler/lib/bundler/source/rubygems/remote.rb +4 -1
- data/bundler/lib/bundler/spec_set.rb +4 -1
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +2 -0
- data/bundler/lib/bundler/ui/shell.rb +3 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +7 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/man/bundle-binstubs.ronn +3 -3
- data/bundler/man/bundle-check.ronn +3 -3
- data/bundler/man/bundle-config.ronn +13 -9
- data/bundler/man/bundle-doctor.ronn +33 -0
- data/bundler/man/bundle-exec.ronn +3 -3
- data/bundler/man/bundle-gem.ronn +1 -1
- data/bundler/man/bundle-init.ronn +15 -4
- data/bundler/man/bundle-inject.ronn +3 -3
- data/bundler/man/bundle-install.ronn +12 -3
- data/bundler/man/bundle-lock.ronn +1 -1
- data/bundler/man/bundle-outdated.ronn +1 -1
- data/bundler/man/bundle-package.ronn +3 -3
- data/bundler/man/bundle-show.ronn +3 -2
- data/bundler/man/bundle-update.ronn +18 -14
- data/bundler/man/bundle-viz.ronn +1 -1
- data/bundler/man/bundle.ronn +27 -27
- data/bundler/man/gemfile.5.ronn +24 -9
- data/lib/rubygems.rb +24 -11
- data/lib/rubygems/bundler_version_finder.rb +9 -22
- data/lib/rubygems/command_manager.rb +6 -4
- data/lib/rubygems/commands/install_command.rb +7 -0
- data/lib/rubygems/commands/owner_command.rb +4 -1
- data/lib/rubygems/commands/push_command.rb +37 -4
- data/lib/rubygems/commands/setup_command.rb +3 -3
- data/lib/rubygems/commands/uninstall_command.rb +1 -1
- data/lib/rubygems/commands/unpack_command.rb +1 -1
- data/lib/rubygems/core_ext/kernel_require.rb +2 -7
- data/lib/rubygems/dependency.rb +1 -0
- data/lib/rubygems/dependency_installer.rb +4 -2
- data/lib/rubygems/exceptions.rb +5 -1
- data/lib/rubygems/gemcutter_utilities.rb +5 -2
- data/lib/rubygems/indexer.rb +1 -1
- data/lib/rubygems/install_update_options.rb +1 -1
- data/lib/rubygems/installer.rb +29 -6
- data/lib/rubygems/package.rb +20 -2
- data/lib/rubygems/package/tar_header.rb +3 -1
- data/lib/rubygems/package/tar_writer.rb +2 -3
- data/lib/rubygems/remote_fetcher.rb +1 -1
- data/lib/rubygems/request_set.rb +28 -17
- data/lib/rubygems/requirement.rb +14 -3
- data/lib/rubygems/resolver/api_specification.rb +5 -0
- data/lib/rubygems/security.rb +6 -1
- data/lib/rubygems/server.rb +3 -3
- data/lib/rubygems/source.rb +1 -1
- data/lib/rubygems/specification.rb +7 -10
- data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/test_case.rb +22 -4
- data/lib/rubygems/test_utilities.rb +1 -1
- data/lib/rubygems/user_interaction.rb +9 -2
- data/lib/rubygems/util/licenses.rb +35 -4
- data/lib/rubygems/version.rb +7 -1
- data/lib/ubygems.rb +3 -0
- data/test/rubygems/test_bundled_ca.rb +7 -4
- data/test/rubygems/test_gem.rb +45 -10
- data/test/rubygems/test_gem_bundler_version_finder.rb +8 -7
- data/test/rubygems/test_gem_command_manager.rb +2 -2
- data/test/rubygems/test_gem_commands_build_command.rb +2 -0
- data/test/rubygems/test_gem_commands_install_command.rb +37 -0
- data/test/rubygems/test_gem_commands_push_command.rb +20 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +6 -1
- data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
- data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
- data/test/rubygems/test_gem_dependency.rb +1 -1
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -4
- data/test/rubygems/test_gem_install_update_options.rb +2 -0
- data/test/rubygems/test_gem_installer.rb +109 -3
- data/test/rubygems/test_gem_package.rb +90 -5
- data/test/rubygems/test_gem_package_tar_header.rb +2 -1
- data/test/rubygems/test_gem_remote_fetcher.rb +6 -2
- data/test/rubygems/test_gem_request.rb +5 -2
- data/test/rubygems/test_gem_requirement.rb +6 -0
- data/test/rubygems/test_gem_resolver_api_specification.rb +24 -0
- data/test/rubygems/test_gem_resolver_installer_set.rb +1 -1
- data/test/rubygems/test_gem_security_policy.rb +3 -3
- data/test/rubygems/test_gem_server.rb +12 -12
- data/test/rubygems/test_gem_specification.rb +27 -13
- data/test/rubygems/test_gem_stream_ui.rb +2 -2
- data/test/rubygems/test_gem_text.rb +5 -0
- data/test/rubygems/test_gem_util.rb +4 -2
- data/test/rubygems/test_gem_version.rb +29 -2
- data/util/ci +1 -0
- data/util/generate_spdx_license_list.rb +15 -6
- data/util/update_bundled_ca_certificates.rb +1 -3
- metadata +12 -12
- data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
@@ -238,7 +238,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase
|
|
238
238
|
@cmd.handle_options %w[]
|
239
239
|
|
240
240
|
assert_equal false, @cmd.options[:check_dev]
|
241
|
-
|
241
|
+
assert_nil @cmd.options[:install_dir]
|
242
242
|
assert_equal true, @cmd.options[:user_install]
|
243
243
|
assert_equal Gem::Requirement.default, @cmd.options[:version]
|
244
244
|
assert_equal false, @cmd.options[:vendor]
|
@@ -358,7 +358,7 @@ class TestGemDependency < Gem::TestCase
|
|
358
358
|
dep.to_specs
|
359
359
|
end
|
360
360
|
|
361
|
-
assert_match "Could not find 'bundler' (3.5) required by reason.\nTo update to the
|
361
|
+
assert_match "Could not find 'bundler' (3.5) required by reason.\nTo update to the latest version installed on your system, run `bundle update --bundler`.\nTo install the missing version, run `gem install bundler:3.5`\n", e.message
|
362
362
|
end
|
363
363
|
|
364
364
|
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["2.0.0.pre.1", "reason"]) do
|
@@ -16,11 +16,9 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|
16
16
|
def test_class_build
|
17
17
|
create_temp_mkrf_file('task :default')
|
18
18
|
output = []
|
19
|
-
realdir = nil # HACK /tmp vs. /private/tmp
|
20
19
|
|
21
20
|
build_rake_in do |rake|
|
22
21
|
Dir.chdir @ext do
|
23
|
-
realdir = Dir.pwd
|
24
22
|
Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', nil, @dest_path, output
|
25
23
|
end
|
26
24
|
|
@@ -38,11 +36,9 @@ class TestGemExtRakeBuilder < Gem::TestCase
|
|
38
36
|
def test_class_build_with_args
|
39
37
|
create_temp_mkrf_file('task :default')
|
40
38
|
output = []
|
41
|
-
realdir = nil # HACK /tmp vs. /private/tmp
|
42
39
|
|
43
40
|
build_rake_in do |rake|
|
44
41
|
Dir.chdir @ext do
|
45
|
-
realdir = Dir.pwd
|
46
42
|
non_empty_args_list = ['']
|
47
43
|
Gem::Ext::RakeBuilder.build 'mkrf_conf.rb', nil, @dest_path, output, non_empty_args_list
|
48
44
|
end
|
@@ -119,6 +119,8 @@ class TestGemInstallUpdateOptions < Gem::InstallerTestCase
|
|
119
119
|
end
|
120
120
|
|
121
121
|
def test_security_policy_unknown
|
122
|
+
skip 'openssl is missing' unless defined?(OpenSSL::SSL)
|
123
|
+
|
122
124
|
@cmd.add_install_update_options
|
123
125
|
|
124
126
|
e = assert_raises OptionParser::InvalidArgument do
|
@@ -21,7 +21,7 @@ class TestGemInstaller < Gem::InstallerTestCase
|
|
21
21
|
super
|
22
22
|
common_installer_setup
|
23
23
|
|
24
|
-
if __name__ =~
|
24
|
+
if (self.class.method_defined?(:__name__) ? __name__ : name) =~ /\Atest_install(_|\Z)/
|
25
25
|
FileUtils.rm_r @spec.gem_dir
|
26
26
|
FileUtils.rm_r @user_spec.gem_dir
|
27
27
|
end
|
@@ -34,7 +34,7 @@ class TestGemInstaller < Gem::InstallerTestCase
|
|
34
34
|
|
35
35
|
super
|
36
36
|
|
37
|
-
Gem.configuration = @config
|
37
|
+
Gem.configuration = instance_variable_defined?(:@config) ? @config : nil
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_app_script_text
|
@@ -663,7 +663,7 @@ gem 'other', version
|
|
663
663
|
assert_path_exists installed_exec
|
664
664
|
|
665
665
|
if symlink_supported?
|
666
|
-
|
666
|
+
assert File.symlink?(installed_exec)
|
667
667
|
return
|
668
668
|
end
|
669
669
|
|
@@ -1474,6 +1474,112 @@ gem 'other', version
|
|
1474
1474
|
end
|
1475
1475
|
end
|
1476
1476
|
|
1477
|
+
def test_pre_install_checks_malicious_name_before_eval
|
1478
|
+
spec = util_spec "malicious\n::Object.const_set(:FROM_EVAL, true)#", '1'
|
1479
|
+
def spec.full_name # so the spec is buildable
|
1480
|
+
"malicious-1"
|
1481
|
+
end
|
1482
|
+
def spec.validate(*args); end
|
1483
|
+
|
1484
|
+
util_build_gem spec
|
1485
|
+
|
1486
|
+
gem = File.join(@gemhome, 'cache', spec.file_name)
|
1487
|
+
|
1488
|
+
use_ui @ui do
|
1489
|
+
@installer = Gem::Installer.at gem
|
1490
|
+
e = assert_raises Gem::InstallError do
|
1491
|
+
@installer.pre_install_checks
|
1492
|
+
end
|
1493
|
+
assert_equal "#<Gem::Specification name=malicious\n::Object.const_set(:FROM_EVAL, true)# version=1> has an invalid name", e.message
|
1494
|
+
end
|
1495
|
+
refute defined?(::Object::FROM_EVAL)
|
1496
|
+
end
|
1497
|
+
|
1498
|
+
def test_pre_install_checks_malicious_require_paths_before_eval
|
1499
|
+
spec = util_spec "malicious", '1'
|
1500
|
+
def spec.full_name # so the spec is buildable
|
1501
|
+
"malicious-1"
|
1502
|
+
end
|
1503
|
+
def spec.validate(*args); end
|
1504
|
+
spec.require_paths = ["malicious\n``"]
|
1505
|
+
|
1506
|
+
util_build_gem spec
|
1507
|
+
|
1508
|
+
gem = File.join(@gemhome, 'cache', spec.file_name)
|
1509
|
+
|
1510
|
+
use_ui @ui do
|
1511
|
+
@installer = Gem::Installer.at gem
|
1512
|
+
e = assert_raises Gem::InstallError do
|
1513
|
+
@installer.pre_install_checks
|
1514
|
+
end
|
1515
|
+
assert_equal "#<Gem::Specification name=malicious version=1> has an invalid require_paths", e.message
|
1516
|
+
end
|
1517
|
+
end
|
1518
|
+
|
1519
|
+
def test_pre_install_checks_malicious_extensions_before_eval
|
1520
|
+
spec = util_spec "malicious", '1'
|
1521
|
+
def spec.full_name # so the spec is buildable
|
1522
|
+
"malicious-1"
|
1523
|
+
end
|
1524
|
+
def spec.validate(*args); end
|
1525
|
+
spec.extensions = ["malicious\n``"]
|
1526
|
+
|
1527
|
+
util_build_gem spec
|
1528
|
+
|
1529
|
+
gem = File.join(@gemhome, 'cache', spec.file_name)
|
1530
|
+
|
1531
|
+
use_ui @ui do
|
1532
|
+
@installer = Gem::Installer.at gem
|
1533
|
+
e = assert_raises Gem::InstallError do
|
1534
|
+
@installer.pre_install_checks
|
1535
|
+
end
|
1536
|
+
assert_equal "#<Gem::Specification name=malicious version=1> has an invalid extensions", e.message
|
1537
|
+
end
|
1538
|
+
end
|
1539
|
+
|
1540
|
+
def test_pre_install_checks_malicious_specification_version_before_eval
|
1541
|
+
spec = util_spec "malicious", '1'
|
1542
|
+
def spec.full_name # so the spec is buildable
|
1543
|
+
"malicious-1"
|
1544
|
+
end
|
1545
|
+
def spec.validate(*args); end
|
1546
|
+
spec.specification_version = "malicious\n``"
|
1547
|
+
|
1548
|
+
util_build_gem spec
|
1549
|
+
|
1550
|
+
gem = File.join(@gemhome, 'cache', spec.file_name)
|
1551
|
+
|
1552
|
+
use_ui @ui do
|
1553
|
+
@installer = Gem::Installer.at gem
|
1554
|
+
e = assert_raises Gem::InstallError do
|
1555
|
+
@installer.pre_install_checks
|
1556
|
+
end
|
1557
|
+
assert_equal "#<Gem::Specification name=malicious version=1> has an invalid specification_version", e.message
|
1558
|
+
end
|
1559
|
+
end
|
1560
|
+
|
1561
|
+
def test_pre_install_checks_malicious_dependencies_before_eval
|
1562
|
+
spec = util_spec "malicious", '1'
|
1563
|
+
def spec.full_name # so the spec is buildable
|
1564
|
+
"malicious-1"
|
1565
|
+
end
|
1566
|
+
def spec.validate(*args); end
|
1567
|
+
spec.add_dependency "b\nfoo", '> 5'
|
1568
|
+
|
1569
|
+
util_build_gem spec
|
1570
|
+
|
1571
|
+
gem = File.join(@gemhome, 'cache', spec.file_name)
|
1572
|
+
|
1573
|
+
use_ui @ui do
|
1574
|
+
@installer = Gem::Installer.at gem
|
1575
|
+
@installer.ignore_dependencies = true
|
1576
|
+
e = assert_raises Gem::InstallError do
|
1577
|
+
@installer.pre_install_checks
|
1578
|
+
end
|
1579
|
+
assert_equal "#<Gem::Specification name=malicious version=1> has an invalid dependencies", e.message
|
1580
|
+
end
|
1581
|
+
end
|
1582
|
+
|
1477
1583
|
def test_shebang
|
1478
1584
|
util_make_exec @spec, "#!/usr/bin/ruby"
|
1479
1585
|
|
@@ -480,6 +480,42 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
480
480
|
"#{destination_subdir} is not allowed", e.message)
|
481
481
|
end
|
482
482
|
|
483
|
+
def test_extract_symlink_parent_doesnt_delete_user_dir
|
484
|
+
skip if RUBY_VERSION <= "1.8.7"
|
485
|
+
|
486
|
+
package = Gem::Package.new @gem
|
487
|
+
|
488
|
+
# Extract into a subdirectory of @destination; if this test fails it writes
|
489
|
+
# a file outside destination_subdir, but we want the file to remain inside
|
490
|
+
# @destination so it will be cleaned up.
|
491
|
+
destination_subdir = File.join @destination, 'subdir'
|
492
|
+
FileUtils.mkdir_p destination_subdir
|
493
|
+
|
494
|
+
destination_user_dir = File.join @destination, 'user'
|
495
|
+
destination_user_subdir = File.join destination_user_dir, 'dir'
|
496
|
+
FileUtils.mkdir_p destination_user_subdir
|
497
|
+
|
498
|
+
tgz_io = util_tar_gz do |tar|
|
499
|
+
tar.add_symlink 'link', destination_user_dir, 16877
|
500
|
+
tar.add_symlink 'link/dir', '.', 16877
|
501
|
+
end
|
502
|
+
|
503
|
+
e = assert_raises(Gem::Package::PathError, Errno::EACCES) do
|
504
|
+
package.extract_tar_gz tgz_io, destination_subdir
|
505
|
+
end
|
506
|
+
|
507
|
+
assert_path_exists destination_user_subdir
|
508
|
+
|
509
|
+
if Gem::Package::PathError === e
|
510
|
+
assert_equal("installing into parent path #{destination_user_subdir} of " +
|
511
|
+
"#{destination_subdir} is not allowed", e.message)
|
512
|
+
elsif win_platform?
|
513
|
+
skip "symlink - must be admin with no UAC on Windows"
|
514
|
+
else
|
515
|
+
raise e
|
516
|
+
end
|
517
|
+
end
|
518
|
+
|
483
519
|
def test_extract_tar_gz_directory
|
484
520
|
package = Gem::Package.new @gem
|
485
521
|
|
@@ -524,6 +560,21 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
524
560
|
assert_path_exists extracted
|
525
561
|
end
|
526
562
|
|
563
|
+
if Gem.win_platform?
|
564
|
+
def test_extract_tar_gz_case_insensitive
|
565
|
+
package = Gem::Package.new @gem
|
566
|
+
|
567
|
+
tgz_io = util_tar_gz do |tar|
|
568
|
+
tar.add_file 'foo/file.rb', 0644 do |io| io.write 'hi' end
|
569
|
+
end
|
570
|
+
|
571
|
+
package.extract_tar_gz tgz_io, @destination.upcase
|
572
|
+
|
573
|
+
extracted = File.join @destination, 'foo/file.rb'
|
574
|
+
assert_path_exists extracted
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
527
578
|
def test_install_location
|
528
579
|
package = Gem::Package.new @gem
|
529
580
|
|
@@ -607,7 +658,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
607
658
|
end
|
608
659
|
|
609
660
|
def test_load_spec
|
610
|
-
entry = StringIO.new Gem.gzip @spec.to_yaml
|
661
|
+
entry = StringIO.new Gem::Util.gzip @spec.to_yaml
|
611
662
|
def entry.full_name() 'metadata.gz' end
|
612
663
|
|
613
664
|
package = Gem::Package.new 'nonexistent.gem'
|
@@ -637,7 +688,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
637
688
|
data_tgz = data_tgz.string
|
638
689
|
|
639
690
|
gem = util_tar do |tar|
|
640
|
-
metadata_gz = Gem.gzip @spec.to_yaml
|
691
|
+
metadata_gz = Gem::Util.gzip @spec.to_yaml
|
641
692
|
|
642
693
|
tar.add_file 'metadata.gz', 0444 do |io|
|
643
694
|
io.write metadata_gz
|
@@ -684,7 +735,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
684
735
|
data_tgz = data_tgz.string
|
685
736
|
|
686
737
|
gem = util_tar do |tar|
|
687
|
-
metadata_gz = Gem.gzip @spec.to_yaml
|
738
|
+
metadata_gz = Gem::Util.gzip @spec.to_yaml
|
688
739
|
|
689
740
|
tar.add_file 'metadata.gz', 0444 do |io|
|
690
741
|
io.write metadata_gz
|
@@ -721,7 +772,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
721
772
|
|
722
773
|
def test_verify_corrupt
|
723
774
|
tf = Tempfile.open 'corrupt' do |io|
|
724
|
-
data = Gem.gzip 'a' * 10
|
775
|
+
data = Gem::Util.gzip 'a' * 10
|
725
776
|
io.write \
|
726
777
|
tar_file_header('metadata.gz', "\000x", 0644, data.length, Time.now)
|
727
778
|
io.write data
|
@@ -845,7 +896,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
845
896
|
build.add_contents gem
|
846
897
|
|
847
898
|
# write bogus data.tar.gz to foil signature
|
848
|
-
bogus_data = Gem.gzip 'hello'
|
899
|
+
bogus_data = Gem::Util.gzip 'hello'
|
849
900
|
fake_signer = Class.new do
|
850
901
|
def digest_name; 'SHA512'; end
|
851
902
|
def digest_algorithm; Digest(:SHA512); end
|
@@ -903,6 +954,40 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
903
954
|
end
|
904
955
|
|
905
956
|
assert_equal "package is corrupt, exception while verifying: whatever (ArgumentError) in #{@gem}", e.message
|
957
|
+
|
958
|
+
valid_metadata = ["metadata", "metadata.gz"]
|
959
|
+
valid_metadata.each do |vm|
|
960
|
+
$spec_loaded = false
|
961
|
+
$good_name = vm
|
962
|
+
|
963
|
+
entry = Object.new
|
964
|
+
def entry.full_name() $good_name end
|
965
|
+
|
966
|
+
package = Gem::Package.new(@gem)
|
967
|
+
package.instance_variable_set(:@files, [])
|
968
|
+
def package.load_spec(entry) $spec_loaded = true end
|
969
|
+
|
970
|
+
package.verify_entry(entry)
|
971
|
+
|
972
|
+
assert $spec_loaded
|
973
|
+
end
|
974
|
+
|
975
|
+
invalid_metadata = ["metadataxgz", "foobar\nmetadata", "metadata\nfoobar"]
|
976
|
+
invalid_metadata.each do |vm|
|
977
|
+
$spec_loaded = false
|
978
|
+
$bad_name = vm
|
979
|
+
|
980
|
+
entry = Object.new
|
981
|
+
def entry.full_name() $bad_name end
|
982
|
+
|
983
|
+
package = Gem::Package.new(@gem)
|
984
|
+
package.instance_variable_set(:@files, [])
|
985
|
+
def package.load_spec(entry) $spec_loaded = true end
|
986
|
+
|
987
|
+
package.verify_entry(entry)
|
988
|
+
|
989
|
+
refute $spec_loaded
|
990
|
+
end
|
906
991
|
end
|
907
992
|
|
908
993
|
def test_spec
|
@@ -158,8 +158,9 @@ group\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
|
|
158
158
|
header_s[124, 12] = val
|
159
159
|
io = TempIO.new header_s
|
160
160
|
assert_raises ArgumentError do
|
161
|
-
|
161
|
+
Gem::Package::TarHeader.from io
|
162
162
|
end
|
163
|
+
io.close! if io.respond_to? :close!
|
163
164
|
end
|
164
165
|
end
|
165
166
|
|
@@ -9,6 +9,10 @@ rescue LoadError => e
|
|
9
9
|
e.message =~ / -- openssl$/
|
10
10
|
end
|
11
11
|
|
12
|
+
unless defined?(OpenSSL::SSL) then
|
13
|
+
warn 'Skipping Gem::Request tests. openssl not found.'
|
14
|
+
end
|
15
|
+
|
12
16
|
require 'rubygems/remote_fetcher'
|
13
17
|
require 'rubygems/package'
|
14
18
|
require 'minitest/mock'
|
@@ -541,7 +545,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
541
545
|
@fetcher = fetcher
|
542
546
|
|
543
547
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
544
|
-
Gem.gzip 'foo'
|
548
|
+
Gem::Util.gzip 'foo'
|
545
549
|
end
|
546
550
|
|
547
551
|
assert_equal 'foo', fetcher.fetch_path(@uri + 'foo.gz')
|
@@ -1067,4 +1071,4 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1067
1071
|
assert_equal "/home/skillet", @fetcher.correct_for_windows_path(path)
|
1068
1072
|
end
|
1069
1073
|
|
1070
|
-
end
|
1074
|
+
end if defined?(OpenSSL::SSL)
|
@@ -4,6 +4,10 @@ require 'rubygems/request'
|
|
4
4
|
require 'ostruct'
|
5
5
|
require 'base64'
|
6
6
|
|
7
|
+
unless defined?(OpenSSL::SSL) then
|
8
|
+
warn 'Skipping Gem::Request tests. openssl not found.'
|
9
|
+
end
|
10
|
+
|
7
11
|
class TestGemRequest < Gem::TestCase
|
8
12
|
|
9
13
|
CA_CERT_FILE = cert_path 'ca'
|
@@ -491,5 +495,4 @@ ERROR: Certificate is an invalid CA certificate
|
|
491
495
|
end
|
492
496
|
end
|
493
497
|
|
494
|
-
end
|
495
|
-
|
498
|
+
end if defined?(OpenSSL::SSL)
|
@@ -28,6 +28,8 @@ class TestGemRequirement < Gem::TestCase
|
|
28
28
|
assert_requirement_equal "= 2", "2"
|
29
29
|
assert_requirement_equal "= 2", ["2"]
|
30
30
|
assert_requirement_equal "= 2", v(2)
|
31
|
+
assert_requirement_equal "2.0", "2"
|
32
|
+
assert_requirement_equal ["= 2", ">= 2"], [">= 2", "= 2"]
|
31
33
|
end
|
32
34
|
|
33
35
|
def test_create
|
@@ -69,6 +71,7 @@ class TestGemRequirement < Gem::TestCase
|
|
69
71
|
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('= 1')
|
70
72
|
assert_equal ['>', Gem::Version.new(1)], Gem::Requirement.parse('> 1')
|
71
73
|
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse("=\n1")
|
74
|
+
assert_equal ['=', Gem::Version.new(1)], Gem::Requirement.parse('1.0')
|
72
75
|
|
73
76
|
assert_equal ['=', Gem::Version.new(2)],
|
74
77
|
Gem::Requirement.parse(Gem::Version.new('2'))
|
@@ -226,6 +229,8 @@ class TestGemRequirement < Gem::TestCase
|
|
226
229
|
assert_satisfied_by "0.2.33", "= 0.2.33"
|
227
230
|
assert_satisfied_by "0.2.34", "> 0.2.33"
|
228
231
|
assert_satisfied_by "1.0", "= 1.0"
|
232
|
+
assert_satisfied_by "1.0.0", "= 1.0"
|
233
|
+
assert_satisfied_by "1.0", "= 1.0.0"
|
229
234
|
assert_satisfied_by "1.0", "1.0"
|
230
235
|
assert_satisfied_by "1.8.2", "> 1.8.0"
|
231
236
|
assert_satisfied_by "1.112", "> 1.111"
|
@@ -313,6 +318,7 @@ class TestGemRequirement < Gem::TestCase
|
|
313
318
|
def test_satisfied_by_boxed
|
314
319
|
refute_satisfied_by "1.3", "~> 1.4"
|
315
320
|
assert_satisfied_by "1.4", "~> 1.4"
|
321
|
+
assert_satisfied_by "1.4.0", "~> 1.4"
|
316
322
|
assert_satisfied_by "1.5", "~> 1.4"
|
317
323
|
refute_satisfied_by "2.0", "~> 1.4"
|
318
324
|
|
@@ -141,5 +141,29 @@ class TestGemResolverAPISpecification < Gem::TestCase
|
|
141
141
|
assert_equal 'a-1', spec.full_name
|
142
142
|
end
|
143
143
|
|
144
|
+
def test_spec_jruby_platform
|
145
|
+
spec_fetcher do |fetcher|
|
146
|
+
fetcher.gem 'j', 1 do |spec|
|
147
|
+
spec.platform = 'jruby'
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
dep_uri = URI(@gem_repo) + 'api/v1/dependencies'
|
152
|
+
set = Gem::Resolver::APISet.new dep_uri
|
153
|
+
data = {
|
154
|
+
:name => 'j',
|
155
|
+
:number => '1',
|
156
|
+
:platform => 'jruby',
|
157
|
+
:dependencies => [],
|
158
|
+
}
|
159
|
+
|
160
|
+
api_spec = Gem::Resolver::APISpecification.new set, data
|
161
|
+
|
162
|
+
spec = api_spec.spec
|
163
|
+
|
164
|
+
assert_kind_of Gem::Specification, spec
|
165
|
+
assert_equal 'j-1-java', spec.full_name
|
166
|
+
end
|
167
|
+
|
144
168
|
end
|
145
169
|
|