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
data/lib/rubygems/server.rb
CHANGED
@@ -35,7 +35,7 @@ class Gem::Server
|
|
35
35
|
include ERB::Util
|
36
36
|
include Gem::UserInteraction
|
37
37
|
|
38
|
-
SEARCH = <<-ERB
|
38
|
+
SEARCH = <<-ERB.freeze
|
39
39
|
<form class="headerSearch" name="headerSearchForm" method="get" action="/rdoc">
|
40
40
|
<div id="search" style="float:right">
|
41
41
|
<label for="q">Filter/Search</label>
|
@@ -45,7 +45,7 @@ class Gem::Server
|
|
45
45
|
</form>
|
46
46
|
ERB
|
47
47
|
|
48
|
-
DOC_TEMPLATE = <<-'ERB'
|
48
|
+
DOC_TEMPLATE = <<-'ERB'.freeze
|
49
49
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
50
50
|
<!DOCTYPE html
|
51
51
|
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
@@ -129,7 +129,7 @@ class Gem::Server
|
|
129
129
|
ERB
|
130
130
|
|
131
131
|
# CSS is copy & paste from rdoc-style.css, RDoc V1.0.1 - 20041108
|
132
|
-
RDOC_CSS = <<-CSS
|
132
|
+
RDOC_CSS = <<-CSS.freeze
|
133
133
|
body {
|
134
134
|
font-family: Verdana,Arial,Helvetica,sans-serif;
|
135
135
|
font-size: 90%;
|
@@ -339,7 +339,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
339
339
|
.ruby-value { color: #7fffd4; background: transparent; }
|
340
340
|
CSS
|
341
341
|
|
342
|
-
RDOC_NO_DOCUMENTATION = <<-'ERB'
|
342
|
+
RDOC_NO_DOCUMENTATION = <<-'ERB'.freeze
|
343
343
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
344
344
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
345
345
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
@@ -373,7 +373,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
373
373
|
</html>
|
374
374
|
ERB
|
375
375
|
|
376
|
-
RDOC_SEARCH_TEMPLATE = <<-'ERB'
|
376
|
+
RDOC_SEARCH_TEMPLATE = <<-'ERB'.freeze
|
377
377
|
<?xml version="1.0" encoding="iso-8859-1"?>
|
378
378
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
379
379
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
@@ -450,7 +450,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
450
450
|
@have_rdoc_4_plus = nil
|
451
451
|
end
|
452
452
|
|
453
|
-
def add_date
|
453
|
+
def add_date(res)
|
454
454
|
res['date'] = @spec_dirs.map do |spec_dir|
|
455
455
|
File.stat(spec_dir).mtime
|
456
456
|
end.max
|
@@ -462,8 +462,8 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
462
462
|
end
|
463
463
|
end
|
464
464
|
|
465
|
-
def doc_root
|
466
|
-
if have_rdoc_4_plus?
|
465
|
+
def doc_root(gem_name)
|
466
|
+
if have_rdoc_4_plus?
|
467
467
|
"/doc_root/#{u gem_name}/"
|
468
468
|
else
|
469
469
|
"/doc_root/#{u gem_name}/rdoc/index.html"
|
@@ -491,14 +491,14 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
491
491
|
|
492
492
|
specs = Marshal.dump specs
|
493
493
|
|
494
|
-
if req.path =~ /\.gz$/
|
494
|
+
if req.path =~ /\.gz$/
|
495
495
|
specs = Gem::Util.gzip specs
|
496
496
|
res['content-type'] = 'application/x-gzip'
|
497
497
|
else
|
498
498
|
res['content-type'] = 'application/octet-stream'
|
499
499
|
end
|
500
500
|
|
501
|
-
if req.request_method == 'HEAD'
|
501
|
+
if req.request_method == 'HEAD'
|
502
502
|
res['content-length'] = specs.length
|
503
503
|
else
|
504
504
|
res.body << specs
|
@@ -509,7 +509,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
509
509
|
# Creates server sockets based on the addresses option. If no addresses
|
510
510
|
# were given a server socket for all interfaces is created.
|
511
511
|
|
512
|
-
def listen
|
512
|
+
def listen(addresses = @addresses)
|
513
513
|
addresses = [nil] unless addresses
|
514
514
|
|
515
515
|
listeners = 0
|
@@ -529,14 +529,14 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
529
529
|
end
|
530
530
|
end
|
531
531
|
|
532
|
-
if @server.listeners.empty?
|
532
|
+
if @server.listeners.empty?
|
533
533
|
say "Unable to start a server."
|
534
534
|
say "Check for running servers or your --bind and --port arguments"
|
535
535
|
terminate_interaction 1
|
536
536
|
end
|
537
537
|
end
|
538
538
|
|
539
|
-
def prerelease_specs
|
539
|
+
def prerelease_specs(req, res)
|
540
540
|
reset_gems
|
541
541
|
|
542
542
|
res['content-type'] = 'application/x-gzip'
|
@@ -552,14 +552,14 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
552
552
|
|
553
553
|
specs = Marshal.dump specs
|
554
554
|
|
555
|
-
if req.path =~ /\.gz$/
|
555
|
+
if req.path =~ /\.gz$/
|
556
556
|
specs = Gem::Util.gzip specs
|
557
557
|
res['content-type'] = 'application/x-gzip'
|
558
558
|
else
|
559
559
|
res['content-type'] = 'application/octet-stream'
|
560
560
|
end
|
561
561
|
|
562
|
-
if req.request_method == 'HEAD'
|
562
|
+
if req.request_method == 'HEAD'
|
563
563
|
res['content-length'] = specs.length
|
564
564
|
else
|
565
565
|
res.body << specs
|
@@ -579,13 +579,13 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
579
579
|
|
580
580
|
selector = full_name.inspect
|
581
581
|
|
582
|
-
if specs.empty?
|
582
|
+
if specs.empty?
|
583
583
|
res.status = 404
|
584
584
|
res.body = "No gems found matching #{selector}"
|
585
|
-
elsif specs.length > 1
|
585
|
+
elsif specs.length > 1
|
586
586
|
res.status = 500
|
587
587
|
res.body = "Multiple gems found matching #{selector}"
|
588
|
-
elsif marshal_format
|
588
|
+
elsif marshal_format
|
589
589
|
res['content-type'] = 'application/x-deflate'
|
590
590
|
res.body << Gem.deflate(Marshal.dump(specs.first))
|
591
591
|
end
|
@@ -818,7 +818,7 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
818
818
|
'/gems' => '/cache/',
|
819
819
|
}
|
820
820
|
|
821
|
-
if have_rdoc_4_plus?
|
821
|
+
if have_rdoc_4_plus?
|
822
822
|
@server.mount '/doc_root', RDoc::Servlet, '/doc_root'
|
823
823
|
else
|
824
824
|
file_handlers['/doc_root'] = '/doc/'
|
@@ -851,14 +851,14 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
851
851
|
|
852
852
|
specs = Marshal.dump specs
|
853
853
|
|
854
|
-
if req.path =~ /\.gz$/
|
854
|
+
if req.path =~ /\.gz$/
|
855
855
|
specs = Gem::Util.gzip specs
|
856
856
|
res['content-type'] = 'application/x-gzip'
|
857
857
|
else
|
858
858
|
res['content-type'] = 'application/octet-stream'
|
859
859
|
end
|
860
860
|
|
861
|
-
if req.request_method == 'HEAD'
|
861
|
+
if req.request_method == 'HEAD'
|
862
862
|
res['content-length'] = specs.length
|
863
863
|
else
|
864
864
|
res.body << specs
|
data/lib/rubygems/source/git.rb
CHANGED
@@ -50,7 +50,7 @@ class Gem::Source::Git < Gem::Source
|
|
50
50
|
# repository may contain multiple gems. If +submodules+ is true, submodules
|
51
51
|
# will be checked out when the gem is installed.
|
52
52
|
|
53
|
-
def initialize
|
53
|
+
def initialize(name, repository, reference, submodules = false)
|
54
54
|
super repository
|
55
55
|
|
56
56
|
@name = name
|
@@ -63,7 +63,7 @@ class Gem::Source::Git < Gem::Source
|
|
63
63
|
@git = ENV['git'] || 'git'
|
64
64
|
end
|
65
65
|
|
66
|
-
def <=>
|
66
|
+
def <=>(other)
|
67
67
|
case other
|
68
68
|
when Gem::Source::Git then
|
69
69
|
0
|
@@ -77,7 +77,7 @@ class Gem::Source::Git < Gem::Source
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
def ==
|
80
|
+
def ==(other) # :nodoc:
|
81
81
|
super and
|
82
82
|
@name == other.name and
|
83
83
|
@repository == other.repository and
|
@@ -93,7 +93,7 @@ class Gem::Source::Git < Gem::Source
|
|
93
93
|
|
94
94
|
return false unless File.exist? repo_cache_dir
|
95
95
|
|
96
|
-
unless File.exist? install_dir
|
96
|
+
unless File.exist? install_dir
|
97
97
|
system @git, 'clone', '--quiet', '--no-checkout',
|
98
98
|
repo_cache_dir, install_dir
|
99
99
|
end
|
@@ -117,7 +117,7 @@ class Gem::Source::Git < Gem::Source
|
|
117
117
|
def cache # :nodoc:
|
118
118
|
return unless @remote
|
119
119
|
|
120
|
-
if File.exist? repo_cache_dir
|
120
|
+
if File.exist? repo_cache_dir
|
121
121
|
Dir.chdir repo_cache_dir do
|
122
122
|
system @git, 'fetch', '--quiet', '--force', '--tags',
|
123
123
|
@repository, 'refs/heads/*:refs/heads/*'
|
@@ -145,7 +145,7 @@ class Gem::Source::Git < Gem::Source
|
|
145
145
|
##
|
146
146
|
# Nothing to download for git gems
|
147
147
|
|
148
|
-
def download
|
148
|
+
def download(full_spec, path) # :nodoc:
|
149
149
|
end
|
150
150
|
|
151
151
|
##
|
@@ -157,7 +157,7 @@ class Gem::Source::Git < Gem::Source
|
|
157
157
|
File.join base_dir, 'gems', "#{@name}-#{dir_shortref}"
|
158
158
|
end
|
159
159
|
|
160
|
-
def pretty_print
|
160
|
+
def pretty_print(q) # :nodoc:
|
161
161
|
q.group 2, '[Git: ', ']' do
|
162
162
|
q.breakable
|
163
163
|
q.text @repository
|
@@ -206,7 +206,7 @@ class Gem::Source::Git < Gem::Source
|
|
206
206
|
|
207
207
|
Dir.chdir directory do
|
208
208
|
spec = Gem::Specification.load file
|
209
|
-
if spec
|
209
|
+
if spec
|
210
210
|
spec.base_dir = base_dir
|
211
211
|
|
212
212
|
spec.extension_dir =
|
@@ -228,7 +228,7 @@ class Gem::Source::Git < Gem::Source
|
|
228
228
|
require 'digest' # required here to avoid deadlocking in Gem.activate_bin_path (because digest is a gem on 2.5+)
|
229
229
|
|
230
230
|
normalized =
|
231
|
-
if @repository =~ %r%^\w+://(\w+@)?%
|
231
|
+
if @repository =~ %r%^\w+://(\w+@)?%
|
232
232
|
uri = URI(@repository).normalize.to_s.sub %r%/$%,''
|
233
233
|
uri.sub(/\A(\w+)/) { $1.downcase }
|
234
234
|
else
|
@@ -239,4 +239,3 @@ class Gem::Source::Git < Gem::Source
|
|
239
239
|
end
|
240
240
|
|
241
241
|
end
|
242
|
-
|
@@ -11,7 +11,7 @@ class Gem::Source::Installed < Gem::Source
|
|
11
11
|
##
|
12
12
|
# Installed sources sort before all other sources
|
13
13
|
|
14
|
-
def <=>
|
14
|
+
def <=>(other)
|
15
15
|
case other
|
16
16
|
when Gem::Source::Git,
|
17
17
|
Gem::Source::Lock,
|
@@ -29,13 +29,12 @@ class Gem::Source::Installed < Gem::Source
|
|
29
29
|
##
|
30
30
|
# We don't need to download an installed gem
|
31
31
|
|
32
|
-
def download
|
32
|
+
def download(spec, path)
|
33
33
|
nil
|
34
34
|
end
|
35
35
|
|
36
|
-
def pretty_print
|
36
|
+
def pretty_print(q) # :nodoc:
|
37
37
|
q.text '[Installed]'
|
38
38
|
end
|
39
39
|
|
40
40
|
end
|
41
|
-
|
@@ -15,7 +15,7 @@ class Gem::Source::Local < Gem::Source
|
|
15
15
|
##
|
16
16
|
# Local sorts before Gem::Source and after Gem::Source::Installed
|
17
17
|
|
18
|
-
def <=>
|
18
|
+
def <=>(other)
|
19
19
|
case other
|
20
20
|
when Gem::Source::Installed,
|
21
21
|
Gem::Source::Lock then
|
@@ -34,7 +34,7 @@ class Gem::Source::Local < Gem::Source
|
|
34
34
|
"#<%s specs: %p>" % [self.class, keys]
|
35
35
|
end
|
36
36
|
|
37
|
-
def load_specs
|
37
|
+
def load_specs(type) # :nodoc:
|
38
38
|
@load_specs_names[type] ||= begin
|
39
39
|
names = []
|
40
40
|
|
@@ -78,8 +78,8 @@ class Gem::Source::Local < Gem::Source
|
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
-
def find_gem
|
82
|
-
prerelease = false
|
81
|
+
def find_gem(gem_name, version = Gem::Requirement.default, # :nodoc:
|
82
|
+
prerelease = false)
|
83
83
|
load_specs :complete
|
84
84
|
|
85
85
|
found = []
|
@@ -101,7 +101,7 @@ class Gem::Source::Local < Gem::Source
|
|
101
101
|
found.max_by { |s| s.version }
|
102
102
|
end
|
103
103
|
|
104
|
-
def fetch_spec
|
104
|
+
def fetch_spec(name) # :nodoc:
|
105
105
|
load_specs :complete
|
106
106
|
|
107
107
|
if data = @specs[name]
|
@@ -111,7 +111,7 @@ class Gem::Source::Local < Gem::Source
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
def download
|
114
|
+
def download(spec, cache_dir = nil) # :nodoc:
|
115
115
|
load_specs :complete
|
116
116
|
|
117
117
|
@specs.each do |name, data|
|
@@ -121,7 +121,7 @@ class Gem::Source::Local < Gem::Source
|
|
121
121
|
raise Gem::Exception, "Unable to find file for '#{spec.full_name}'"
|
122
122
|
end
|
123
123
|
|
124
|
-
def pretty_print
|
124
|
+
def pretty_print(q) # :nodoc:
|
125
125
|
q.group 2, '[Local gems:', ']' do
|
126
126
|
q.breakable
|
127
127
|
q.seplist @specs.keys do |v|
|
data/lib/rubygems/source/lock.rb
CHANGED
@@ -15,11 +15,11 @@ class Gem::Source::Lock < Gem::Source
|
|
15
15
|
# Creates a new Lock source that wraps +source+ and moves it earlier in the
|
16
16
|
# sort list.
|
17
17
|
|
18
|
-
def initialize
|
18
|
+
def initialize(source)
|
19
19
|
@wrapped = source
|
20
20
|
end
|
21
21
|
|
22
|
-
def <=>
|
22
|
+
def <=>(other) # :nodoc:
|
23
23
|
case other
|
24
24
|
when Gem::Source::Lock then
|
25
25
|
@wrapped <=> other.wrapped
|
@@ -30,7 +30,7 @@ class Gem::Source::Lock < Gem::Source
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def ==
|
33
|
+
def ==(other) # :nodoc:
|
34
34
|
0 == (self <=> other)
|
35
35
|
end
|
36
36
|
|
@@ -41,7 +41,7 @@ class Gem::Source::Lock < Gem::Source
|
|
41
41
|
##
|
42
42
|
# Delegates to the wrapped source's fetch_spec method.
|
43
43
|
|
44
|
-
def fetch_spec
|
44
|
+
def fetch_spec(name_tuple)
|
45
45
|
@wrapped.fetch_spec name_tuple
|
46
46
|
end
|
47
47
|
|
@@ -27,22 +27,22 @@ class Gem::Source::SpecificFile < Gem::Source
|
|
27
27
|
|
28
28
|
attr_reader :spec
|
29
29
|
|
30
|
-
def load_specs
|
30
|
+
def load_specs(*a) # :nodoc:
|
31
31
|
[@name]
|
32
32
|
end
|
33
33
|
|
34
|
-
def fetch_spec
|
34
|
+
def fetch_spec(name) # :nodoc:
|
35
35
|
return @spec if name == @name
|
36
36
|
raise Gem::Exception, "Unable to find '#{name}'"
|
37
37
|
@spec
|
38
38
|
end
|
39
39
|
|
40
|
-
def download
|
40
|
+
def download(spec, dir = nil) # :nodoc:
|
41
41
|
return @path if spec == @spec
|
42
42
|
raise Gem::Exception, "Unable to download '#{spec.full_name}'"
|
43
43
|
end
|
44
44
|
|
45
|
-
def pretty_print
|
45
|
+
def pretty_print(q) # :nodoc:
|
46
46
|
q.group 2, '[SpecificFile:', ']' do
|
47
47
|
q.breakable
|
48
48
|
q.text @path
|
@@ -59,7 +59,7 @@ class Gem::Source::SpecificFile < Gem::Source
|
|
59
59
|
#
|
60
60
|
# Otherwise Gem::Source#<=> is used.
|
61
61
|
|
62
|
-
def <=>
|
62
|
+
def <=>(other)
|
63
63
|
case other
|
64
64
|
when Gem::Source::SpecificFile then
|
65
65
|
return nil if @spec.name != other.spec.name
|
@@ -7,11 +7,11 @@ class Gem::Source::Vendor < Gem::Source::Installed
|
|
7
7
|
##
|
8
8
|
# Creates a new Vendor source for a gem that was unpacked at +path+.
|
9
9
|
|
10
|
-
def initialize
|
10
|
+
def initialize(path)
|
11
11
|
@uri = path
|
12
12
|
end
|
13
13
|
|
14
|
-
def <=>
|
14
|
+
def <=>(other)
|
15
15
|
case other
|
16
16
|
when Gem::Source::Lock then
|
17
17
|
-1
|
@@ -25,4 +25,3 @@ class Gem::Source::Vendor < Gem::Source::Installed
|
|
25
25
|
end
|
26
26
|
|
27
27
|
end
|
28
|
-
|
data/lib/rubygems/source.rb
CHANGED
@@ -16,7 +16,7 @@ class Gem::Source
|
|
16
16
|
:released => 'specs',
|
17
17
|
:latest => 'latest_specs',
|
18
18
|
:prerelease => 'prerelease_specs',
|
19
|
-
}
|
19
|
+
}.freeze
|
20
20
|
|
21
21
|
##
|
22
22
|
# The URI this source will fetch gems from.
|
@@ -36,15 +36,6 @@ class Gem::Source
|
|
36
36
|
end
|
37
37
|
|
38
38
|
@uri = uri
|
39
|
-
@api_uri = nil
|
40
|
-
end
|
41
|
-
|
42
|
-
##
|
43
|
-
# Use an SRV record on the host to look up the true endpoint for the index.
|
44
|
-
|
45
|
-
def api_uri # :nodoc:
|
46
|
-
require 'rubygems/remote_fetcher'
|
47
|
-
@api_uri ||= Gem::RemoteFetcher.fetcher.api_endpoint uri
|
48
39
|
end
|
49
40
|
|
50
41
|
##
|
@@ -77,7 +68,7 @@ class Gem::Source
|
|
77
68
|
end
|
78
69
|
end
|
79
70
|
|
80
|
-
def ==
|
71
|
+
def ==(other) # :nodoc:
|
81
72
|
self.class === other and @uri == other.uri
|
82
73
|
end
|
83
74
|
|
@@ -87,9 +78,9 @@ class Gem::Source
|
|
87
78
|
# Returns a Set that can fetch specifications from this source.
|
88
79
|
|
89
80
|
def dependency_resolver_set # :nodoc:
|
90
|
-
return Gem::Resolver::IndexSet.new self if 'file' ==
|
81
|
+
return Gem::Resolver::IndexSet.new self if 'file' == uri.scheme
|
91
82
|
|
92
|
-
bundler_api_uri =
|
83
|
+
bundler_api_uri = uri + './api/v1/dependencies'
|
93
84
|
|
94
85
|
begin
|
95
86
|
fetcher = Gem::RemoteFetcher.fetcher
|
@@ -97,7 +88,7 @@ class Gem::Source
|
|
97
88
|
rescue Gem::RemoteFetcher::FetchError
|
98
89
|
Gem::Resolver::IndexSet.new self
|
99
90
|
else
|
100
|
-
if response.respond_to? :uri
|
91
|
+
if response.respond_to? :uri
|
101
92
|
Gem::Resolver::APISet.new response.uri
|
102
93
|
else
|
103
94
|
Gem::Resolver::APISet.new bundler_api_uri
|
@@ -135,29 +126,29 @@ class Gem::Source
|
|
135
126
|
##
|
136
127
|
# Fetches a specification for the given +name_tuple+.
|
137
128
|
|
138
|
-
def fetch_spec
|
129
|
+
def fetch_spec(name_tuple)
|
139
130
|
fetcher = Gem::RemoteFetcher.fetcher
|
140
131
|
|
141
132
|
spec_file_name = name_tuple.spec_name
|
142
133
|
|
143
|
-
|
134
|
+
source_uri = uri + "#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}"
|
144
135
|
|
145
|
-
cache_dir = cache_dir
|
136
|
+
cache_dir = cache_dir source_uri
|
146
137
|
|
147
138
|
local_spec = File.join cache_dir, spec_file_name
|
148
139
|
|
149
|
-
if File.exist? local_spec
|
140
|
+
if File.exist? local_spec
|
150
141
|
spec = Gem.read_binary local_spec
|
151
142
|
spec = Marshal.load(spec) rescue nil
|
152
143
|
return spec if spec
|
153
144
|
end
|
154
145
|
|
155
|
-
|
146
|
+
source_uri.path << '.rz'
|
156
147
|
|
157
|
-
spec = fetcher.fetch_path
|
148
|
+
spec = fetcher.fetch_path source_uri
|
158
149
|
spec = Gem::Util.inflate spec
|
159
150
|
|
160
|
-
if update_cache?
|
151
|
+
if update_cache?
|
161
152
|
FileUtils.mkdir_p cache_dir
|
162
153
|
|
163
154
|
File.open local_spec, 'wb' do |io|
|
@@ -184,7 +175,7 @@ class Gem::Source
|
|
184
175
|
file = FILES[type]
|
185
176
|
fetcher = Gem::RemoteFetcher.fetcher
|
186
177
|
file_name = "#{file}.#{Gem.marshal_version}"
|
187
|
-
spec_path =
|
178
|
+
spec_path = uri + "#{file_name}.gz"
|
188
179
|
cache_dir = cache_dir spec_path
|
189
180
|
local_file = File.join(cache_dir, file_name)
|
190
181
|
retried = false
|
@@ -212,15 +203,15 @@ class Gem::Source
|
|
212
203
|
|
213
204
|
def download(spec, dir=Dir.pwd)
|
214
205
|
fetcher = Gem::RemoteFetcher.fetcher
|
215
|
-
fetcher.download spec,
|
206
|
+
fetcher.download spec, uri.to_s, dir
|
216
207
|
end
|
217
208
|
|
218
|
-
def pretty_print
|
209
|
+
def pretty_print(q) # :nodoc:
|
219
210
|
q.group 2, '[Remote:', ']' do
|
220
211
|
q.breakable
|
221
212
|
q.text @uri.to_s
|
222
213
|
|
223
|
-
if api =
|
214
|
+
if api = uri
|
224
215
|
q.breakable
|
225
216
|
q.text 'API URI: '
|
226
217
|
q.text api.to_s
|
data/lib/rubygems/source_list.rb
CHANGED
@@ -105,7 +105,7 @@ class Gem::SourceList
|
|
105
105
|
@sources.empty?
|
106
106
|
end
|
107
107
|
|
108
|
-
def ==
|
108
|
+
def ==(other) # :nodoc:
|
109
109
|
to_a == other
|
110
110
|
end
|
111
111
|
|
@@ -140,7 +140,7 @@ class Gem::SourceList
|
|
140
140
|
##
|
141
141
|
# Deletes +source+ from the source list which may be a Gem::Source or a URI.
|
142
142
|
|
143
|
-
def delete
|
143
|
+
def delete(source)
|
144
144
|
if source.kind_of? Gem::Source
|
145
145
|
@sources.delete source
|
146
146
|
else
|
@@ -54,7 +54,7 @@ class Gem::SpecFetcher
|
|
54
54
|
# If you need to retrieve specifications from a different +source+, you can
|
55
55
|
# send it as an argument.
|
56
56
|
|
57
|
-
def initialize
|
57
|
+
def initialize(sources = nil)
|
58
58
|
@sources = sources || Gem.sources
|
59
59
|
|
60
60
|
@update_cache =
|
@@ -202,10 +202,10 @@ class Gem::SpecFetcher
|
|
202
202
|
}.compact
|
203
203
|
|
204
204
|
matches = if matches.empty? && type != :prerelease
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
205
|
+
suggest_gems_from_name gem_name, :prerelease
|
206
|
+
else
|
207
|
+
matches.uniq.sort_by { |name, dist| dist }
|
208
|
+
end
|
209
209
|
|
210
210
|
matches.first(5).map { |name, dist| name }
|
211
211
|
end
|
@@ -271,4 +271,3 @@ class Gem::SpecFetcher
|
|
271
271
|
end
|
272
272
|
|
273
273
|
end
|
274
|
-
|