rubygems-update 2.7.11 → 3.0.9
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +67 -0
- data/.travis.yml +24 -18
- data/CODE_OF_CONDUCT.md +10 -8
- data/CONTRIBUTING.md +148 -0
- data/History.txt +458 -8
- data/MAINTAINERS.txt +1 -0
- data/Manifest.txt +16 -9
- data/POLICIES.md +92 -0
- data/README.md +53 -26
- data/Rakefile +77 -211
- data/{UPGRADING.rdoc → UPGRADING.md} +31 -32
- data/appveyor.yml +20 -45
- data/bin/gem +1 -2
- data/bin/update_rubygems +2 -3
- data/bundler/CHANGELOG.md +65 -0
- data/bundler/bundler.gemspec +7 -1
- data/bundler/lib/bundler/build_metadata.rb +1 -1
- data/bundler/lib/bundler/cli/add.rb +15 -5
- data/bundler/lib/bundler/cli/binstubs.rb +8 -2
- data/bundler/lib/bundler/cli/doctor.rb +47 -1
- data/bundler/lib/bundler/cli/install.rb +8 -5
- data/bundler/lib/bundler/cli/list.rb +41 -5
- data/bundler/lib/bundler/cli/outdated.rb +7 -1
- data/bundler/lib/bundler/cli/pristine.rb +4 -0
- data/bundler/lib/bundler/cli/remove.rb +18 -0
- data/bundler/lib/bundler/cli.rb +63 -21
- data/bundler/lib/bundler/definition.rb +15 -16
- data/bundler/lib/bundler/dependency.rb +2 -2
- data/bundler/lib/bundler/dsl.rb +19 -3
- data/bundler/lib/bundler/feature_flag.rb +7 -0
- data/bundler/lib/bundler/gem_version_promoter.rb +4 -2
- data/bundler/lib/bundler/injector.rb +168 -9
- data/bundler/lib/bundler/installer/parallel_installer.rb +5 -0
- data/bundler/lib/bundler/installer.rb +29 -6
- data/bundler/lib/bundler/plugin/events.rb +61 -0
- data/bundler/lib/bundler/plugin.rb +10 -3
- data/bundler/lib/bundler/resolver.rb +2 -2
- data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
- data/bundler/lib/bundler/runtime.rb +8 -2
- data/bundler/lib/bundler/settings/validator.rb +23 -0
- data/bundler/lib/bundler/settings.rb +24 -3
- data/bundler/lib/bundler/shared_helpers.rb +19 -3
- data/bundler/lib/bundler/source/metadata.rb +2 -3
- data/bundler/lib/bundler/source.rb +9 -9
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +26 -8
- data/bundler/man/bundle-add.ronn +13 -2
- data/bundler/man/bundle-config.ronn +21 -0
- data/bundler/man/bundle-install.ronn +1 -1
- data/bundler/man/bundle-list.ronn +19 -1
- data/bundler/man/bundle-outdated.ronn +4 -0
- data/bundler/man/bundle-remove.ronn +23 -0
- data/bundler/man/bundle-update.ronn +1 -1
- data/bundler/man/bundle.ronn +3 -0
- data/lib/rubygems/available_set.rb +1 -1
- data/lib/rubygems/basic_specification.rb +12 -12
- data/lib/rubygems/bundler_version_finder.rb +3 -3
- data/lib/rubygems/command.rb +22 -15
- data/lib/rubygems/command_manager.rb +22 -5
- data/lib/rubygems/commands/build_command.rb +41 -7
- data/lib/rubygems/commands/cert_command.rb +45 -24
- data/lib/rubygems/commands/check_command.rb +1 -1
- data/lib/rubygems/commands/cleanup_command.rb +14 -7
- data/lib/rubygems/commands/contents_command.rb +14 -15
- data/lib/rubygems/commands/dependency_command.rb +17 -17
- data/lib/rubygems/commands/environment_command.rb +20 -1
- data/lib/rubygems/commands/fetch_command.rb +2 -3
- data/lib/rubygems/commands/generate_index_command.rb +2 -3
- data/lib/rubygems/commands/help_command.rb +12 -13
- data/lib/rubygems/commands/info_command.rb +33 -0
- data/lib/rubygems/commands/install_command.rb +21 -17
- data/lib/rubygems/commands/list_command.rb +0 -1
- data/lib/rubygems/commands/lock_command.rb +3 -4
- data/lib/rubygems/commands/open_command.rb +16 -10
- data/lib/rubygems/commands/owner_command.rb +21 -7
- data/lib/rubygems/commands/pristine_command.rb +23 -16
- data/lib/rubygems/commands/push_command.rb +19 -8
- data/lib/rubygems/commands/query_command.rb +24 -24
- data/lib/rubygems/commands/rdoc_command.rb +3 -4
- data/lib/rubygems/commands/search_command.rb +0 -1
- data/lib/rubygems/commands/server_command.rb +1 -2
- data/lib/rubygems/commands/setup_command.rb +86 -48
- data/lib/rubygems/commands/signin_command.rb +2 -1
- data/lib/rubygems/commands/signout_command.rb +2 -2
- data/lib/rubygems/commands/sources_command.rb +11 -12
- data/lib/rubygems/commands/specification_command.rb +7 -7
- data/lib/rubygems/commands/uninstall_command.rb +50 -18
- data/lib/rubygems/commands/unpack_command.rb +16 -7
- data/lib/rubygems/commands/update_command.rb +28 -23
- data/lib/rubygems/commands/which_command.rb +5 -8
- data/lib/rubygems/commands/yank_command.rb +1 -2
- data/lib/rubygems/compatibility.rb +1 -21
- data/lib/rubygems/config_file.rb +36 -36
- data/lib/rubygems/core_ext/kernel_require.rb +6 -6
- data/lib/rubygems/core_ext/kernel_warn.rb +45 -0
- data/lib/rubygems/defaults.rb +31 -19
- data/lib/rubygems/dependency.rb +15 -15
- data/lib/rubygems/dependency_installer.rb +30 -33
- data/lib/rubygems/dependency_list.rb +9 -10
- data/lib/rubygems/deprecate.rb +2 -3
- data/lib/rubygems/doctor.rb +5 -6
- data/lib/rubygems/errors.rb +3 -3
- data/lib/rubygems/exceptions.rb +11 -8
- data/lib/rubygems/ext/build_error.rb +0 -1
- data/lib/rubygems/ext/builder.rb +50 -23
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +2 -3
- data/lib/rubygems/ext/ext_conf_builder.rb +8 -7
- data/lib/rubygems/ext/rake_builder.rb +16 -18
- data/lib/rubygems/ext.rb +0 -1
- data/lib/rubygems/gem_runner.rb +2 -2
- data/lib/rubygems/gemcutter_utilities.rb +46 -12
- data/lib/rubygems/indexer.rb +19 -12
- data/lib/rubygems/install_default_message.rb +0 -1
- data/lib/rubygems/install_message.rb +0 -1
- data/lib/rubygems/install_update_options.rb +3 -29
- data/lib/rubygems/installer.rb +97 -55
- data/lib/rubygems/installer_test_case.rb +2 -16
- data/lib/rubygems/local_remote_options.rb +5 -4
- data/lib/rubygems/mock_gem_ui.rb +3 -4
- data/lib/rubygems/name_tuple.rb +4 -4
- data/lib/rubygems/package/digest_io.rb +3 -4
- data/lib/rubygems/package/file_source.rb +3 -4
- data/lib/rubygems/package/io_source.rb +1 -2
- data/lib/rubygems/package/old.rb +8 -16
- data/lib/rubygems/package/source.rb +0 -1
- data/lib/rubygems/package/tar_header.rb +13 -4
- data/lib/rubygems/package/tar_reader/entry.rb +20 -4
- data/lib/rubygems/package/tar_reader.rb +2 -4
- data/lib/rubygems/package/tar_test_case.rb +2 -8
- data/lib/rubygems/package/tar_writer.rb +13 -15
- data/lib/rubygems/package.rb +90 -63
- data/lib/rubygems/package_task.rb +0 -1
- data/lib/rubygems/path_support.rb +16 -6
- data/lib/rubygems/platform.rb +4 -5
- data/lib/rubygems/psych_tree.rb +1 -1
- data/lib/rubygems/rdoc.rb +2 -313
- data/lib/rubygems/remote_fetcher.rb +29 -82
- data/lib/rubygems/request/connection_pools.rb +24 -13
- data/lib/rubygems/request/http_pool.rb +3 -4
- data/lib/rubygems/request/https_pool.rb +1 -3
- data/lib/rubygems/request.rb +17 -16
- data/lib/rubygems/request_set/gem_dependency_api.rb +46 -49
- data/lib/rubygems/request_set/lockfile/parser.rb +18 -29
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +9 -9
- data/lib/rubygems/request_set/lockfile.rb +12 -12
- data/lib/rubygems/request_set.rb +52 -25
- data/lib/rubygems/requirement.rb +32 -21
- data/lib/rubygems/resolver/activation_request.rb +6 -6
- data/lib/rubygems/resolver/api_set.rb +5 -6
- data/lib/rubygems/resolver/api_specification.rb +2 -3
- data/lib/rubygems/resolver/best_set.rb +5 -6
- data/lib/rubygems/resolver/composed_set.rb +5 -6
- data/lib/rubygems/resolver/conflict.rb +5 -5
- data/lib/rubygems/resolver/current_set.rb +1 -2
- data/lib/rubygems/resolver/dependency_request.rb +4 -4
- data/lib/rubygems/resolver/git_set.rb +5 -6
- data/lib/rubygems/resolver/git_specification.rb +4 -5
- data/lib/rubygems/resolver/index_set.rb +5 -6
- data/lib/rubygems/resolver/index_specification.rb +3 -4
- data/lib/rubygems/resolver/installed_specification.rb +3 -4
- data/lib/rubygems/resolver/installer_set.rb +12 -12
- data/lib/rubygems/resolver/local_specification.rb +1 -2
- data/lib/rubygems/resolver/lock_set.rb +5 -6
- data/lib/rubygems/resolver/lock_specification.rb +7 -8
- data/lib/rubygems/resolver/requirement_list.rb +1 -1
- data/lib/rubygems/resolver/set.rb +2 -2
- data/lib/rubygems/resolver/source_set.rb +4 -5
- data/lib/rubygems/resolver/spec_specification.rb +1 -2
- data/lib/rubygems/resolver/specification.rb +10 -7
- data/lib/rubygems/resolver/stats.rb +1 -1
- data/lib/rubygems/resolver/vendor_set.rb +4 -5
- data/lib/rubygems/resolver/vendor_specification.rb +2 -3
- data/lib/rubygems/resolver.rb +14 -16
- data/lib/rubygems/s3_uri_signer.rb +183 -0
- data/lib/rubygems/safe_yaml.rb +18 -10
- data/lib/rubygems/security/policies.rb +1 -2
- data/lib/rubygems/security/policy.rb +25 -25
- data/lib/rubygems/security/signer.rb +72 -24
- data/lib/rubygems/security/trust_dir.rb +10 -10
- data/lib/rubygems/security.rb +21 -22
- data/lib/rubygems/security_option.rb +0 -1
- data/lib/rubygems/server.rb +21 -21
- data/lib/rubygems/source/git.rb +9 -10
- data/lib/rubygems/source/installed.rb +3 -4
- data/lib/rubygems/source/local.rb +7 -7
- data/lib/rubygems/source/lock.rb +4 -4
- data/lib/rubygems/source/specific_file.rb +5 -5
- data/lib/rubygems/source/vendor.rb +2 -3
- data/lib/rubygems/source.rb +16 -25
- data/lib/rubygems/source_list.rb +2 -2
- data/lib/rubygems/source_local.rb +0 -1
- data/lib/rubygems/spec_fetcher.rb +5 -6
- data/lib/rubygems/specification.rb +219 -558
- data/lib/rubygems/specification_policy.rb +407 -0
- data/lib/rubygems/stub_specification.rb +12 -17
- data/lib/rubygems/test_case.rb +161 -75
- data/lib/rubygems/test_utilities.rb +20 -35
- data/lib/rubygems/text.rb +6 -6
- data/lib/rubygems/uninstaller.rb +38 -27
- data/lib/rubygems/uri_formatter.rb +1 -2
- data/lib/rubygems/user_interaction.rb +37 -89
- data/lib/rubygems/util/licenses.rb +27 -1
- data/lib/rubygems/util/list.rb +1 -1
- data/lib/rubygems/util.rb +32 -14
- data/lib/rubygems/validator.rb +4 -5
- data/lib/rubygems/version.rb +15 -15
- data/lib/rubygems/version_option.rb +2 -3
- data/lib/rubygems.rb +71 -102
- data/rubygems-update.gemspec +43 -0
- data/setup.rb +2 -8
- data/test/rubygems/ca_cert.pem +74 -65
- data/test/rubygems/client.pem +103 -45
- data/test/rubygems/rubygems_plugin.rb +0 -1
- data/test/rubygems/simple_gem.rb +1 -1
- data/test/rubygems/ssl_cert.pem +78 -17
- data/test/rubygems/ssl_key.pem +25 -13
- data/test/rubygems/test_bundled_ca.rb +1 -1
- data/test/rubygems/test_config.rb +7 -2
- data/test/rubygems/test_gem.rb +205 -132
- data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
- data/test/rubygems/test_gem_command.rb +0 -1
- data/test/rubygems/test_gem_command_manager.rb +18 -3
- data/test/rubygems/test_gem_commands_build_command.rb +220 -15
- data/test/rubygems/test_gem_commands_cert_command.rb +69 -8
- data/test/rubygems/test_gem_commands_check_command.rb +1 -1
- data/test/rubygems/test_gem_commands_cleanup_command.rb +27 -1
- data/test/rubygems/test_gem_commands_contents_command.rb +1 -2
- data/test/rubygems/test_gem_commands_dependency_command.rb +33 -34
- data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -1
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -1
- data/test/rubygems/test_gem_commands_help_command.rb +7 -4
- data/test/rubygems/test_gem_commands_info_command.rb +44 -0
- data/test/rubygems/test_gem_commands_install_command.rb +79 -12
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -1
- data/test/rubygems/test_gem_commands_open_command.rb +29 -0
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -1
- data/test/rubygems/test_gem_commands_owner_command.rb +93 -57
- data/test/rubygems/test_gem_commands_pristine_command.rb +65 -30
- data/test/rubygems/test_gem_commands_push_command.rb +54 -0
- data/test/rubygems/test_gem_commands_query_command.rb +102 -100
- data/test/rubygems/test_gem_commands_search_command.rb +0 -1
- data/test/rubygems/test_gem_commands_server_command.rb +0 -1
- data/test/rubygems/test_gem_commands_setup_command.rb +50 -15
- data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -1
- data/test/rubygems/test_gem_commands_specification_command.rb +2 -3
- data/test/rubygems/test_gem_commands_stale_command.rb +3 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +161 -8
- data/test/rubygems/test_gem_commands_unpack_command.rb +17 -1
- data/test/rubygems/test_gem_commands_update_command.rb +19 -2
- data/test/rubygems/test_gem_commands_which_command.rb +0 -1
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -1
- data/test/rubygems/test_gem_config_file.rb +4 -2
- data/test/rubygems/test_gem_dependency.rb +0 -1
- data/test/rubygems/test_gem_dependency_installer.rb +8 -5
- data/test/rubygems/test_gem_dependency_list.rb +6 -7
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -1
- data/test/rubygems/test_gem_doctor.rb +1 -2
- data/test/rubygems/test_gem_ext_builder.rb +10 -23
- data/test/rubygems/test_gem_ext_cmake_builder.rb +5 -4
- data/test/rubygems/test_gem_ext_configure_builder.rb +3 -3
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +8 -9
- data/test/rubygems/test_gem_ext_rake_builder.rb +20 -5
- data/test/rubygems/test_gem_gem_runner.rb +0 -1
- data/test/rubygems/test_gem_gemcutter_utilities.rb +32 -6
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -1
- data/test/rubygems/test_gem_indexer.rb +16 -10
- data/test/rubygems/test_gem_install_update_options.rb +1 -20
- data/test/rubygems/test_gem_installer.rb +154 -119
- data/test/rubygems/test_gem_local_remote_options.rb +3 -3
- data/test/rubygems/test_gem_name_tuple.rb +0 -1
- data/test/rubygems/test_gem_package.rb +77 -31
- data/test/rubygems/test_gem_package_old.rb +0 -1
- data/test/rubygems/test_gem_package_tar_header.rb +42 -2
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -1
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +11 -0
- data/test/rubygems/test_gem_package_tar_writer.rb +43 -7
- data/test/rubygems/test_gem_package_task.rb +2 -2
- data/test/rubygems/test_gem_path_support.rb +28 -11
- data/test/rubygems/test_gem_platform.rb +4 -5
- data/test/rubygems/test_gem_rdoc.rb +1 -136
- data/test/rubygems/test_gem_remote_fetcher.rb +241 -141
- data/test/rubygems/test_gem_request.rb +9 -9
- data/test/rubygems/test_gem_request_connection_pools.rb +24 -3
- data/test/rubygems/test_gem_request_set.rb +5 -5
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +82 -64
- data/test/rubygems/test_gem_request_set_lockfile.rb +1 -2
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +4 -9
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
- data/test/rubygems/test_gem_requirement.rb +24 -4
- data/test/rubygems/test_gem_resolver.rb +13 -17
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -1
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -1
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -1
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_installer_set.rb +2 -3
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -1
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -1
- data/test/rubygems/test_gem_resolver_specification.rb +1 -2
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -1
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -1
- data/test/rubygems/test_gem_security.rb +1 -3
- data/test/rubygems/test_gem_security_policy.rb +5 -6
- data/test/rubygems/test_gem_security_signer.rb +4 -3
- data/test/rubygems/test_gem_security_trust_dir.rb +1 -2
- data/test/rubygems/test_gem_server.rb +4 -4
- data/test/rubygems/test_gem_source.rb +0 -13
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
- data/test/rubygems/test_gem_source_git.rb +0 -1
- data/test/rubygems/test_gem_source_installed.rb +0 -1
- data/test/rubygems/test_gem_source_lock.rb +0 -1
- data/test/rubygems/test_gem_source_vendor.rb +0 -1
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -1
- data/test/rubygems/test_gem_specification.rb +366 -198
- data/test/rubygems/test_gem_stream_ui.rb +15 -32
- data/test/rubygems/test_gem_stub_specification.rb +0 -2
- data/test/rubygems/test_gem_text.rb +4 -0
- data/test/rubygems/test_gem_uninstaller.rb +42 -3
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -1
- data/test/rubygems/test_gem_uri_formatter.rb +0 -1
- data/test/rubygems/test_gem_util.rb +31 -11
- data/test/rubygems/test_gem_validator.rb +0 -1
- data/test/rubygems/test_gem_version.rb +11 -11
- data/test/rubygems/test_gem_version_option.rb +0 -1
- data/test/rubygems/test_remote_fetch_error.rb +0 -1
- data/test/rubygems/test_require.rb +67 -52
- data/util/CL2notes +1 -2
- data/util/ci +20 -12
- data/util/cops/deprecations.rb +52 -0
- data/util/create_certs.rb +6 -7
- data/util/create_certs.sh +27 -0
- data/util/create_encrypted_key.rb +4 -5
- data/util/patch_with_prs.rb +1 -1
- data/util/rubocop +8 -0
- data/util/update_bundled_ca_certificates.rb +12 -13
- data/util/update_changelog.rb +1 -1
- metadata +61 -51
- data/.autotest +0 -71
- data/.document +0 -5
- data/CONTRIBUTING.rdoc +0 -130
- data/CVE-2013-4287.txt +0 -35
- data/CVE-2013-4363.txt +0 -45
- data/CVE-2015-3900.txt +0 -40
- data/POLICIES.rdoc +0 -74
- data/test/rubygems/fix_openssl_warnings.rb +0 -13
@@ -94,7 +94,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
94
94
|
}
|
95
95
|
}
|
96
96
|
|
97
|
-
if defined?(OpenSSL::Digest)
|
97
|
+
if defined?(OpenSSL::Digest)
|
98
98
|
expected['SHA256'] = {
|
99
99
|
'metadata.gz' => metadata_sha256,
|
100
100
|
'data.tar.gz' => Digest::SHA256.hexdigest(tar),
|
@@ -104,6 +104,25 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
104
104
|
assert_equal expected, YAML.load(checksums)
|
105
105
|
end
|
106
106
|
|
107
|
+
def test_build_time_source_date_epoch
|
108
|
+
epoch = ENV["SOURCE_DATE_EPOCH"]
|
109
|
+
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
110
|
+
|
111
|
+
spec = Gem::Specification.new 'build', '1'
|
112
|
+
spec.summary = 'build'
|
113
|
+
spec.authors = 'build'
|
114
|
+
spec.files = ['lib/code.rb']
|
115
|
+
spec.date = Time.at 0
|
116
|
+
spec.rubygems_version = Gem::Version.new '0'
|
117
|
+
|
118
|
+
|
119
|
+
package = Gem::Package.new spec.file_name
|
120
|
+
|
121
|
+
assert_equal Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc, package.build_time
|
122
|
+
ensure
|
123
|
+
ENV["SOURCE_DATE_EPOCH"] = epoch
|
124
|
+
end
|
125
|
+
|
107
126
|
def test_add_files
|
108
127
|
spec = Gem::Specification.new
|
109
128
|
spec.files = %w[lib/code.rb lib/empty]
|
@@ -134,16 +153,23 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
134
153
|
end
|
135
154
|
|
136
155
|
def test_add_files_symlink
|
137
|
-
skip 'symlink not supported' if Gem.win_platform?
|
138
|
-
|
139
156
|
spec = Gem::Specification.new
|
140
|
-
spec.files = %w[lib/code.rb lib/code_sym.rb]
|
157
|
+
spec.files = %w[lib/code.rb lib/code_sym.rb lib/code_sym2.rb]
|
141
158
|
|
142
159
|
FileUtils.mkdir_p 'lib'
|
143
160
|
File.open 'lib/code.rb', 'w' do |io| io.write '# lib/code.rb' end
|
144
161
|
|
145
162
|
# NOTE: 'code.rb' is correct, because it's relative to lib/code_sym.rb
|
146
|
-
|
163
|
+
begin
|
164
|
+
File.symlink('code.rb', 'lib/code_sym.rb')
|
165
|
+
File.symlink('../lib/code.rb', 'lib/code_sym2.rb')
|
166
|
+
rescue Errno::EACCES => e
|
167
|
+
if win_platform?
|
168
|
+
skip "symlink - must be admin with no UAC on Windows"
|
169
|
+
else
|
170
|
+
raise e
|
171
|
+
end
|
172
|
+
end
|
147
173
|
|
148
174
|
package = Gem::Package.new 'bogus.gem'
|
149
175
|
package.spec = spec
|
@@ -167,7 +193,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
167
193
|
end
|
168
194
|
|
169
195
|
assert_equal %w[lib/code.rb], files
|
170
|
-
assert_equal [{'lib/code_sym.rb' => 'lib/code.rb'}], symlinks
|
196
|
+
assert_equal [{'lib/code_sym.rb' => 'lib/code.rb'}, {'lib/code_sym2.rb' => '../lib/code.rb'}], symlinks
|
171
197
|
end
|
172
198
|
|
173
199
|
def test_build
|
@@ -299,6 +325,19 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
299
325
|
assert_equal 'missing value for attribute summary', e.message
|
300
326
|
end
|
301
327
|
|
328
|
+
def test_build_invalid_arguments
|
329
|
+
spec = Gem::Specification.new 'build', '1'
|
330
|
+
|
331
|
+
package = Gem::Package.new spec.file_name
|
332
|
+
package.spec = spec
|
333
|
+
|
334
|
+
e = assert_raises ArgumentError do
|
335
|
+
package.build true, true
|
336
|
+
end
|
337
|
+
|
338
|
+
assert_equal "skip_validation = true and strict_validation = true are incompatible", e.message
|
339
|
+
end
|
340
|
+
|
302
341
|
def test_build_signed
|
303
342
|
skip 'openssl is missing' unless defined?(OpenSSL::SSL)
|
304
343
|
|
@@ -435,8 +474,6 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
435
474
|
end
|
436
475
|
|
437
476
|
def test_extract_tar_gz_symlink_relative_path
|
438
|
-
skip 'symlink not supported' if Gem.win_platform?
|
439
|
-
|
440
477
|
package = Gem::Package.new @gem
|
441
478
|
|
442
479
|
tgz_io = util_tar_gz do |tar|
|
@@ -445,7 +482,15 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
445
482
|
tar.add_symlink 'lib/foo.rb', '../relative.rb', 0644
|
446
483
|
end
|
447
484
|
|
448
|
-
|
485
|
+
begin
|
486
|
+
package.extract_tar_gz tgz_io, @destination
|
487
|
+
rescue Errno::EACCES => e
|
488
|
+
if win_platform?
|
489
|
+
skip "symlink - must be admin with no UAC on Windows"
|
490
|
+
else
|
491
|
+
raise e
|
492
|
+
end
|
493
|
+
end
|
449
494
|
|
450
495
|
extracted = File.join @destination, 'lib/foo.rb'
|
451
496
|
assert_path_exists extracted
|
@@ -456,33 +501,35 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
456
501
|
end
|
457
502
|
|
458
503
|
def test_extract_symlink_parent
|
459
|
-
|
460
|
-
|
461
|
-
package = Gem::Package.new @gem
|
504
|
+
package = Gem::Package.new @gem
|
462
505
|
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
506
|
+
tgz_io = util_tar_gz do |tar|
|
507
|
+
tar.mkdir 'lib', 0755
|
508
|
+
tar.add_symlink 'lib/link', '../..', 0644
|
509
|
+
tar.add_file 'lib/link/outside.txt', 0644 do |io| io.write 'hi' end
|
510
|
+
end
|
468
511
|
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
512
|
+
# Extract into a subdirectory of @destination; if this test fails it writes
|
513
|
+
# a file outside destination_subdir, but we want the file to remain inside
|
514
|
+
# @destination so it will be cleaned up.
|
515
|
+
destination_subdir = File.join @destination, 'subdir'
|
516
|
+
FileUtils.mkdir_p destination_subdir
|
474
517
|
|
475
|
-
|
476
|
-
|
477
|
-
|
518
|
+
e = assert_raises(Gem::Package::PathError, Errno::EACCES) do
|
519
|
+
package.extract_tar_gz tgz_io, destination_subdir
|
520
|
+
end
|
478
521
|
|
479
|
-
|
480
|
-
|
522
|
+
if Gem::Package::PathError === e
|
523
|
+
assert_equal("installing into parent path lib/link/outside.txt of " +
|
524
|
+
"#{destination_subdir} is not allowed", e.message)
|
525
|
+
elsif win_platform?
|
526
|
+
skip "symlink - must be admin with no UAC on Windows"
|
527
|
+
else
|
528
|
+
raise e
|
529
|
+
end
|
481
530
|
end
|
482
531
|
|
483
532
|
def test_extract_symlink_parent_doesnt_delete_user_dir
|
484
|
-
skip if RUBY_VERSION <= "1.8.7"
|
485
|
-
|
486
533
|
package = Gem::Package.new @gem
|
487
534
|
|
488
535
|
# Extract into a subdirectory of @destination; if this test fails it writes
|
@@ -615,7 +662,6 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
615
662
|
end
|
616
663
|
|
617
664
|
def test_install_location_extra_slash
|
618
|
-
skip 'no File.realpath on 1.8' if RUBY_VERSION < '1.9'
|
619
665
|
package = Gem::Package.new @gem
|
620
666
|
|
621
667
|
file = 'foo//file.rb'.dup
|
@@ -788,7 +834,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
788
834
|
e.message
|
789
835
|
io
|
790
836
|
end
|
791
|
-
tf.close!
|
837
|
+
tf.close!
|
792
838
|
end
|
793
839
|
|
794
840
|
def test_verify_empty
|
@@ -160,9 +160,49 @@ group\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
|
|
160
160
|
assert_raises ArgumentError do
|
161
161
|
Gem::Package::TarHeader.from io
|
162
162
|
end
|
163
|
-
io.close!
|
163
|
+
io.close!
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
-
|
167
|
+
def test_big_uid_gid
|
168
|
+
stream = StringIO.new(
|
169
|
+
<<-EOF.dup.force_encoding('binary').split("\n").join
|
170
|
+
GeoIP2-City_20190528/
|
171
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
172
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
173
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
174
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x000000755\x00\x80\x00
|
175
|
+
\x00\x00v\xB2Z\x9E\x80\x00\x00\x00v\xB2Z\x9E00000000000\x0013473270100\x00015424
|
176
|
+
\x00 5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
177
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
178
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
179
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
180
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ustar \x00
|
181
|
+
tjmather\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
182
|
+
\x00\x00\x00\x00\x00tjmather\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
183
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
184
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
185
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
186
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
187
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
188
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
189
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
190
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
191
|
+
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
|
192
|
+
\x00\x00\x00\x00
|
193
|
+
EOF
|
194
|
+
)
|
195
|
+
|
196
|
+
tar_header = Gem::Package::TarHeader.from stream
|
197
|
+
|
198
|
+
assert_equal 1991400094, tar_header.uid
|
199
|
+
assert_equal 1991400094, tar_header.gid
|
200
|
+
|
201
|
+
assert_equal 'GeoIP2-City_20190528/', tar_header.name
|
202
|
+
assert_equal 0755, tar_header.mode
|
203
|
+
assert_equal 0, tar_header.size
|
204
|
+
assert_equal 1559064640, tar_header.mtime
|
205
|
+
assert_equal 6932, tar_header.checksum
|
206
|
+
end
|
168
207
|
|
208
|
+
end
|
@@ -34,6 +34,10 @@ class TestGemPackageTarReaderEntry < Gem::Package::TarTestCase
|
|
34
34
|
assert_equal 1, @entry.bytes_read
|
35
35
|
end
|
36
36
|
|
37
|
+
def test_size
|
38
|
+
assert_equal @contents.size, @entry.size
|
39
|
+
end
|
40
|
+
|
37
41
|
def test_close
|
38
42
|
@entry.close
|
39
43
|
|
@@ -129,6 +133,13 @@ class TestGemPackageTarReaderEntry < Gem::Package::TarTestCase
|
|
129
133
|
assert_equal @contents[0...100], @entry.read(100)
|
130
134
|
end
|
131
135
|
|
136
|
+
def test_readpartial
|
137
|
+
assert_raises(EOFError) do
|
138
|
+
@entry.read(@contents.size)
|
139
|
+
@entry.readpartial(1)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
132
143
|
def test_rewind
|
133
144
|
char = @entry.getc
|
134
145
|
|
@@ -11,9 +11,12 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|
11
11
|
@data = 'abcde12345'
|
12
12
|
@io = TempIO.new
|
13
13
|
@tar_writer = Gem::Package::TarWriter.new @io
|
14
|
+
@epoch = ENV["SOURCE_DATE_EPOCH"]
|
15
|
+
ENV["SOURCE_DATE_EPOCH"] = nil
|
14
16
|
end
|
15
17
|
|
16
18
|
def teardown
|
19
|
+
ENV["SOURCE_DATE_EPOCH"] = @epoch
|
17
20
|
@tar_writer.close unless @tar_writer.closed?
|
18
21
|
@io.close!
|
19
22
|
|
@@ -31,6 +34,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|
31
34
|
assert_equal 1024, @io.pos
|
32
35
|
end
|
33
36
|
|
37
|
+
def test_add_file_source_date_epoch
|
38
|
+
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
39
|
+
Time.stub :now, Time.at(1458518157) do
|
40
|
+
@tar_writer.mkdir 'foo', 0644
|
41
|
+
|
42
|
+
assert_headers_equal tar_dir_header('foo', '', 0644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
|
43
|
+
@io.string[0, 512]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
34
47
|
def test_add_symlink
|
35
48
|
Time.stub :now, Time.at(1458518157) do
|
36
49
|
@tar_writer.add_symlink 'x', 'y', 0644
|
@@ -41,6 +54,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|
41
54
|
assert_equal 512, @io.pos
|
42
55
|
end
|
43
56
|
|
57
|
+
def test_add_symlink_source_date_epoch
|
58
|
+
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
59
|
+
Time.stub :now, Time.at(1458518157) do
|
60
|
+
@tar_writer.add_symlink 'x', 'y', 0644
|
61
|
+
|
62
|
+
assert_headers_equal(tar_symlink_header('x', '', 0644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc, 'y'),
|
63
|
+
@io.string[0, 512])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
44
67
|
def test_add_file_digest
|
45
68
|
digest_algorithms = Digest::SHA1, Digest::SHA512
|
46
69
|
|
@@ -116,7 +139,6 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|
116
139
|
|
117
140
|
assert_equal 2048, @io.pos
|
118
141
|
end
|
119
|
-
|
120
142
|
end
|
121
143
|
|
122
144
|
def test_add_file_signer_empty
|
@@ -148,6 +170,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|
148
170
|
assert_equal 1024, @io.pos
|
149
171
|
end
|
150
172
|
|
173
|
+
def test_add_file_simple_source_date_epoch
|
174
|
+
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
175
|
+
Time.stub :now, Time.at(1458518157) do
|
176
|
+
@tar_writer.add_file_simple 'x', 0644, 10 do |io| io.write "a" * 10 end
|
177
|
+
|
178
|
+
assert_headers_equal(tar_file_header('x', '', 0644, 10, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
|
179
|
+
@io.string[0, 512])
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
151
183
|
def test_add_file_simple_padding
|
152
184
|
Time.stub :now, Time.at(1458518157) do
|
153
185
|
@tar_writer.add_file_simple 'x', 0, 100
|
@@ -175,12 +207,6 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|
175
207
|
end
|
176
208
|
end
|
177
209
|
|
178
|
-
def test_add_file_unseekable
|
179
|
-
assert_raises Gem::Package::NonSeekableIO do
|
180
|
-
Gem::Package::TarWriter.new(Object.new).add_file 'x', 0
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
210
|
def test_close
|
185
211
|
@tar_writer.close
|
186
212
|
|
@@ -223,6 +249,16 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
|
|
223
249
|
end
|
224
250
|
end
|
225
251
|
|
252
|
+
def test_mkdir_source_date_epoch
|
253
|
+
ENV["SOURCE_DATE_EPOCH"] = "123456789"
|
254
|
+
Time.stub :now, Time.at(1458518157) do
|
255
|
+
@tar_writer.mkdir 'foo', 0644
|
256
|
+
|
257
|
+
assert_headers_equal tar_dir_header('foo', '', 0644, Time.at(ENV["SOURCE_DATE_EPOCH"].to_i).utc),
|
258
|
+
@io.string[0, 512]
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
226
262
|
def test_split_name
|
227
263
|
assert_equal ['b' * 100, 'a' * 155],
|
228
264
|
@tar_writer.split_name("#{'a' * 155}/#{'b' * 100}")
|
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'rubygems/test_case'
|
3
3
|
require 'rubygems'
|
4
|
+
require 'bundler/errors'
|
4
5
|
begin
|
5
6
|
require 'rubygems/package_task'
|
6
|
-
rescue LoadError
|
7
|
+
rescue LoadError, Bundler::GemfileNotFound
|
7
8
|
end
|
8
9
|
|
9
10
|
class TestGemPackageTask < Gem::TestCase
|
@@ -81,4 +82,3 @@ class TestGemPackageTask < Gem::TestCase
|
|
81
82
|
end
|
82
83
|
|
83
84
|
end if defined?(Rake::PackageTask)
|
84
|
-
|
@@ -29,7 +29,7 @@ class TestGemPathSupport < Gem::TestCase
|
|
29
29
|
assert_equal expected, ps.path
|
30
30
|
end
|
31
31
|
|
32
|
-
if
|
32
|
+
if File::ALT_SEPARATOR
|
33
33
|
def test_initialize_home_normalize
|
34
34
|
alternate = @tempdir.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
|
35
35
|
ps = Gem::PathSupport.new "GEM_HOME" => alternate
|
@@ -44,10 +44,10 @@ class TestGemPathSupport < Gem::TestCase
|
|
44
44
|
assert_equal ENV["GEM_HOME"], ps.home
|
45
45
|
|
46
46
|
expected = [
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
File.join(@tempdir, 'foo'),
|
48
|
+
File.join(@tempdir, 'bar'),
|
49
|
+
ENV["GEM_HOME"],
|
50
|
+
]
|
51
51
|
|
52
52
|
assert_equal expected, ps.path
|
53
53
|
end
|
@@ -63,9 +63,9 @@ class TestGemPathSupport < Gem::TestCase
|
|
63
63
|
assert_equal ENV["GEM_HOME"], ps.home
|
64
64
|
|
65
65
|
expected = [
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
File.join(@tempdir, 'foo'),
|
67
|
+
File.join(@tempdir, 'bar'),
|
68
|
+
] + Gem.default_path << ENV["GEM_HOME"]
|
69
69
|
|
70
70
|
assert_equal expected, ps.path
|
71
71
|
end
|
@@ -81,9 +81,9 @@ class TestGemPathSupport < Gem::TestCase
|
|
81
81
|
assert_equal ENV["GEM_HOME"], ps.home
|
82
82
|
|
83
83
|
expected = [
|
84
|
-
|
85
|
-
|
86
|
-
|
84
|
+
File.join(@tempdir, 'foo'),
|
85
|
+
File.join(@tempdir, 'bar'),
|
86
|
+
] + Gem.default_path << ENV["GEM_HOME"]
|
87
87
|
|
88
88
|
assert_equal expected, ps.path
|
89
89
|
end
|
@@ -118,4 +118,21 @@ class TestGemPathSupport < Gem::TestCase
|
|
118
118
|
ps = Gem::PathSupport.new "GEM_SPEC_CACHE" => "foo"
|
119
119
|
assert_equal "foo", ps.spec_cache_dir
|
120
120
|
end
|
121
|
+
|
122
|
+
def test_gem_paths_do_not_contain_symlinks
|
123
|
+
dir = "#{@tempdir}/realgemdir"
|
124
|
+
symlink = "#{@tempdir}/symdir"
|
125
|
+
Dir.mkdir dir
|
126
|
+
begin
|
127
|
+
File.symlink(dir, symlink)
|
128
|
+
rescue NotImplementedError, SystemCallError
|
129
|
+
skip 'symlinks not supported'
|
130
|
+
end
|
131
|
+
not_existing = "#{@tempdir}/does_not_exist"
|
132
|
+
path = "#{symlink}#{File::PATH_SEPARATOR}#{not_existing}"
|
133
|
+
|
134
|
+
ps = Gem::PathSupport.new "GEM_PATH" => path, "GEM_HOME" => symlink
|
135
|
+
assert_equal dir, ps.home
|
136
|
+
assert_equal [dir, not_existing], ps.path
|
137
|
+
end
|
121
138
|
end
|
@@ -117,7 +117,7 @@ class TestGemPlatform < Gem::TestCase
|
|
117
117
|
|
118
118
|
assert_equal expected, platform.to_a, 'i386-mswin32 VC6'
|
119
119
|
ensure
|
120
|
-
if orig_RUBY_SO_NAME
|
120
|
+
if orig_RUBY_SO_NAME
|
121
121
|
RbConfig::CONFIG['RUBY_SO_NAME'] = orig_RUBY_SO_NAME
|
122
122
|
else
|
123
123
|
RbConfig::CONFIG.delete 'RUBY_SO_NAME'
|
@@ -145,7 +145,7 @@ class TestGemPlatform < Gem::TestCase
|
|
145
145
|
end
|
146
146
|
|
147
147
|
def test_to_s
|
148
|
-
if win_platform?
|
148
|
+
if win_platform?
|
149
149
|
assert_equal 'x86-mswin32-60', Gem::Platform.local.to_s
|
150
150
|
else
|
151
151
|
assert_equal 'x86-darwin-8', Gem::Platform.local.to_s
|
@@ -297,12 +297,11 @@ class TestGemPlatform < Gem::TestCase
|
|
297
297
|
assert_local_match 'sparc-solaris2.8-mq5.3'
|
298
298
|
end
|
299
299
|
|
300
|
-
def assert_local_match
|
300
|
+
def assert_local_match(name)
|
301
301
|
assert_match Gem::Platform.local, name
|
302
302
|
end
|
303
303
|
|
304
|
-
def refute_local_match
|
304
|
+
def refute_local_match(name)
|
305
305
|
refute_match Gem::Platform.local, name
|
306
306
|
end
|
307
307
|
end
|
308
|
-
|
@@ -5,7 +5,6 @@ require 'rubygems/rdoc'
|
|
5
5
|
|
6
6
|
class TestGemRDoc < Gem::TestCase
|
7
7
|
Gem::RDoc.load_rdoc
|
8
|
-
rdoc_4 = Gem::Requirement.new('> 3').satisfied_by?(Gem::RDoc.rdoc_version)
|
9
8
|
|
10
9
|
def setup
|
11
10
|
super
|
@@ -31,29 +30,8 @@ class TestGemRDoc < Gem::TestCase
|
|
31
30
|
Gem.configuration[:rdoc] = nil
|
32
31
|
end
|
33
32
|
|
34
|
-
##
|
35
|
-
# RDoc 4 ships with its own Gem::RDoc which overrides this one which is
|
36
|
-
# shipped for backwards compatibility.
|
37
|
-
|
38
|
-
def rdoc_4?
|
39
|
-
Gem::Requirement.new('>= 4.0.0.preview2').satisfied_by? \
|
40
|
-
@hook.class.rdoc_version
|
41
|
-
end
|
42
|
-
|
43
|
-
def rdoc_3?
|
44
|
-
Gem::Requirement.new('~> 3.0').satisfied_by? @hook.class.rdoc_version
|
45
|
-
end
|
46
|
-
|
47
|
-
def rdoc_3_8_or_better?
|
48
|
-
Gem::Requirement.new('>= 3.8').satisfied_by? @hook.class.rdoc_version
|
49
|
-
end
|
50
|
-
|
51
33
|
def test_initialize
|
52
|
-
|
53
|
-
refute @hook.generate_rdoc
|
54
|
-
else
|
55
|
-
assert @hook.generate_rdoc
|
56
|
-
end
|
34
|
+
refute @hook.generate_rdoc
|
57
35
|
assert @hook.generate_ri
|
58
36
|
|
59
37
|
rdoc = Gem::RDoc.new @a, false, false
|
@@ -75,67 +53,6 @@ class TestGemRDoc < Gem::TestCase
|
|
75
53
|
assert_empty args
|
76
54
|
end
|
77
55
|
|
78
|
-
def test_document
|
79
|
-
skip 'RDoc 3 required' unless rdoc_3?
|
80
|
-
|
81
|
-
options = RDoc::Options.new
|
82
|
-
options.files = []
|
83
|
-
|
84
|
-
rdoc = @hook.new_rdoc
|
85
|
-
@hook.instance_variable_set :@rdoc, rdoc
|
86
|
-
@hook.instance_variable_set :@file_info, []
|
87
|
-
|
88
|
-
@hook.document 'darkfish', options, @a.doc_dir('rdoc')
|
89
|
-
|
90
|
-
assert @hook.rdoc_installed?
|
91
|
-
end unless rdoc_4
|
92
|
-
|
93
|
-
def test_generate
|
94
|
-
skip 'RDoc 3 required' unless rdoc_3?
|
95
|
-
|
96
|
-
FileUtils.mkdir_p @a.doc_dir
|
97
|
-
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
|
98
|
-
|
99
|
-
@hook.generate
|
100
|
-
|
101
|
-
assert @hook.rdoc_installed?
|
102
|
-
assert @hook.ri_installed?
|
103
|
-
|
104
|
-
rdoc = @hook.instance_variable_get :@rdoc
|
105
|
-
|
106
|
-
refute rdoc.options.hyperlink_all
|
107
|
-
end unless rdoc_4
|
108
|
-
|
109
|
-
def test_generate_configuration_rdoc_array
|
110
|
-
skip 'RDoc 3 required' unless rdoc_3?
|
111
|
-
|
112
|
-
Gem.configuration[:rdoc] = %w[-A]
|
113
|
-
|
114
|
-
FileUtils.mkdir_p @a.doc_dir
|
115
|
-
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
|
116
|
-
|
117
|
-
@hook.generate
|
118
|
-
|
119
|
-
rdoc = @hook.instance_variable_get :@rdoc
|
120
|
-
|
121
|
-
assert rdoc.options.hyperlink_all
|
122
|
-
end unless rdoc_4
|
123
|
-
|
124
|
-
def test_generate_configuration_rdoc_string
|
125
|
-
skip 'RDoc 3 required' unless rdoc_3?
|
126
|
-
|
127
|
-
Gem.configuration[:rdoc] = '-A'
|
128
|
-
|
129
|
-
FileUtils.mkdir_p @a.doc_dir
|
130
|
-
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
|
131
|
-
|
132
|
-
@hook.generate
|
133
|
-
|
134
|
-
rdoc = @hook.instance_variable_get :@rdoc
|
135
|
-
|
136
|
-
assert rdoc.options.hyperlink_all
|
137
|
-
end unless rdoc_4
|
138
|
-
|
139
56
|
def test_generate_disabled
|
140
57
|
@hook.generate_rdoc = false
|
141
58
|
@hook.generate_ri = false
|
@@ -146,57 +63,6 @@ class TestGemRDoc < Gem::TestCase
|
|
146
63
|
refute @hook.ri_installed?
|
147
64
|
end
|
148
65
|
|
149
|
-
def test_generate_force
|
150
|
-
skip 'RDoc 3 required' unless rdoc_3?
|
151
|
-
|
152
|
-
FileUtils.mkdir_p @a.doc_dir 'ri'
|
153
|
-
FileUtils.mkdir_p @a.doc_dir 'rdoc'
|
154
|
-
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
|
155
|
-
|
156
|
-
@hook.force = true
|
157
|
-
|
158
|
-
@hook.generate
|
159
|
-
|
160
|
-
assert_path_exists File.join(@a.doc_dir('rdoc'), 'index.html')
|
161
|
-
assert_path_exists File.join(@a.doc_dir('ri'), 'cache.ri')
|
162
|
-
end unless rdoc_4
|
163
|
-
|
164
|
-
def test_generate_no_overwrite
|
165
|
-
skip 'RDoc 3 required' unless rdoc_3?
|
166
|
-
|
167
|
-
FileUtils.mkdir_p @a.doc_dir 'ri'
|
168
|
-
FileUtils.mkdir_p @a.doc_dir 'rdoc'
|
169
|
-
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
|
170
|
-
|
171
|
-
@hook.generate
|
172
|
-
|
173
|
-
refute_path_exists File.join(@a.doc_dir('rdoc'), 'index.html')
|
174
|
-
refute_path_exists File.join(@a.doc_dir('ri'), 'cache.ri')
|
175
|
-
end unless rdoc_4
|
176
|
-
|
177
|
-
def test_generate_legacy
|
178
|
-
skip 'RDoc < 3.8 required' if rdoc_3_8_or_better?
|
179
|
-
|
180
|
-
FileUtils.mkdir_p @a.doc_dir
|
181
|
-
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
|
182
|
-
|
183
|
-
@hook.generate_legacy
|
184
|
-
|
185
|
-
assert @hook.rdoc_installed?
|
186
|
-
assert @hook.ri_installed?
|
187
|
-
end unless rdoc_4
|
188
|
-
|
189
|
-
def test_legacy_rdoc
|
190
|
-
skip 'RDoc < 3.8 required' if rdoc_3_8_or_better?
|
191
|
-
|
192
|
-
FileUtils.mkdir_p @a.doc_dir
|
193
|
-
FileUtils.mkdir_p File.join(@a.gem_dir, 'lib')
|
194
|
-
|
195
|
-
@hook.legacy_rdoc '--op', @a.doc_dir('rdoc')
|
196
|
-
|
197
|
-
assert @hook.rdoc_installed?
|
198
|
-
end unless rdoc_4
|
199
|
-
|
200
66
|
def test_new_rdoc
|
201
67
|
assert_kind_of RDoc::RDoc, @hook.new_rdoc
|
202
68
|
end
|
@@ -269,4 +135,3 @@ class TestGemRDoc < Gem::TestCase
|
|
269
135
|
end
|
270
136
|
|
271
137
|
end
|
272
|
-
|