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
@@ -4,7 +4,7 @@ require 'rubygems'
|
|
4
4
|
|
5
5
|
class TestGemRequire < Gem::TestCase
|
6
6
|
class Latch
|
7
|
-
def initialize
|
7
|
+
def initialize(count = 1)
|
8
8
|
@count = count
|
9
9
|
@lock = Monitor.new
|
10
10
|
@cv = @lock.new_cond
|
@@ -40,10 +40,10 @@ class TestGemRequire < Gem::TestCase
|
|
40
40
|
|
41
41
|
# Providing -I on the commandline should always beat gems
|
42
42
|
def test_dash_i_beats_gems
|
43
|
-
a1 =
|
44
|
-
b1 =
|
45
|
-
c1 =
|
46
|
-
c2 =
|
43
|
+
a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
44
|
+
b1 = util_spec "b", "1", {"c" => "> 0"}, "lib/b/c.rb"
|
45
|
+
c1 = util_spec "c", "1", nil, "lib/c/c.rb"
|
46
|
+
c2 = util_spec "c", "2", nil, "lib/c/c.rb"
|
47
47
|
|
48
48
|
install_specs c1, c2, b1, a1
|
49
49
|
|
@@ -80,13 +80,11 @@ class TestGemRequire < Gem::TestCase
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def test_concurrent_require
|
83
|
-
skip 'deadlock' if /^1\.8\./ =~ RUBY_VERSION
|
84
|
-
|
85
83
|
Object.const_set :FILE_ENTERED_LATCH, Latch.new(2)
|
86
84
|
Object.const_set :FILE_EXIT_LATCH, Latch.new(1)
|
87
85
|
|
88
|
-
a1 =
|
89
|
-
b1 =
|
86
|
+
a1 = util_spec "a", "1", nil, "lib/a.rb"
|
87
|
+
b1 = util_spec "b", "1", nil, "lib/b.rb"
|
90
88
|
|
91
89
|
install_specs a1, b1
|
92
90
|
|
@@ -107,9 +105,9 @@ class TestGemRequire < Gem::TestCase
|
|
107
105
|
end
|
108
106
|
|
109
107
|
def test_require_is_not_lazy_with_exact_req
|
110
|
-
a1 =
|
111
|
-
b1 =
|
112
|
-
b2 =
|
108
|
+
a1 = util_spec "a", "1", {"b" => "= 1"}, "lib/test_gem_require_a.rb"
|
109
|
+
b1 = util_spec "b", "1", nil, "lib/b/c.rb"
|
110
|
+
b2 = util_spec "b", "2", nil, "lib/b/c.rb"
|
113
111
|
|
114
112
|
install_specs b1, b2, a1
|
115
113
|
|
@@ -122,9 +120,9 @@ class TestGemRequire < Gem::TestCase
|
|
122
120
|
end
|
123
121
|
|
124
122
|
def test_require_is_lazy_with_inexact_req
|
125
|
-
a1 =
|
126
|
-
b1 =
|
127
|
-
b2 =
|
123
|
+
a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
124
|
+
b1 = util_spec "b", "1", nil, "lib/b/c.rb"
|
125
|
+
b2 = util_spec "b", "2", nil, "lib/b/c.rb"
|
128
126
|
|
129
127
|
install_specs b1, b2, a1
|
130
128
|
|
@@ -137,8 +135,8 @@ class TestGemRequire < Gem::TestCase
|
|
137
135
|
end
|
138
136
|
|
139
137
|
def test_require_is_not_lazy_with_one_possible
|
140
|
-
a1 =
|
141
|
-
b1 =
|
138
|
+
a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
139
|
+
b1 = util_spec "b", "1", nil, "lib/b/c.rb"
|
142
140
|
|
143
141
|
install_specs b1, a1
|
144
142
|
|
@@ -151,7 +149,7 @@ class TestGemRequire < Gem::TestCase
|
|
151
149
|
end
|
152
150
|
|
153
151
|
def test_require_can_use_a_pathname_object
|
154
|
-
a1 =
|
152
|
+
a1 = util_spec "a", "1", nil, "lib/test_gem_require_a.rb"
|
155
153
|
|
156
154
|
install_specs a1
|
157
155
|
|
@@ -161,9 +159,9 @@ class TestGemRequire < Gem::TestCase
|
|
161
159
|
end
|
162
160
|
|
163
161
|
def test_activate_via_require_respects_loaded_files
|
164
|
-
a1 =
|
165
|
-
b1 =
|
166
|
-
b2 =
|
162
|
+
a1 = util_spec "a", "1", {"b" => ">= 1"}, "lib/test_gem_require_a.rb"
|
163
|
+
b1 = util_spec "b", "1", nil, "lib/benchmark.rb"
|
164
|
+
b2 = util_spec "b", "2", nil, "lib/benchmark.rb"
|
167
165
|
|
168
166
|
install_specs b1, b2, a1
|
169
167
|
|
@@ -181,11 +179,11 @@ class TestGemRequire < Gem::TestCase
|
|
181
179
|
end
|
182
180
|
|
183
181
|
def test_already_activated_direct_conflict
|
184
|
-
a1 =
|
185
|
-
b1 =
|
186
|
-
b2 =
|
187
|
-
c1 =
|
188
|
-
c2 =
|
182
|
+
a1 = util_spec "a", "1", { "b" => "> 0" }
|
183
|
+
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/ib.rb"
|
184
|
+
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/ib.rb"
|
185
|
+
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
186
|
+
c2 = util_spec("c", "2", nil, "lib/d.rb")
|
189
187
|
|
190
188
|
install_specs c1, c2, b1, b2, a1
|
191
189
|
|
@@ -201,13 +199,13 @@ class TestGemRequire < Gem::TestCase
|
|
201
199
|
end
|
202
200
|
|
203
201
|
def test_multiple_gems_with_the_same_path
|
204
|
-
a1 =
|
205
|
-
b1 =
|
206
|
-
b2 =
|
207
|
-
x1 =
|
208
|
-
x2 =
|
209
|
-
c1 =
|
210
|
-
c2 =
|
202
|
+
a1 = util_spec "a", "1", { "b" => "> 0", "x" => "> 0" }
|
203
|
+
b1 = util_spec "b", "1", { "c" => ">= 1" }, "lib/ib.rb"
|
204
|
+
b2 = util_spec "b", "2", { "c" => ">= 2" }, "lib/ib.rb"
|
205
|
+
x1 = util_spec "x", "1", nil, "lib/ib.rb"
|
206
|
+
x2 = util_spec "x", "2", nil, "lib/ib.rb"
|
207
|
+
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
208
|
+
c2 = util_spec("c", "2", nil, "lib/d.rb")
|
211
209
|
|
212
210
|
install_specs c1, c2, x1, x2, b1, b2, a1
|
213
211
|
|
@@ -224,13 +222,13 @@ class TestGemRequire < Gem::TestCase
|
|
224
222
|
end
|
225
223
|
|
226
224
|
def test_unable_to_find_good_unresolved_version
|
227
|
-
a1 =
|
228
|
-
b1 =
|
229
|
-
b2 =
|
225
|
+
a1 = util_spec "a", "1", { "b" => "> 0" }
|
226
|
+
b1 = util_spec "b", "1", { "c" => ">= 2" }, "lib/ib.rb"
|
227
|
+
b2 = util_spec "b", "2", { "c" => ">= 3" }, "lib/ib.rb"
|
230
228
|
|
231
|
-
c1 =
|
232
|
-
c2 =
|
233
|
-
c3 =
|
229
|
+
c1 = util_spec "c", "1", nil, "lib/d.rb"
|
230
|
+
c2 = util_spec "c", "2", nil, "lib/d.rb"
|
231
|
+
c3 = util_spec "c", "3", nil, "lib/d.rb"
|
234
232
|
|
235
233
|
install_specs c1, c2, c3, b1, b2, a1
|
236
234
|
|
@@ -273,10 +271,10 @@ class TestGemRequire < Gem::TestCase
|
|
273
271
|
end
|
274
272
|
|
275
273
|
def test_require_doesnt_traverse_development_dependencies
|
276
|
-
a =
|
277
|
-
z =
|
278
|
-
w1 =
|
279
|
-
w2 =
|
274
|
+
a = util_spec("a", "1", nil, "lib/a.rb")
|
275
|
+
z = util_spec("z", "1", "w" => "> 0")
|
276
|
+
w1 = util_spec("w", "1") { |s| s.add_development_dependency "non-existent" }
|
277
|
+
w2 = util_spec("w", "2") { |s| s.add_development_dependency "non-existent" }
|
280
278
|
|
281
279
|
install_specs a, w1, w2, z
|
282
280
|
|
@@ -296,7 +294,6 @@ class TestGemRequire < Gem::TestCase
|
|
296
294
|
end
|
297
295
|
|
298
296
|
def test_realworld_default_gem
|
299
|
-
skip "no default gems on ruby < 2.0" unless RUBY_VERSION >= "2"
|
300
297
|
begin
|
301
298
|
gem 'json'
|
302
299
|
rescue Gem::MissingSpecError
|
@@ -316,7 +313,7 @@ class TestGemRequire < Gem::TestCase
|
|
316
313
|
default_gem_spec = new_default_spec("default", "2.0.0.0",
|
317
314
|
nil, "default/gem.rb")
|
318
315
|
install_default_specs(default_gem_spec)
|
319
|
-
normal_gem_spec =
|
316
|
+
normal_gem_spec = util_spec("default", "3.0", nil,
|
320
317
|
"lib/default/gem.rb")
|
321
318
|
install_specs(normal_gem_spec)
|
322
319
|
assert_require "default/gem"
|
@@ -366,7 +363,7 @@ class TestGemRequire < Gem::TestCase
|
|
366
363
|
end
|
367
364
|
|
368
365
|
def test_require_default_when_gem_defined
|
369
|
-
a =
|
366
|
+
a = util_spec("a", "1", nil, "lib/a.rb")
|
370
367
|
install_specs a
|
371
368
|
c = Class.new do
|
372
369
|
def self.gem(*args)
|
@@ -379,8 +376,8 @@ class TestGemRequire < Gem::TestCase
|
|
379
376
|
|
380
377
|
|
381
378
|
def test_require_bundler
|
382
|
-
b1 =
|
383
|
-
b2a =
|
379
|
+
b1 = util_spec('bundler', '1', nil, "lib/bundler/setup.rb")
|
380
|
+
b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
|
384
381
|
install_specs b1, b2a
|
385
382
|
|
386
383
|
require "rubygems/bundler_version_finder"
|
@@ -392,8 +389,8 @@ class TestGemRequire < Gem::TestCase
|
|
392
389
|
|
393
390
|
def test_require_bundler_missing_bundler_version
|
394
391
|
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["55", "reason"]) do
|
395
|
-
b1 =
|
396
|
-
b2a =
|
392
|
+
b1 = util_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
|
393
|
+
b2a = util_spec('bundler', '2.a', nil, "lib/bundler/setup.rb")
|
397
394
|
install_specs b1, b2a
|
398
395
|
|
399
396
|
e = assert_raises Gem::MissingSpecVersionError do
|
@@ -405,8 +402,8 @@ class TestGemRequire < Gem::TestCase
|
|
405
402
|
|
406
403
|
def test_require_bundler_with_bundler_version
|
407
404
|
Gem::BundlerVersionFinder.stub(:bundler_version_with_reason, ["1", "reason"]) do
|
408
|
-
b1 =
|
409
|
-
b2 =
|
405
|
+
b1 = util_spec('bundler', '1.999999999', nil, "lib/bundler/setup.rb")
|
406
|
+
b2 = util_spec('bundler', '2', nil, "lib/bundler/setup.rb")
|
410
407
|
install_specs b1, b2
|
411
408
|
|
412
409
|
$:.clear
|
@@ -415,6 +412,24 @@ class TestGemRequire < Gem::TestCase
|
|
415
412
|
end
|
416
413
|
end
|
417
414
|
|
415
|
+
if RUBY_VERSION >= "2.5"
|
416
|
+
def test_no_kernel_require_in_warn_with_uplevel
|
417
|
+
lib = File.realpath("../../../lib", __FILE__)
|
418
|
+
Dir.mktmpdir("warn_test") do |dir|
|
419
|
+
File.write(dir + "/sub.rb", "warn 'uplevel', 'test', uplevel: 1\n")
|
420
|
+
File.write(dir + "/main.rb", "require 'sub'\n")
|
421
|
+
_, err = capture_subprocess_io do
|
422
|
+
system(@@ruby, "-w", "-rpp", "--disable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
|
423
|
+
end
|
424
|
+
assert_equal "main.rb:1: warning: uplevel\ntest\n", err
|
425
|
+
_, err = capture_subprocess_io do
|
426
|
+
system(@@ruby, "-w", "-rpp", "--enable=gems", "-I", lib, "-C", dir, "-I.", "main.rb")
|
427
|
+
end
|
428
|
+
assert_equal "main.rb:1: warning: uplevel\ntest\n", err
|
429
|
+
end
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
418
433
|
def silence_warnings
|
419
434
|
old_verbose, $VERBOSE = $VERBOSE, false
|
420
435
|
yield
|
data/util/CL2notes
CHANGED
@@ -9,7 +9,7 @@ def format_text(text, wrap, indent=0)
|
|
9
9
|
work = text.dup
|
10
10
|
|
11
11
|
while work.length > wrap
|
12
|
-
if work =~ /^(.{0,#{wrap}})[ \n]/o
|
12
|
+
if work =~ /^(.{0,#{wrap}})[ \n]/o
|
13
13
|
result << $1
|
14
14
|
work.slice!(0, $&.length)
|
15
15
|
else
|
@@ -53,4 +53,3 @@ entries.sort_by { |file, | file }.each do |file, file_entries|
|
|
53
53
|
puts file_entry
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
data/util/ci
CHANGED
@@ -47,25 +47,33 @@ end
|
|
47
47
|
case ARGV
|
48
48
|
when %w(before_script)
|
49
49
|
if TOOL.rubygems?
|
50
|
-
run('
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
50
|
+
run('ruby', %W(-I lib bin/gem uninstall executable-hooks gem-wrappers bundler-unload -x --force -i #{`gem env home`.strip}@global))
|
51
|
+
|
52
|
+
if RUBY_VERSION >= "2.6.0"
|
53
|
+
run('gem', %w(install minitest -v 5.4.3))
|
54
|
+
end
|
55
|
+
|
56
|
+
# 2.5 images of Travis was broken about bundler installation.
|
57
|
+
if RUBY_VERSION >= "2.5.0" && RUBY_VERSION < "2.6.0"
|
58
|
+
run('gem', %w(install bundler -v 1.16.2))
|
59
|
+
end
|
60
|
+
|
57
61
|
run('gem', %w(list --details))
|
58
62
|
run('gem', %w(env))
|
59
63
|
else
|
64
|
+
# Fix incorrect default gem specifications on ruby 2.6.1. Can be removed
|
65
|
+
# when 2.6.2 is released and we start testing against it. See
|
66
|
+
# https://bugs.ruby-lang.org/issues/15582 for more information
|
67
|
+
run('gem', %w(install etc:1.0.1 --default)) if RUBY_VERSION == "2.6.1"
|
68
|
+
|
60
69
|
with_retries { run('rake', %w(spec:travis:deps)) }
|
61
70
|
end
|
62
|
-
when %w(
|
63
|
-
|
64
|
-
|
65
|
-
end
|
71
|
+
when %w(rubocop)
|
72
|
+
run('gem', %w(install rubocop -v ~>0.60.0))
|
73
|
+
run('util/rubocop')
|
66
74
|
when %w(script)
|
67
75
|
if TOOL.rubygems?
|
68
|
-
run('rake'
|
76
|
+
run('rake test')
|
69
77
|
else
|
70
78
|
run('rake', %w(spec:travis -t))
|
71
79
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Rubygems
|
6
|
+
# This cop enforces that no outdated deprecations are present on RubyGems
|
7
|
+
# code base.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
#
|
11
|
+
# As of March, 2019
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# deprecate :safdfa, nil, 2018, 12
|
15
|
+
# deprecate :safdfa, nil, 2019, 03
|
16
|
+
#
|
17
|
+
# # good
|
18
|
+
# deprecate :safdfa, nil, 2019, 04
|
19
|
+
#
|
20
|
+
class Deprecations < Cop
|
21
|
+
|
22
|
+
MSG = "Remove `deprecate` calls with dates in the past, along with " \
|
23
|
+
"the methods they deprecate, or expand the deprecation horizons to " \
|
24
|
+
"a future date"
|
25
|
+
|
26
|
+
def on_send(node)
|
27
|
+
_receiver, method_name, *args = *node
|
28
|
+
return unless method_name == :deprecate
|
29
|
+
|
30
|
+
scheduled_year = args[2].children.last
|
31
|
+
scheduled_month = args[3].children.last
|
32
|
+
|
33
|
+
current_time = Time.now
|
34
|
+
|
35
|
+
current_year = current_time.year
|
36
|
+
current_month = current_time.month
|
37
|
+
|
38
|
+
if current_year >= scheduled_year || (current_year == scheduled_year && current_month >= scheduled_month)
|
39
|
+
add_offense(node)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def message(node)
|
46
|
+
format(MSG, method: node.method_name)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/util/create_certs.rb
CHANGED
@@ -6,7 +6,7 @@ class CertificateBuilder
|
|
6
6
|
|
7
7
|
attr_reader :start
|
8
8
|
|
9
|
-
def initialize
|
9
|
+
def initialize(key_size = 2048)
|
10
10
|
@start = Time.utc 2012, 01, 01, 00, 00, 00
|
11
11
|
@end_of_time = Time.utc 9999, 12, 31, 23, 59, 59
|
12
12
|
@end_of_time_32 = Time.utc 2038, 01, 19, 03, 14, 07
|
@@ -59,11 +59,11 @@ class CertificateBuilder
|
|
59
59
|
ef.create_extension('subjectKeyIdentifier', 'hash')
|
60
60
|
]
|
61
61
|
|
62
|
-
if cert != issuer_cert
|
62
|
+
if cert != issuer_cert # not self-signed cert
|
63
63
|
cert.add_extension ef.create_extension('authorityKeyIdentifier', 'keyid:always')
|
64
64
|
end
|
65
65
|
|
66
|
-
if is_ca
|
66
|
+
if is_ca
|
67
67
|
cert.add_extension ef.create_extension('basicConstraints', 'CA:TRUE', true)
|
68
68
|
cert.add_extension ef.create_extension('keyUsage', 'keyCertSign', true)
|
69
69
|
end
|
@@ -79,7 +79,7 @@ class CertificateBuilder
|
|
79
79
|
OpenSSL::PKey::RSA.new @key_size
|
80
80
|
end
|
81
81
|
|
82
|
-
def create_keys
|
82
|
+
def create_keys(names)
|
83
83
|
keys = {}
|
84
84
|
|
85
85
|
names.each do |name|
|
@@ -95,8 +95,8 @@ class CertificateBuilder
|
|
95
95
|
serial
|
96
96
|
end
|
97
97
|
|
98
|
-
def validity_for
|
99
|
-
if time == :end_of_time
|
98
|
+
def validity_for(time)
|
99
|
+
if time == :end_of_time
|
100
100
|
validity = @end_of_time
|
101
101
|
validity_32 = @end_of_time_32
|
102
102
|
else
|
@@ -169,4 +169,3 @@ certs.each do |name, (cert, cert_32)|
|
|
169
169
|
dest = File.join base_dir, "#{name}_cert_32.pem"
|
170
170
|
File.write dest, cert_32.to_pem
|
171
171
|
end
|
172
|
-
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# cp /etc/ssl/openssl.cnf . # copied from OpenSSL 1.1.1b source
|
4
|
+
|
5
|
+
rm -rf demoCA/ server/ client/
|
6
|
+
|
7
|
+
mkdir demoCA demoCA/private demoCA/newcerts
|
8
|
+
touch demoCA/index.txt
|
9
|
+
echo 00 > demoCA/serial
|
10
|
+
openssl genrsa -out demoCA/private/cakey.pem 2048
|
11
|
+
openssl req -new -key demoCA/private/cakey.pem -out demoCA/careq.pem -subj "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=CA"
|
12
|
+
openssl ca -batch -config openssl.cnf -extensions v3_ca -out demoCA/cacert.pem -startdate 090101000000Z -enddate 491231235959Z -batch -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pem
|
13
|
+
|
14
|
+
mkdir server
|
15
|
+
openssl genrsa -out server/server.key 2048
|
16
|
+
openssl req -new -key server/server.key -out server/csr.pem -subj "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=localhost"
|
17
|
+
openssl ca -batch -config openssl.cnf -startdate 090101000000Z -enddate 491231235959Z -in server/csr.pem -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -out server/cert.pem
|
18
|
+
|
19
|
+
mkdir client
|
20
|
+
openssl genrsa -out client/client.key 2048
|
21
|
+
openssl req -config openssl.cnf -new -key client/client.key -out client/csr.pem -subj "/C=JP/ST=Tokyo/O=RubyGemsTest/CN=client"
|
22
|
+
openssl ca -batch -config openssl.cnf -startdate 090101000000Z -enddate 491231235959Z -in client/csr.pem -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -out client/cert.pem
|
23
|
+
|
24
|
+
cp demoCA/cacert.pem $(git rev-parse --show-toplevel)/test/rubygems/ca_cert.pem
|
25
|
+
cp server/cert.pem $(git rev-parse --show-toplevel)/test/rubygems/ssl_cert.pem
|
26
|
+
cp server/server.key $(git rev-parse --show-toplevel)/test/rubygems/ssl_key.pem
|
27
|
+
cat client/cert.pem client/client.key > $(git rev-parse --show-toplevel)/test/rubygems/client.pem
|
@@ -1,17 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'openssl'
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
test_path = File.expand_path('../../test/rubygems', __FILE__)
|
5
|
+
|
6
|
+
private_key_path = "#{test_path}/private_key.pem"
|
6
7
|
|
7
8
|
key = OpenSSL::PKey::RSA.new File.read private_key_path
|
8
9
|
|
9
10
|
cipher = OpenSSL::Cipher.new 'DES-CBC'
|
10
11
|
|
11
|
-
encrypted_key_path =
|
12
|
-
encrypted_key_path = File.expand_path encrypted_key_path, __FILE__
|
12
|
+
encrypted_key_path = "#{test_path}/encrypted_private_key.pem"
|
13
13
|
|
14
14
|
open encrypted_key_path, 'w' do |io|
|
15
15
|
io.write key.to_pem cipher, 'Foo bar'
|
16
16
|
end
|
17
|
-
|
data/util/patch_with_prs.rb
CHANGED
@@ -50,7 +50,7 @@ sh("git", "checkout", branch)
|
|
50
50
|
sh("git", "submodule", "update", "--init", "--recursive")
|
51
51
|
|
52
52
|
commits = `git log --oneline origin/master --`.split("\n").map {|l| l.split(/\s/, 2) }.reverse
|
53
|
-
commits.select! {|_sha, message| message =~ /(Auto merge of|Merge pull request) ##{Regexp.union(*prs)}/ }
|
53
|
+
commits.select! {|_sha, message| message =~ /(Auto merge of|Merge pull request|Merge) ##{Regexp.union(*prs)}/ }
|
54
54
|
|
55
55
|
unless system("git", "cherry-pick", "-x", "-m", "1", *commits.map(&:first))
|
56
56
|
abort unless system("zsh")
|
data/util/rubocop
ADDED
@@ -8,14 +8,14 @@ URIS = [
|
|
8
8
|
URI('https://www.rubygems.org'),
|
9
9
|
URI('https://index.rubygems.org'),
|
10
10
|
URI('https://staging.rubygems.org'),
|
11
|
-
]
|
11
|
+
].freeze
|
12
12
|
|
13
13
|
HOSTNAMES_TO_MAP = [
|
14
14
|
'rubygems.org',
|
15
15
|
'index.rubygems.org'
|
16
|
-
]
|
16
|
+
].freeze
|
17
17
|
|
18
|
-
def connect_to
|
18
|
+
def connect_to(uri, store)
|
19
19
|
# None of the URIs are IPv6, so URI::Generic#hostname(ruby 1.9.3+) isn't needed
|
20
20
|
http = Net::HTTP.new uri.host, uri.port
|
21
21
|
|
@@ -31,7 +31,7 @@ rescue OpenSSL::SSL::SSLError
|
|
31
31
|
false
|
32
32
|
end
|
33
33
|
|
34
|
-
def load_certificates
|
34
|
+
def load_certificates(io)
|
35
35
|
cert_texts =
|
36
36
|
io.read.scan(/^-{5}BEGIN CERTIFICATE-{5}.*?^-{5}END CERTIFICATE-{5}/m)
|
37
37
|
|
@@ -40,13 +40,13 @@ def load_certificates io
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def show_certificates
|
43
|
+
def show_certificates(certificates)
|
44
44
|
certificates.each do |certificate|
|
45
45
|
p certificate.subject.to_a
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def store_for
|
49
|
+
def store_for(certificates)
|
50
50
|
store = OpenSSL::X509::Store.new
|
51
51
|
certificates.each do |certificate|
|
52
52
|
store.add_cert certificate
|
@@ -55,13 +55,13 @@ def store_for certificates
|
|
55
55
|
store
|
56
56
|
end
|
57
57
|
|
58
|
-
def test_certificates
|
58
|
+
def test_certificates(certificates, uri)
|
59
59
|
1.upto certificates.length do |n|
|
60
60
|
puts "combinations of #{n} certificates"
|
61
61
|
certificates.combination(n).each do |combination|
|
62
62
|
match = test_uri uri, combination
|
63
63
|
|
64
|
-
if match
|
64
|
+
if match
|
65
65
|
$needed_combinations << match
|
66
66
|
puts
|
67
67
|
puts match.map { |certificate| certificate.subject }
|
@@ -74,7 +74,7 @@ def test_certificates certificates, uri
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
def test_uri
|
77
|
+
def test_uri(uri, certificates)
|
78
78
|
store = store_for certificates
|
79
79
|
|
80
80
|
verified = connect_to uri, store
|
@@ -84,7 +84,7 @@ def test_uri uri, certificates
|
|
84
84
|
nil
|
85
85
|
end
|
86
86
|
|
87
|
-
def hostname_certificate_mapping
|
87
|
+
def hostname_certificate_mapping(certificates)
|
88
88
|
mapping = {}
|
89
89
|
HOSTNAMES_TO_MAP.each do |hostname|
|
90
90
|
uri = URI("https://#{hostname}")
|
@@ -96,7 +96,7 @@ def hostname_certificate_mapping certificates
|
|
96
96
|
mapping
|
97
97
|
end
|
98
98
|
|
99
|
-
def write_certificates
|
99
|
+
def write_certificates(certificates)
|
100
100
|
mapping = hostname_certificate_mapping(certificates)
|
101
101
|
mapping.each do |hostname, certificate|
|
102
102
|
subject = certificate.subject.to_a
|
@@ -115,7 +115,7 @@ def write_certificates certificates
|
|
115
115
|
end
|
116
116
|
|
117
117
|
io =
|
118
|
-
if ARGV.empty?
|
118
|
+
if ARGV.empty?
|
119
119
|
open OpenSSL::X509::DEFAULT_CERT_FILE
|
120
120
|
else
|
121
121
|
ARGF
|
@@ -135,4 +135,3 @@ end
|
|
135
135
|
needed = $needed_combinations.flatten.uniq
|
136
136
|
|
137
137
|
write_certificates needed
|
138
|
-
|
data/util/update_changelog.rb
CHANGED
@@ -52,7 +52,7 @@ history = File.read(File.expand_path('../../History.txt', __FILE__))
|
|
52
52
|
|
53
53
|
File.open(File.expand_path('../../ChangeLog', __FILE__), 'w') do |changelog|
|
54
54
|
commits = `git log --oneline v#{Gem::VERSION}..#{branch}`.split("\n")
|
55
|
-
prs = commits.reverse_each.map { |c| c =~ /(Auto merge of|Merge pull request) #(\d+)/ && $2 }.compact
|
55
|
+
prs = commits.reverse_each.map { |c| c =~ /(Auto merge of|Merge pull request|Merge) #(\d+)/ && $2 }.compact.uniq.sort!
|
56
56
|
prs.each do |pr|
|
57
57
|
next if history =~ /Pull\srequest\s##{pr}/m
|
58
58
|
details = github_api "/repos/rubygems/rubygems/pulls/#{pr}"
|