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/installer.rb
CHANGED
@@ -34,7 +34,7 @@ class Gem::Installer
|
|
34
34
|
# Paths where env(1) might live. Some systems are broken and have it in
|
35
35
|
# /bin
|
36
36
|
|
37
|
-
ENV_PATHS = %w[/usr/bin/env /bin/env]
|
37
|
+
ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
|
38
38
|
|
39
39
|
##
|
40
40
|
# Deprecated in favor of Gem::Ext::BuildError
|
@@ -101,7 +101,7 @@ class Gem::Installer
|
|
101
101
|
##
|
102
102
|
# Construct an installer object for the gem file located at +path+
|
103
103
|
|
104
|
-
def self.at
|
104
|
+
def self.at(path, options = {})
|
105
105
|
security_policy = options[:security_policy]
|
106
106
|
package = Gem::Package.new path, security_policy
|
107
107
|
new package, options
|
@@ -110,11 +110,15 @@ class Gem::Installer
|
|
110
110
|
class FakePackage
|
111
111
|
attr_accessor :spec
|
112
112
|
|
113
|
+
attr_accessor :dir_mode
|
114
|
+
attr_accessor :prog_mode
|
115
|
+
attr_accessor :data_mode
|
116
|
+
|
113
117
|
def initialize(spec)
|
114
118
|
@spec = spec
|
115
119
|
end
|
116
120
|
|
117
|
-
def extract_files
|
121
|
+
def extract_files(destination_dir, pattern = '*')
|
118
122
|
FileUtils.mkdir_p destination_dir
|
119
123
|
|
120
124
|
spec.files.each do |file|
|
@@ -125,7 +129,7 @@ class Gem::Installer
|
|
125
129
|
end
|
126
130
|
end
|
127
131
|
|
128
|
-
def copy_to
|
132
|
+
def copy_to(path)
|
129
133
|
end
|
130
134
|
end
|
131
135
|
|
@@ -133,7 +137,7 @@ class Gem::Installer
|
|
133
137
|
# Construct an installer object for an ephemeral gem (one where we don't
|
134
138
|
# actually have a .gem file, just a spec)
|
135
139
|
|
136
|
-
def self.for_spec
|
140
|
+
def self.for_spec(spec, options = {})
|
137
141
|
# FIXME: we should have a real Package class for this
|
138
142
|
new FakePackage.new(spec), options
|
139
143
|
end
|
@@ -179,7 +183,13 @@ class Gem::Installer
|
|
179
183
|
|
180
184
|
process_options
|
181
185
|
|
182
|
-
|
186
|
+
@package.dir_mode = options[:dir_mode]
|
187
|
+
@package.prog_mode = options[:prog_mode]
|
188
|
+
@package.data_mode = options[:data_mode]
|
189
|
+
|
190
|
+
@bin_dir = options[:bin_dir] if options[:bin_dir]
|
191
|
+
|
192
|
+
if options[:user_install] and not options[:unpack]
|
183
193
|
@gem_home = Gem.user_dir
|
184
194
|
@bin_dir = Gem.bindir gem_home unless options[:bin_dir]
|
185
195
|
check_that_user_bin_dir_is_in_path
|
@@ -199,7 +209,7 @@ class Gem::Installer
|
|
199
209
|
#
|
200
210
|
# Otherwise +filename+ is overwritten.
|
201
211
|
|
202
|
-
def check_executable_overwrite
|
212
|
+
def check_executable_overwrite(filename) # :nodoc:
|
203
213
|
return if @force
|
204
214
|
|
205
215
|
generated_bin = File.join @bin_dir, formatted_program_filename(filename)
|
@@ -235,7 +245,7 @@ class Gem::Installer
|
|
235
245
|
|
236
246
|
question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
|
237
247
|
|
238
|
-
if ruby_executable
|
248
|
+
if ruby_executable
|
239
249
|
question << (existing || 'an unknown executable')
|
240
250
|
|
241
251
|
return if ask_yes_no "#{question}\nOverwrite the executable?", false
|
@@ -288,7 +298,7 @@ class Gem::Installer
|
|
288
298
|
run_pre_install_hooks
|
289
299
|
|
290
300
|
# Set loaded_from to ensure extension_dir is correct
|
291
|
-
if @options[:install_as_default]
|
301
|
+
if @options[:install_as_default]
|
292
302
|
spec.loaded_from = default_spec_file
|
293
303
|
else
|
294
304
|
spec.loaded_from = spec_file
|
@@ -298,9 +308,10 @@ class Gem::Installer
|
|
298
308
|
FileUtils.rm_rf gem_dir
|
299
309
|
FileUtils.rm_rf spec.extension_dir
|
300
310
|
|
301
|
-
|
311
|
+
dir_mode = options[:dir_mode]
|
312
|
+
FileUtils.mkdir_p gem_dir, :mode => dir_mode && 0755
|
302
313
|
|
303
|
-
if @options[:install_as_default]
|
314
|
+
if @options[:install_as_default]
|
304
315
|
extract_bin
|
305
316
|
write_default_spec
|
306
317
|
else
|
@@ -309,12 +320,17 @@ class Gem::Installer
|
|
309
320
|
build_extensions
|
310
321
|
write_build_info_file
|
311
322
|
run_post_build_hooks
|
323
|
+
end
|
324
|
+
|
325
|
+
generate_bin
|
312
326
|
|
313
|
-
|
327
|
+
unless @options[:install_as_default]
|
314
328
|
write_spec
|
315
329
|
write_cache_file
|
316
330
|
end
|
317
331
|
|
332
|
+
File.chmod(dir_mode, gem_dir) if dir_mode
|
333
|
+
|
318
334
|
say spec.post_install_message if options[:post_install_message] && !spec.post_install_message.nil?
|
319
335
|
|
320
336
|
Gem::Installer.install_lock.synchronize { Gem::Specification.reset }
|
@@ -331,7 +347,7 @@ class Gem::Installer
|
|
331
347
|
|
332
348
|
def run_pre_install_hooks # :nodoc:
|
333
349
|
Gem.pre_install_hooks.each do |hook|
|
334
|
-
if hook.call(self) == false
|
350
|
+
if hook.call(self) == false
|
335
351
|
location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
|
336
352
|
|
337
353
|
message = "pre-install hook#{location} failed for #{spec.full_name}"
|
@@ -342,7 +358,7 @@ class Gem::Installer
|
|
342
358
|
|
343
359
|
def run_post_build_hooks # :nodoc:
|
344
360
|
Gem.post_build_hooks.each do |hook|
|
345
|
-
if hook.call(self) == false
|
361
|
+
if hook.call(self) == false
|
346
362
|
FileUtils.rm_rf gem_dir
|
347
363
|
|
348
364
|
location = " at #{$1}" if hook.inspect =~ /@(.*:\d+)/
|
@@ -368,7 +384,7 @@ class Gem::Installer
|
|
368
384
|
@specs ||= begin
|
369
385
|
specs = []
|
370
386
|
|
371
|
-
|
387
|
+
Gem::Util.glob_files_in_dir("*.gemspec", File.join(gem_home, "specifications")).each do |path|
|
372
388
|
spec = Gem::Specification.load path.untaint
|
373
389
|
specs << spec if spec
|
374
390
|
end
|
@@ -385,7 +401,7 @@ class Gem::Installer
|
|
385
401
|
# dependency :: Gem::Dependency
|
386
402
|
|
387
403
|
def ensure_dependency(spec, dependency)
|
388
|
-
unless installation_satisfies_dependency? dependency
|
404
|
+
unless installation_satisfies_dependency? dependency
|
389
405
|
raise Gem::InstallError, "#{spec.name} requires #{dependency}"
|
390
406
|
end
|
391
407
|
true
|
@@ -453,7 +469,7 @@ class Gem::Installer
|
|
453
469
|
# Creates windows .bat files for easy running of commands
|
454
470
|
|
455
471
|
def generate_windows_script(filename, bindir)
|
456
|
-
if Gem.win_platform?
|
472
|
+
if Gem.win_platform?
|
457
473
|
script_name = filename + ".bat"
|
458
474
|
script_path = File.join bindir, File.basename(script_name)
|
459
475
|
File.open script_path, 'w' do |file|
|
@@ -468,7 +484,7 @@ class Gem::Installer
|
|
468
484
|
return if spec.executables.nil? or spec.executables.empty?
|
469
485
|
|
470
486
|
begin
|
471
|
-
Dir.mkdir @bin_dir
|
487
|
+
Dir.mkdir @bin_dir, *[options[:dir_mode] && 0755].compact
|
472
488
|
rescue SystemCallError
|
473
489
|
raise unless File.directory? @bin_dir
|
474
490
|
end
|
@@ -479,18 +495,19 @@ class Gem::Installer
|
|
479
495
|
filename.untaint
|
480
496
|
bin_path = File.join gem_dir, spec.bindir, filename
|
481
497
|
|
482
|
-
unless File.exist? bin_path
|
498
|
+
unless File.exist? bin_path
|
483
499
|
# TODO change this to a more useful warning
|
484
500
|
warn "`#{bin_path}` does not exist, maybe `gem pristine #{spec.name}` will fix it?"
|
485
501
|
next
|
486
502
|
end
|
487
503
|
|
488
504
|
mode = File.stat(bin_path).mode
|
489
|
-
|
505
|
+
dir_mode = options[:prog_mode] || (mode | 0111)
|
506
|
+
FileUtils.chmod dir_mode, bin_path unless dir_mode == mode
|
490
507
|
|
491
508
|
check_executable_overwrite filename
|
492
509
|
|
493
|
-
if @wrappers
|
510
|
+
if @wrappers
|
494
511
|
generate_bin_script filename, @bin_dir
|
495
512
|
else
|
496
513
|
generate_bin_symlink filename, @bin_dir
|
@@ -513,6 +530,7 @@ class Gem::Installer
|
|
513
530
|
|
514
531
|
File.open bin_script_path, 'wb', 0755 do |file|
|
515
532
|
file.print app_script_text(filename)
|
533
|
+
file.chmod(options[:prog_mode] || 0755)
|
516
534
|
end
|
517
535
|
|
518
536
|
verbose bin_script_path
|
@@ -528,8 +546,8 @@ class Gem::Installer
|
|
528
546
|
src = File.join gem_dir, spec.bindir, filename
|
529
547
|
dst = File.join bindir, formatted_program_filename(filename)
|
530
548
|
|
531
|
-
if File.exist? dst
|
532
|
-
if File.symlink? dst
|
549
|
+
if File.exist? dst
|
550
|
+
if File.symlink? dst
|
533
551
|
link = File.readlink(dst).split File::SEPARATOR
|
534
552
|
cur_version = Gem::Version.create(link[-3].sub(/^.*-/, ''))
|
535
553
|
return if spec.version < cur_version
|
@@ -563,7 +581,7 @@ class Gem::Installer
|
|
563
581
|
path = File.join gem_dir, spec.bindir, bin_file_name
|
564
582
|
first_line = File.open(path, "rb") {|file| file.gets}
|
565
583
|
|
566
|
-
if /\A#!/ =~ first_line
|
584
|
+
if /\A#!/ =~ first_line
|
567
585
|
# Preserve extra words on shebang line, like "-w". Thanks RPA.
|
568
586
|
shebang = first_line.sub(/\A\#!.*?ruby\S*((\s+\S+)+)/, "#!#{Gem.ruby}")
|
569
587
|
opts = $1
|
@@ -588,9 +606,9 @@ class Gem::Installer
|
|
588
606
|
end
|
589
607
|
|
590
608
|
"#!#{which}"
|
591
|
-
elsif not ruby_name
|
609
|
+
elsif not ruby_name
|
592
610
|
"#!#{Gem.ruby}#{opts}"
|
593
|
-
elsif opts
|
611
|
+
elsif opts
|
594
612
|
"#!/bin/sh\n'exec' #{ruby_name.dump} '-x' \"$0\" \"$@\"\n#{shebang}"
|
595
613
|
else
|
596
614
|
# Create a plain shebang line.
|
@@ -616,9 +634,9 @@ class Gem::Installer
|
|
616
634
|
end
|
617
635
|
|
618
636
|
def ensure_required_ruby_version_met # :nodoc:
|
619
|
-
if rrv = spec.required_ruby_version
|
620
|
-
|
621
|
-
|
637
|
+
if rrv = spec.required_ruby_version
|
638
|
+
ruby_version = Gem.ruby_version
|
639
|
+
unless rrv.satisfied_by? ruby_version
|
622
640
|
raise Gem::RuntimeRequirementNotMetError,
|
623
641
|
"#{spec.name} requires Ruby version #{rrv}. The current ruby version is #{ruby_version}."
|
624
642
|
end
|
@@ -626,8 +644,8 @@ class Gem::Installer
|
|
626
644
|
end
|
627
645
|
|
628
646
|
def ensure_required_rubygems_version_met # :nodoc:
|
629
|
-
if rrgv = spec.required_rubygems_version
|
630
|
-
unless rrgv.satisfied_by? Gem.rubygems_version
|
647
|
+
if rrgv = spec.required_rubygems_version
|
648
|
+
unless rrgv.satisfied_by? Gem.rubygems_version
|
631
649
|
rg_version = Gem::VERSION
|
632
650
|
raise Gem::RuntimeRequirementNotMetError,
|
633
651
|
"#{spec.name} requires RubyGems version #{rrgv}. The current RubyGems version is #{rg_version}. " +
|
@@ -687,16 +705,16 @@ class Gem::Installer
|
|
687
705
|
File::ALT_SEPARATOR
|
688
706
|
|
689
707
|
path = ENV['PATH']
|
690
|
-
if Gem.win_platform?
|
708
|
+
if Gem.win_platform?
|
691
709
|
path = path.downcase
|
692
710
|
user_bin_dir = user_bin_dir.downcase
|
693
711
|
end
|
694
712
|
|
695
713
|
path = path.split(File::PATH_SEPARATOR)
|
696
714
|
|
697
|
-
unless path.include? user_bin_dir
|
715
|
+
unless path.include? user_bin_dir
|
698
716
|
unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV['HOME'], '~'))
|
699
|
-
unless self.class.path_warning
|
717
|
+
unless self.class.path_warning
|
700
718
|
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
|
701
719
|
self.class.path_warning = true
|
702
720
|
end
|
@@ -705,7 +723,7 @@ class Gem::Installer
|
|
705
723
|
end
|
706
724
|
|
707
725
|
def verify_gem_home(unpack = false) # :nodoc:
|
708
|
-
FileUtils.mkdir_p gem_home
|
726
|
+
FileUtils.mkdir_p gem_home, :mode => options[:dir_mode] && 0755
|
709
727
|
raise Gem::FilePermissionError, gem_home unless
|
710
728
|
unpack or File.writable?(gem_home)
|
711
729
|
end
|
@@ -715,11 +733,11 @@ class Gem::Installer
|
|
715
733
|
raise Gem::InstallError, "#{spec} has an invalid name"
|
716
734
|
end
|
717
735
|
|
718
|
-
if spec.raw_require_paths.any?{|path| path =~ /\
|
736
|
+
if spec.raw_require_paths.any?{|path| path =~ /\R/ }
|
719
737
|
raise Gem::InstallError, "#{spec} has an invalid require_paths"
|
720
738
|
end
|
721
739
|
|
722
|
-
if spec.extensions.any?{|ext| ext =~ /\
|
740
|
+
if spec.extensions.any?{|ext| ext =~ /\R/ }
|
723
741
|
raise Gem::InstallError, "#{spec} has an invalid extensions"
|
724
742
|
end
|
725
743
|
|
@@ -727,7 +745,7 @@ class Gem::Installer
|
|
727
745
|
raise Gem::InstallError, "#{spec} has an invalid specification_version"
|
728
746
|
end
|
729
747
|
|
730
|
-
if spec.dependencies.any? {|dep| dep.type =~ /\
|
748
|
+
if spec.dependencies.any? {|dep| dep.type =~ /\R/ || dep.name =~ /\R/ }
|
731
749
|
raise Gem::InstallError, "#{spec} has an invalid dependencies"
|
732
750
|
end
|
733
751
|
end
|
@@ -751,11 +769,11 @@ require 'rubygems'
|
|
751
769
|
|
752
770
|
version = "#{Gem::Requirement.default}.a"
|
753
771
|
|
754
|
-
|
755
|
-
|
756
|
-
str = str.
|
757
|
-
if str
|
758
|
-
version =
|
772
|
+
str = ARGV.first
|
773
|
+
if str
|
774
|
+
str = str.b[/\\A_(.*)_\\z/, 1]
|
775
|
+
if str and Gem::Version.correct?(str)
|
776
|
+
version = str
|
759
777
|
ARGV.shift
|
760
778
|
end
|
761
779
|
end
|
@@ -773,17 +791,38 @@ TEXT
|
|
773
791
|
# return the stub script text used to launch the true Ruby script
|
774
792
|
|
775
793
|
def windows_stub_script(bindir, bin_file_name)
|
776
|
-
|
777
|
-
|
794
|
+
rb_config = RbConfig::CONFIG
|
795
|
+
rb_topdir = RbConfig::TOPDIR || File.dirname(rb_config["bindir"])
|
796
|
+
|
797
|
+
# get ruby executable file name from RbConfig
|
798
|
+
ruby_exe = "#{rb_config['RUBY_INSTALL_NAME']}#{rb_config['EXEEXT']}"
|
799
|
+
ruby_exe = "ruby.exe" if ruby_exe.empty?
|
800
|
+
|
801
|
+
if File.exist?(File.join bindir, ruby_exe)
|
802
|
+
# stub & ruby.exe withing same folder. Portable
|
803
|
+
<<-TEXT
|
778
804
|
@ECHO OFF
|
779
|
-
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
805
|
+
@"%~dp0#{ruby_exe}" "%~dpn0" %*
|
806
|
+
TEXT
|
807
|
+
elsif bindir.downcase.start_with? rb_topdir.downcase
|
808
|
+
# stub within ruby folder, but not standard bin. Portable
|
809
|
+
require 'pathname'
|
810
|
+
from = Pathname.new bindir
|
811
|
+
to = Pathname.new "#{rb_topdir}/bin"
|
812
|
+
rel = to.relative_path_from from
|
813
|
+
<<-TEXT
|
814
|
+
@ECHO OFF
|
815
|
+
@"%~dp0#{rel}/#{ruby_exe}" "%~dpn0" %*
|
816
|
+
TEXT
|
817
|
+
else
|
818
|
+
# outside ruby folder, maybe -user-install or bundler. Portable, but ruby
|
819
|
+
# is dependent on PATH
|
820
|
+
<<-TEXT
|
821
|
+
@ECHO OFF
|
822
|
+
@#{ruby_exe} "%~dpn0" %*
|
823
|
+
TEXT
|
824
|
+
end
|
785
825
|
end
|
786
|
-
|
787
826
|
##
|
788
827
|
# Builds extensions. Valid types of extensions are extconf.rb files,
|
789
828
|
# configure scripts and rakefiles or mkrf_conf files.
|
@@ -821,14 +860,14 @@ TEXT
|
|
821
860
|
# without the full gem installed.
|
822
861
|
|
823
862
|
def extract_bin
|
824
|
-
@package.extract_files gem_dir, "
|
863
|
+
@package.extract_files gem_dir, "#{spec.bindir}/*"
|
825
864
|
end
|
826
865
|
|
827
866
|
##
|
828
867
|
# Prefix and suffix the program filename the same as ruby.
|
829
868
|
|
830
869
|
def formatted_program_filename(filename)
|
831
|
-
if @format_executable
|
870
|
+
if @format_executable
|
832
871
|
self.class.exec_format % File.basename(filename)
|
833
872
|
else
|
834
873
|
filename
|
@@ -887,7 +926,8 @@ TEXT
|
|
887
926
|
|
888
927
|
build_info_dir = File.join gem_home, 'build_info'
|
889
928
|
|
890
|
-
|
929
|
+
dir_mode = options[:dir_mode]
|
930
|
+
FileUtils.mkdir_p build_info_dir, :mode => dir_mode && 0755
|
891
931
|
|
892
932
|
build_info_file = File.join build_info_dir, "#{spec.full_name}.info"
|
893
933
|
|
@@ -896,6 +936,8 @@ TEXT
|
|
896
936
|
io.puts arg
|
897
937
|
end
|
898
938
|
end
|
939
|
+
|
940
|
+
File.chmod(dir_mode, build_info_dir) if dir_mode
|
899
941
|
end
|
900
942
|
|
901
943
|
##
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'rubygems/test_case'
|
3
3
|
require 'rubygems/installer'
|
4
|
-
require 'rubygems/deprecate'
|
5
4
|
|
6
5
|
class Gem::Installer
|
7
6
|
|
@@ -107,18 +106,6 @@ class Gem::InstallerTestCase < Gem::TestCase
|
|
107
106
|
Gem::Installer.path_warning = false
|
108
107
|
end
|
109
108
|
|
110
|
-
def util_gem_bindir spec = @spec # :nodoc:
|
111
|
-
spec.bin_dir
|
112
|
-
end
|
113
|
-
|
114
|
-
def util_gem_dir spec = @spec # :nodoc:
|
115
|
-
spec.gem_dir
|
116
|
-
end
|
117
|
-
|
118
|
-
extend Gem::Deprecate
|
119
|
-
deprecate :util_gem_bindir, "@spec.bin_dir", 2016, 10
|
120
|
-
deprecate :util_gem_dir, "@spec.gem_dir", 2016, 10
|
121
|
-
|
122
109
|
##
|
123
110
|
# The path where installed executables live
|
124
111
|
|
@@ -132,9 +119,9 @@ class Gem::InstallerTestCase < Gem::TestCase
|
|
132
119
|
# The executable is also written to the bin dir in @tmpdir and the installed
|
133
120
|
# gem directory for +spec+.
|
134
121
|
|
135
|
-
def util_make_exec(spec = @spec, shebang = "#!/usr/bin/ruby")
|
122
|
+
def util_make_exec(spec = @spec, shebang = "#!/usr/bin/ruby", bindir = "bin")
|
136
123
|
spec.executables = %w[executable]
|
137
|
-
spec.
|
124
|
+
spec.bindir = bindir
|
138
125
|
|
139
126
|
exec_path = spec.bin_file "executable"
|
140
127
|
write_file exec_path do |io|
|
@@ -196,4 +183,3 @@ class Gem::InstallerTestCase < Gem::TestCase
|
|
196
183
|
end
|
197
184
|
|
198
185
|
end
|
199
|
-
|
@@ -24,8 +24,10 @@ module Gem::LocalRemoteOptions
|
|
24
24
|
raise OptionParser::InvalidArgument, value
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
valid_uri_schemes = ["http", "https", "file", "s3"]
|
28
|
+
unless valid_uri_schemes.include?(uri.scheme)
|
29
|
+
msg = "Invalid uri scheme for #{value}\nPreface URLs with one of #{valid_uri_schemes.map{|s| "#{s}://"}}"
|
30
|
+
raise ArgumentError, msg
|
29
31
|
end
|
30
32
|
|
31
33
|
value
|
@@ -106,7 +108,7 @@ module Gem::LocalRemoteOptions
|
|
106
108
|
|
107
109
|
source << '/' if source !~ /\/\z/
|
108
110
|
|
109
|
-
if options.delete :sources_cleared
|
111
|
+
if options.delete :sources_cleared
|
110
112
|
Gem.sources = [source]
|
111
113
|
else
|
112
114
|
Gem.sources << source unless Gem.sources.include?(source)
|
@@ -146,4 +148,3 @@ module Gem::LocalRemoteOptions
|
|
146
148
|
end
|
147
149
|
|
148
150
|
end
|
149
|
-
|
data/lib/rubygems/mock_gem_ui.rb
CHANGED
@@ -12,7 +12,7 @@ class Gem::MockGemUi < Gem::StreamUI
|
|
12
12
|
|
13
13
|
class InputEOFError < RuntimeError
|
14
14
|
|
15
|
-
def initialize
|
15
|
+
def initialize(question)
|
16
16
|
super "Out of input for MockGemUi on #{question.inspect}"
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ class Gem::MockGemUi < Gem::StreamUI
|
|
21
21
|
class TermError < RuntimeError
|
22
22
|
attr_reader :exit_code
|
23
23
|
|
24
|
-
def initialize
|
24
|
+
def initialize(exit_code)
|
25
25
|
super
|
26
26
|
@exit_code = exit_code
|
27
27
|
end
|
@@ -56,7 +56,7 @@ class Gem::MockGemUi < Gem::StreamUI
|
|
56
56
|
@terminated = false
|
57
57
|
end
|
58
58
|
|
59
|
-
def ask
|
59
|
+
def ask(question)
|
60
60
|
raise InputEOFError, question if @ins.eof?
|
61
61
|
|
62
62
|
super
|
@@ -86,4 +86,3 @@ class Gem::MockGemUi < Gem::StreamUI
|
|
86
86
|
end
|
87
87
|
|
88
88
|
end
|
89
|
-
|
data/lib/rubygems/name_tuple.rb
CHANGED
@@ -24,7 +24,7 @@ class Gem::NameTuple
|
|
24
24
|
# Turn an array of [name, version, platform] into an array of
|
25
25
|
# NameTuple objects.
|
26
26
|
|
27
|
-
def self.from_list
|
27
|
+
def self.from_list(list)
|
28
28
|
list.map { |t| new(*t) }
|
29
29
|
end
|
30
30
|
|
@@ -32,7 +32,7 @@ class Gem::NameTuple
|
|
32
32
|
# Turn an array of NameTuple objects back into an array of
|
33
33
|
# [name, version, platform] tuples.
|
34
34
|
|
35
|
-
def self.to_basic
|
35
|
+
def self.to_basic(list)
|
36
36
|
list.map { |t| t.to_a }
|
37
37
|
end
|
38
38
|
|
@@ -90,7 +90,7 @@ class Gem::NameTuple
|
|
90
90
|
|
91
91
|
alias to_s inspect # :nodoc:
|
92
92
|
|
93
|
-
def <=>
|
93
|
+
def <=>(other)
|
94
94
|
[@name, @version, @platform == Gem::Platform::RUBY ? -1 : 1] <=>
|
95
95
|
[other.name, other.version,
|
96
96
|
other.platform == Gem::Platform::RUBY ? -1 : 1]
|
@@ -102,7 +102,7 @@ class Gem::NameTuple
|
|
102
102
|
# Compare with +other+. Supports another NameTuple or an Array
|
103
103
|
# in the [name, version, platform] format.
|
104
104
|
|
105
|
-
def ==
|
105
|
+
def ==(other)
|
106
106
|
case other
|
107
107
|
when self.class
|
108
108
|
@name == other.name and
|
@@ -31,7 +31,7 @@ class Gem::Package::DigestIO
|
|
31
31
|
# digests['SHA1'].hexdigest #=> "aaf4c61d[...]"
|
32
32
|
# digests['SHA512'].hexdigest #=> "9b71d224[...]"
|
33
33
|
|
34
|
-
def self.wrap
|
34
|
+
def self.wrap(io, digests)
|
35
35
|
digest_io = new io, digests
|
36
36
|
|
37
37
|
yield digest_io
|
@@ -43,7 +43,7 @@ class Gem::Package::DigestIO
|
|
43
43
|
# Creates a new DigestIO instance. Using ::wrap is recommended, see the
|
44
44
|
# ::wrap documentation for documentation of +io+ and +digests+.
|
45
45
|
|
46
|
-
def initialize
|
46
|
+
def initialize(io, digests)
|
47
47
|
@io = io
|
48
48
|
@digests = digests
|
49
49
|
end
|
@@ -51,7 +51,7 @@ class Gem::Package::DigestIO
|
|
51
51
|
##
|
52
52
|
# Writes +data+ to the underlying IO and updates the digests
|
53
53
|
|
54
|
-
def write
|
54
|
+
def write(data)
|
55
55
|
result = @io.write data
|
56
56
|
|
57
57
|
@digests.each do |_, digest|
|
@@ -62,4 +62,3 @@ class Gem::Package::DigestIO
|
|
62
62
|
end
|
63
63
|
|
64
64
|
end
|
65
|
-
|
@@ -10,7 +10,7 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
|
|
10
10
|
|
11
11
|
attr_reader :path
|
12
12
|
|
13
|
-
def initialize
|
13
|
+
def initialize(path)
|
14
14
|
@path = path
|
15
15
|
end
|
16
16
|
|
@@ -22,13 +22,12 @@ class Gem::Package::FileSource < Gem::Package::Source # :nodoc: all
|
|
22
22
|
File.exist? path
|
23
23
|
end
|
24
24
|
|
25
|
-
def with_write_io
|
25
|
+
def with_write_io(&block)
|
26
26
|
File.open path, 'wb', &block
|
27
27
|
end
|
28
28
|
|
29
|
-
def with_read_io
|
29
|
+
def with_read_io(&block)
|
30
30
|
File.open path, 'rb', &block
|
31
31
|
end
|
32
32
|
|
33
33
|
end
|
34
|
-
|
@@ -11,7 +11,7 @@ class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
|
|
11
11
|
|
12
12
|
attr_reader :io
|
13
13
|
|
14
|
-
def initialize
|
14
|
+
def initialize(io)
|
15
15
|
@io = io
|
16
16
|
end
|
17
17
|
|
@@ -43,4 +43,3 @@ class Gem::Package::IOSource < Gem::Package::Source # :nodoc: all
|
|
43
43
|
end
|
44
44
|
|
45
45
|
end
|
46
|
-
|
data/lib/rubygems/package/old.rb
CHANGED
@@ -19,7 +19,7 @@ class Gem::Package::Old < Gem::Package
|
|
19
19
|
# Creates a new old-format package reader for +gem+. Old-format packages
|
20
20
|
# cannot be written.
|
21
21
|
|
22
|
-
def initialize
|
22
|
+
def initialize(gem, security_policy)
|
23
23
|
require 'fileutils'
|
24
24
|
require 'zlib'
|
25
25
|
Gem.load_yaml
|
@@ -49,7 +49,7 @@ class Gem::Package::Old < Gem::Package
|
|
49
49
|
##
|
50
50
|
# Extracts the files in this package into +destination_dir+
|
51
51
|
|
52
|
-
def extract_files
|
52
|
+
def extract_files(destination_dir)
|
53
53
|
verify
|
54
54
|
|
55
55
|
errstr = "Error reading files from gem"
|
@@ -78,9 +78,9 @@ class Gem::Package::Old < Gem::Package
|
|
78
78
|
|
79
79
|
FileUtils.rm_rf destination
|
80
80
|
|
81
|
-
FileUtils.mkdir_p File.dirname
|
81
|
+
FileUtils.mkdir_p File.dirname(destination), :mode => dir_mode && 0755
|
82
82
|
|
83
|
-
File.open destination, 'wb', entry['mode'] do |out|
|
83
|
+
File.open destination, 'wb', file_mode(entry['mode']) do |out|
|
84
84
|
out.write file_data
|
85
85
|
end
|
86
86
|
|
@@ -94,7 +94,7 @@ class Gem::Package::Old < Gem::Package
|
|
94
94
|
##
|
95
95
|
# Reads the file list section from the old-format gem +io+
|
96
96
|
|
97
|
-
def file_list
|
97
|
+
def file_list(io) # :nodoc:
|
98
98
|
header = String.new
|
99
99
|
|
100
100
|
read_until_dashes io do |line|
|
@@ -107,7 +107,7 @@ class Gem::Package::Old < Gem::Package
|
|
107
107
|
##
|
108
108
|
# Reads lines until a "---" separator is found
|
109
109
|
|
110
|
-
def read_until_dashes
|
110
|
+
def read_until_dashes(io) # :nodoc:
|
111
111
|
while (line = io.gets) && line.chomp.strip != "---" do
|
112
112
|
yield line if block_given?
|
113
113
|
end
|
@@ -116,7 +116,7 @@ class Gem::Package::Old < Gem::Package
|
|
116
116
|
##
|
117
117
|
# Skips the Ruby self-install header in +io+.
|
118
118
|
|
119
|
-
def skip_ruby
|
119
|
+
def skip_ruby(io) # :nodoc:
|
120
120
|
loop do
|
121
121
|
line = io.gets
|
122
122
|
|
@@ -144,17 +144,9 @@ class Gem::Package::Old < Gem::Package
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
|
-
yaml_error = if RUBY_VERSION < '1.9' then
|
148
|
-
YAML::ParseError
|
149
|
-
elsif YAML.const_defined?(:ENGINE) && YAML::ENGINE.yamler == 'syck' then
|
150
|
-
YAML::ParseError
|
151
|
-
else
|
152
|
-
YAML::SyntaxError
|
153
|
-
end
|
154
|
-
|
155
147
|
begin
|
156
148
|
@spec = Gem::Specification.from_yaml yaml
|
157
|
-
rescue
|
149
|
+
rescue YAML::SyntaxError
|
158
150
|
raise Gem::Exception, "Failed to parse gem specification out of gem file"
|
159
151
|
end
|
160
152
|
rescue ArgumentError
|