rubygems-update 3.3.18 → 3.3.22
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/CHANGELOG.md +65 -0
- data/Manifest.txt +11 -0
- data/bin/gem +2 -2
- data/bin/update_rubygems +4 -4
- data/bundler/CHANGELOG.md +100 -0
- data/bundler/UPGRADING.md +11 -4
- data/bundler/bundler.gemspec +6 -8
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/common.rb +1 -0
- data/bundler/lib/bundler/cli/install.rb +5 -2
- data/bundler/lib/bundler/cli/outdated.rb +12 -3
- data/bundler/lib/bundler/cli/platform.rb +1 -1
- data/bundler/lib/bundler/cli.rb +7 -4
- data/bundler/lib/bundler/current_ruby.rb +14 -5
- data/bundler/lib/bundler/definition.rb +102 -31
- data/bundler/lib/bundler/dependency.rb +18 -85
- data/bundler/lib/bundler/dsl.rb +2 -2
- data/bundler/lib/bundler/endpoint_specification.rb +2 -13
- data/bundler/lib/bundler/feature_flag.rb +0 -1
- data/bundler/lib/bundler/fetcher.rb +6 -6
- data/bundler/lib/bundler/gem_helpers.rb +7 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +8 -18
- data/bundler/lib/bundler/index.rb +10 -12
- data/bundler/lib/bundler/injector.rb +2 -1
- data/bundler/lib/bundler/inline.rb +1 -1
- data/bundler/lib/bundler/installer/standalone.rb +1 -1
- data/bundler/lib/bundler/installer.rb +14 -12
- data/bundler/lib/bundler/lazy_specification.rb +30 -23
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/man/bundle-add.1 +6 -2
- data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +7 -1
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +25 -6
- data/bundler/lib/bundler/man/bundle-config.1.ronn +16 -6
- data/bundler/lib/bundler/man/bundle-console.1 +53 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
- data/bundler/lib/bundler/man/bundle-help.1 +13 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/bundler/lib/bundler/man/bundle-install.1 +5 -1
- data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +35 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/bundler/lib/bundler/man/bundle.1 +15 -10
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +23 -47
- data/bundler/lib/bundler/man/gemfile.5.ronn +32 -43
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/plugin.rb +2 -0
- data/bundler/lib/bundler/remote_specification.rb +6 -11
- data/bundler/lib/bundler/resolver/base.rb +50 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +11 -8
- data/bundler/lib/bundler/resolver.rb +95 -90
- data/bundler/lib/bundler/ruby_dsl.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +5 -5
- data/bundler/lib/bundler/rubygems_ext.rb +52 -1
- data/bundler/lib/bundler/rubygems_gem_installer.rb +19 -12
- data/bundler/lib/bundler/settings.rb +1 -1
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +4 -0
- data/bundler/lib/bundler/spec_set.rb +48 -33
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +3 -3
- data/lib/rubygems/available_set.rb +3 -3
- data/lib/rubygems/basic_specification.rb +4 -4
- data/lib/rubygems/command.rb +25 -25
- data/lib/rubygems/command_manager.rb +9 -9
- data/lib/rubygems/commands/build_command.rb +8 -8
- data/lib/rubygems/commands/cert_command.rb +33 -33
- data/lib/rubygems/commands/check_command.rb +20 -20
- data/lib/rubygems/commands/cleanup_command.rb +17 -17
- data/lib/rubygems/commands/contents_command.rb +13 -13
- data/lib/rubygems/commands/dependency_command.rb +16 -16
- data/lib/rubygems/commands/environment_command.rb +5 -5
- data/lib/rubygems/commands/fetch_command.rb +8 -8
- data/lib/rubygems/commands/generate_index_command.rb +17 -17
- data/lib/rubygems/commands/help_command.rb +3 -3
- data/lib/rubygems/commands/info_command.rb +3 -3
- data/lib/rubygems/commands/install_command.rb +20 -20
- data/lib/rubygems/commands/list_command.rb +3 -3
- data/lib/rubygems/commands/lock_command.rb +4 -4
- data/lib/rubygems/commands/mirror_command.rb +3 -3
- data/lib/rubygems/commands/open_command.rb +9 -9
- data/lib/rubygems/commands/outdated_command.rb +5 -5
- data/lib/rubygems/commands/owner_command.rb +11 -11
- data/lib/rubygems/commands/pristine_command.rb +36 -36
- data/lib/rubygems/commands/push_command.rb +8 -8
- data/lib/rubygems/commands/query_command.rb +8 -8
- data/lib/rubygems/commands/rdoc_command.rb +17 -17
- data/lib/rubygems/commands/search_command.rb +3 -3
- data/lib/rubygems/commands/server_command.rb +3 -3
- data/lib/rubygems/commands/setup_command.rb +96 -106
- data/lib/rubygems/commands/signin_command.rb +9 -9
- data/lib/rubygems/commands/signout_command.rb +7 -7
- data/lib/rubygems/commands/sources_command.rb +21 -21
- data/lib/rubygems/commands/specification_command.rb +13 -13
- data/lib/rubygems/commands/stale_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +40 -40
- data/lib/rubygems/commands/unpack_command.rb +12 -12
- data/lib/rubygems/commands/update_command.rb +40 -56
- data/lib/rubygems/commands/which_command.rb +7 -7
- data/lib/rubygems/commands/yank_command.rb +11 -11
- data/lib/rubygems/config_file.rb +21 -21
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
- data/lib/rubygems/core_ext/kernel_require.rb +1 -1
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
- data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
- data/lib/rubygems/defaults.rb +16 -16
- data/lib/rubygems/dependency.rb +9 -9
- data/lib/rubygems/dependency_installer.rb +13 -13
- data/lib/rubygems/dependency_list.rb +6 -6
- data/lib/rubygems/doctor.rb +18 -18
- data/lib/rubygems/errors.rb +2 -2
- data/lib/rubygems/exceptions.rb +5 -5
- data/lib/rubygems/ext/build_error.rb +1 -1
- data/lib/rubygems/ext/builder.rb +16 -16
- data/lib/rubygems/ext/cargo_builder.rb +7 -7
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +1 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +8 -8
- data/lib/rubygems/ext/rake_builder.rb +3 -3
- data/lib/rubygems/ext.rb +7 -7
- data/lib/rubygems/gem_runner.rb +5 -5
- data/lib/rubygems/gemcutter_utilities.rb +31 -28
- data/lib/rubygems/indexer.rb +27 -27
- data/lib/rubygems/install_default_message.rb +2 -2
- data/lib/rubygems/install_message.rb +2 -2
- data/lib/rubygems/install_update_options.rb +55 -55
- data/lib/rubygems/installer.rb +32 -40
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
- data/lib/rubygems/local_remote_options.rb +18 -20
- data/lib/rubygems/mock_gem_ui.rb +2 -2
- data/lib/rubygems/name_tuple.rb +4 -4
- data/lib/rubygems/optparse.rb +1 -1
- data/lib/rubygems/package/file_source.rb +2 -2
- data/lib/rubygems/package/old.rb +8 -8
- data/lib/rubygems/package/tar_header.rb +50 -50
- data/lib/rubygems/package/tar_reader/entry.rb +2 -2
- data/lib/rubygems/package/tar_reader.rb +1 -1
- data/lib/rubygems/package/tar_writer.rb +7 -7
- data/lib/rubygems/package.rb +54 -43
- data/lib/rubygems/package_task.rb +4 -4
- data/lib/rubygems/platform.rb +66 -55
- data/lib/rubygems/psych_tree.rb +1 -1
- data/lib/rubygems/query_utils.rb +35 -35
- data/lib/rubygems/rdoc.rb +2 -2
- data/lib/rubygems/remote_fetcher.rb +22 -22
- data/lib/rubygems/request/connection_pools.rb +4 -4
- data/lib/rubygems/request/http_pool.rb +1 -1
- data/lib/rubygems/request.rb +22 -22
- data/lib/rubygems/request_set/gem_dependency_api.rb +18 -18
- data/lib/rubygems/request_set/lockfile/parser.rb +26 -26
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +4 -4
- data/lib/rubygems/request_set/lockfile.rb +5 -5
- data/lib/rubygems/request_set.rb +17 -17
- data/lib/rubygems/requirement.rb +6 -6
- data/lib/rubygems/resolver/activation_request.rb +3 -3
- data/lib/rubygems/resolver/api_set.rb +4 -4
- data/lib/rubygems/resolver/api_specification.rb +6 -6
- data/lib/rubygems/resolver/best_set.rb +5 -5
- data/lib/rubygems/resolver/conflict.rb +10 -10
- data/lib/rubygems/resolver/dependency_request.rb +2 -2
- data/lib/rubygems/resolver/git_set.rb +2 -2
- data/lib/rubygems/resolver/git_specification.rb +6 -6
- data/lib/rubygems/resolver/index_set.rb +3 -3
- data/lib/rubygems/resolver/index_specification.rb +6 -5
- data/lib/rubygems/resolver/installed_specification.rb +4 -4
- data/lib/rubygems/resolver/installer_set.rb +11 -16
- data/lib/rubygems/resolver/local_specification.rb +2 -2
- data/lib/rubygems/resolver/lock_set.rb +4 -4
- data/lib/rubygems/resolver/lock_specification.rb +4 -4
- data/lib/rubygems/resolver/molinillo.rb +1 -1
- data/lib/rubygems/resolver/specification.rb +1 -1
- data/lib/rubygems/resolver/vendor_set.rb +1 -1
- data/lib/rubygems/resolver/vendor_specification.rb +3 -3
- data/lib/rubygems/resolver.rb +39 -39
- data/lib/rubygems/s3_uri_signer.rb +6 -6
- data/lib/rubygems/safe_yaml.rb +2 -2
- data/lib/rubygems/security/policies.rb +11 -11
- data/lib/rubygems/security/policy.rb +18 -18
- data/lib/rubygems/security/signer.rb +5 -5
- data/lib/rubygems/security/trust_dir.rb +3 -3
- data/lib/rubygems/security.rb +28 -28
- data/lib/rubygems/security_option.rb +5 -5
- data/lib/rubygems/source/git.rb +21 -21
- data/lib/rubygems/source/installed.rb +1 -1
- data/lib/rubygems/source/local.rb +2 -2
- data/lib/rubygems/source/specific_file.rb +1 -1
- data/lib/rubygems/source.rb +16 -16
- data/lib/rubygems/spec_fetcher.rb +9 -9
- data/lib/rubygems/specification.rb +63 -62
- data/lib/rubygems/specification_policy.rb +15 -15
- data/lib/rubygems/stub_specification.rb +5 -5
- data/lib/rubygems/tsort.rb +1 -1
- data/lib/rubygems/uninstaller.rb +18 -18
- data/lib/rubygems/uri.rb +4 -4
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +33 -19
- data/lib/rubygems/util/licenses.rb +3 -3
- data/lib/rubygems/util.rb +10 -10
- data/lib/rubygems/validator.rb +5 -5
- data/lib/rubygems/version.rb +15 -9
- data/lib/rubygems/version_option.rb +3 -3
- data/lib/rubygems.rb +62 -61
- data/rubygems-update.gemspec +2 -2
- data/setup.rb +9 -9
- data/test/rubygems/helper.rb +132 -134
- data/test/rubygems/installer_test_case.rb +13 -13
- data/test/rubygems/package/tar_test_case.rb +2 -2
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/rubygems_plugin.rb +2 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +4 -4
- data/test/rubygems/test_bundled_ca.rb +10 -10
- data/test/rubygems/test_config.rb +3 -3
- data/test/rubygems/test_deprecate.rb +3 -3
- data/test/rubygems/test_exit.rb +2 -2
- data/test/rubygems/test_gem.rb +342 -342
- data/test/rubygems/test_gem_available_set.rb +21 -21
- data/test/rubygems/test_gem_bundler_version_finder.rb +1 -1
- data/test/rubygems/test_gem_command.rb +44 -44
- data/test/rubygems/test_gem_command_manager.rb +29 -29
- data/test/rubygems/test_gem_commands_build_command.rb +63 -63
- data/test/rubygems/test_gem_commands_cert_command.rb +97 -99
- data/test/rubygems/test_gem_commands_check_command.rb +4 -4
- data/test/rubygems/test_gem_commands_cleanup_command.rb +40 -40
- data/test/rubygems/test_gem_commands_contents_command.rb +27 -27
- data/test/rubygems/test_gem_commands_dependency_command.rb +36 -36
- data/test/rubygems/test_gem_commands_environment_command.rb +16 -16
- data/test/rubygems/test_gem_commands_fetch_command.rb +37 -37
- data/test/rubygems/test_gem_commands_generate_index_command.rb +7 -7
- data/test/rubygems/test_gem_commands_help_command.rb +13 -13
- data/test/rubygems/test_gem_commands_info_command.rb +28 -2
- data/test/rubygems/test_gem_commands_install_command.rb +131 -131
- data/test/rubygems/test_gem_commands_list_command.rb +4 -4
- data/test/rubygems/test_gem_commands_lock_command.rb +10 -10
- data/test/rubygems/test_gem_commands_mirror.rb +2 -2
- data/test/rubygems/test_gem_commands_open_command.rb +4 -4
- data/test/rubygems/test_gem_commands_outdated_command.rb +9 -9
- data/test/rubygems/test_gem_commands_owner_command.rb +41 -41
- data/test/rubygems/test_gem_commands_pristine_command.rb +92 -92
- data/test/rubygems/test_gem_commands_push_command.rb +54 -54
- data/test/rubygems/test_gem_commands_query_command.rb +73 -73
- data/test/rubygems/test_gem_commands_search_command.rb +2 -2
- data/test/rubygems/test_gem_commands_server_command.rb +2 -2
- data/test/rubygems/test_gem_commands_setup_command.rb +119 -85
- data/test/rubygems/test_gem_commands_signin_command.rb +45 -31
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
- data/test/rubygems/test_gem_commands_sources_command.rb +28 -29
- data/test/rubygems/test_gem_commands_specification_command.rb +32 -32
- data/test/rubygems/test_gem_commands_stale_command.rb +4 -4
- data/test/rubygems/test_gem_commands_uninstall_command.rb +75 -75
- data/test/rubygems/test_gem_commands_unpack_command.rb +31 -31
- data/test/rubygems/test_gem_commands_update_command.rb +89 -89
- data/test/rubygems/test_gem_commands_which_command.rb +6 -6
- data/test/rubygems/test_gem_commands_yank_command.rb +40 -40
- data/test/rubygems/test_gem_config_file.rb +93 -81
- data/test/rubygems/test_gem_dependency.rb +73 -73
- data/test/rubygems/test_gem_dependency_installer.rb +165 -165
- data/test/rubygems/test_gem_dependency_list.rb +47 -47
- data/test/rubygems/test_gem_dependency_resolution_error.rb +4 -4
- data/test/rubygems/test_gem_doctor.rb +26 -26
- data/test/rubygems/test_gem_ext_builder.rb +59 -59
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +6 -6
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +8 -8
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +6 -6
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +8 -8
- data/test/rubygems/test_gem_ext_cargo_builder.rb +26 -26
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +3 -3
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +23 -23
- data/test/rubygems/test_gem_ext_cmake_builder.rb +15 -15
- data/test/rubygems/test_gem_ext_configure_builder.rb +13 -13
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
- data/test/rubygems/test_gem_ext_rake_builder.rb +15 -15
- data/test/rubygems/test_gem_gem_runner.rb +7 -7
- data/test/rubygems/test_gem_gemcutter_utilities.rb +66 -66
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +4 -4
- data/test/rubygems/test_gem_indexer.rb +48 -48
- data/test/rubygems/test_gem_install_update_options.rb +16 -16
- data/test/rubygems/test_gem_installer.rb +303 -300
- data/test/rubygems/test_gem_local_remote_options.rb +10 -10
- data/test/rubygems/test_gem_name_tuple.rb +4 -4
- data/test/rubygems/test_gem_package.rb +228 -206
- data/test/rubygems/test_gem_package_old.rb +13 -13
- data/test/rubygems/test_gem_package_tar_header.rb +42 -42
- data/test/rubygems/test_gem_package_tar_reader.rb +8 -8
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +10 -10
- data/test/rubygems/test_gem_package_tar_writer.rb +76 -76
- data/test/rubygems/test_gem_package_task.rb +18 -18
- data/test/rubygems/test_gem_path_support.rb +14 -14
- data/test/rubygems/test_gem_platform.rb +298 -227
- data/test/rubygems/test_gem_rdoc.rb +14 -14
- data/test/rubygems/test_gem_remote_fetcher.rb +149 -149
- data/test/rubygems/test_gem_request.rb +55 -55
- data/test/rubygems/test_gem_request_connection_pools.rb +29 -29
- data/test/rubygems/test_gem_request_set.rb +99 -99
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +204 -206
- data/test/rubygems/test_gem_request_set_lockfile.rb +86 -86
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +56 -56
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +62 -62
- data/test/rubygems/test_gem_requirement.rb +47 -41
- data/test/rubygems/test_gem_resolver.rb +133 -99
- data/test/rubygems/test_gem_resolver_activation_request.rb +6 -6
- data/test/rubygems/test_gem_resolver_api_set.rb +33 -33
- data/test/rubygems/test_gem_resolver_api_specification.rb +47 -47
- data/test/rubygems/test_gem_resolver_best_set.rb +22 -22
- data/test/rubygems/test_gem_resolver_composed_set.rb +1 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +12 -12
- data/test/rubygems/test_gem_resolver_dependency_request.rb +15 -15
- data/test/rubygems/test_gem_resolver_git_set.rb +21 -21
- data/test/rubygems/test_gem_resolver_git_specification.rb +21 -21
- data/test/rubygems/test_gem_resolver_index_set.rb +12 -12
- data/test/rubygems/test_gem_resolver_index_specification.rb +16 -16
- data/test/rubygems/test_gem_resolver_installed_specification.rb +5 -5
- data/test/rubygems/test_gem_resolver_installer_set.rb +78 -34
- data/test/rubygems/test_gem_resolver_local_specification.rb +7 -7
- data/test/rubygems/test_gem_resolver_lock_set.rb +12 -12
- data/test/rubygems/test_gem_resolver_lock_specification.rb +17 -17
- data/test/rubygems/test_gem_resolver_requirement_list.rb +1 -1
- data/test/rubygems/test_gem_resolver_specification.rb +8 -8
- data/test/rubygems/test_gem_resolver_vendor_set.rb +6 -6
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +10 -10
- data/test/rubygems/test_gem_security.rb +67 -67
- data/test/rubygems/test_gem_security_policy.rb +62 -62
- data/test/rubygems/test_gem_security_signer.rb +28 -28
- data/test/rubygems/test_gem_security_trust_dir.rb +4 -4
- data/test/rubygems/test_gem_silent_ui.rb +38 -32
- data/test/rubygems/test_gem_source.rb +44 -44
- data/test/rubygems/test_gem_source_fetch_problem.rb +9 -9
- data/test/rubygems/test_gem_source_git.rb +59 -59
- data/test/rubygems/test_gem_source_installed.rb +16 -16
- data/test/rubygems/test_gem_source_list.rb +5 -5
- data/test/rubygems/test_gem_source_local.rb +14 -14
- data/test/rubygems/test_gem_source_lock.rb +31 -31
- data/test/rubygems/test_gem_source_specific_file.rb +17 -17
- data/test/rubygems/test_gem_source_subpath_problem.rb +7 -7
- data/test/rubygems/test_gem_source_vendor.rb +13 -13
- data/test/rubygems/test_gem_spec_fetcher.rb +72 -72
- data/test/rubygems/test_gem_specification.rb +444 -436
- data/test/rubygems/test_gem_stream_ui.rb +19 -19
- data/test/rubygems/test_gem_stub_specification.rb +32 -32
- data/test/rubygems/test_gem_text.rb +1 -1
- data/test/rubygems/test_gem_uninstaller.rb +112 -112
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +3 -3
- data/test/rubygems/test_gem_uri.rb +4 -4
- data/test/rubygems/test_gem_uri_formatter.rb +14 -14
- data/test/rubygems/test_gem_util.rb +23 -23
- data/test/rubygems/test_gem_validator.rb +8 -8
- data/test/rubygems/test_gem_version.rb +22 -15
- data/test/rubygems/test_gem_version_option.rb +15 -15
- data/test/rubygems/test_kernel.rb +31 -31
- data/test/rubygems/test_project_sanity.rb +1 -1
- data/test/rubygems/test_remote_fetch_error.rb +6 -6
- data/test/rubygems/test_require.rb +43 -43
- data/test/rubygems/test_rubygems.rb +8 -8
- data/test/rubygems/utilities.rb +19 -19
- metadata +14 -3
data/lib/rubygems/ext/builder.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# See LICENSE.txt for permissions.
|
6
6
|
#++
|
7
7
|
|
8
|
-
require_relative
|
8
|
+
require_relative "../user_interaction"
|
9
9
|
|
10
10
|
class Gem::Ext::Builder
|
11
11
|
include Gem::UserInteraction
|
@@ -18,29 +18,29 @@ class Gem::Ext::Builder
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.make(dest_path, results, make_dir = Dir.pwd, sitedir = nil)
|
21
|
-
unless File.exist? File.join(make_dir,
|
22
|
-
raise Gem::InstallError,
|
21
|
+
unless File.exist? File.join(make_dir, "Makefile")
|
22
|
+
raise Gem::InstallError, "Makefile not found"
|
23
23
|
end
|
24
24
|
|
25
25
|
# try to find make program from Ruby configure arguments first
|
26
|
-
RbConfig::CONFIG[
|
27
|
-
make_program_name = ENV[
|
26
|
+
RbConfig::CONFIG["configure_args"] =~ /with-make-prog\=(\w+)/
|
27
|
+
make_program_name = ENV["MAKE"] || ENV["make"] || $1
|
28
28
|
unless make_program_name
|
29
|
-
make_program_name = (/mswin/ =~ RUBY_PLATFORM) ?
|
29
|
+
make_program_name = (/mswin/ =~ RUBY_PLATFORM) ? "nmake" : "make"
|
30
30
|
end
|
31
31
|
make_program = Shellwords.split(make_program_name)
|
32
32
|
|
33
33
|
# The installation of the bundled gems is failed when DESTDIR is empty in mswin platform.
|
34
|
-
destdir = (/\bnmake/i !~ make_program_name || ENV[
|
34
|
+
destdir = (/\bnmake/i !~ make_program_name || ENV["DESTDIR"] && ENV["DESTDIR"] != "") ? "DESTDIR=%s" % ENV["DESTDIR"] : ""
|
35
35
|
|
36
36
|
env = [destdir]
|
37
37
|
|
38
38
|
if sitedir
|
39
|
-
env <<
|
40
|
-
env <<
|
39
|
+
env << "sitearchdir=%s" % sitedir
|
40
|
+
env << "sitelibdir=%s" % sitedir
|
41
41
|
end
|
42
42
|
|
43
|
-
[
|
43
|
+
["clean", "", "install"].each do |target|
|
44
44
|
# Pass DESTDIR via command line to override what's in MAKEFLAGS
|
45
45
|
cmd = [
|
46
46
|
*make_program,
|
@@ -50,7 +50,7 @@ class Gem::Ext::Builder
|
|
50
50
|
begin
|
51
51
|
run(cmd, results, "make #{target}".rstrip, make_dir)
|
52
52
|
rescue Gem::InstallError
|
53
|
-
raise unless target ==
|
53
|
+
raise unless target == "clean" # ignore clean failure
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -59,7 +59,7 @@ class Gem::Ext::Builder
|
|
59
59
|
verbose = Gem.configuration.really_verbose
|
60
60
|
|
61
61
|
begin
|
62
|
-
rubygems_gemdeps, ENV[
|
62
|
+
rubygems_gemdeps, ENV["RUBYGEMS_GEMDEPS"] = ENV["RUBYGEMS_GEMDEPS"], nil
|
63
63
|
if verbose
|
64
64
|
puts("current directory: #{dir}")
|
65
65
|
p(command)
|
@@ -70,7 +70,7 @@ class Gem::Ext::Builder
|
|
70
70
|
|
71
71
|
require "open3"
|
72
72
|
# Set $SOURCE_DATE_EPOCH for the subprocess.
|
73
|
-
build_env = {
|
73
|
+
build_env = { "SOURCE_DATE_EPOCH" => Gem.source_date_epoch_string }.merge(env)
|
74
74
|
output, status = begin
|
75
75
|
Open3.capture2e(build_env, *command, :chdir => dir)
|
76
76
|
rescue => error
|
@@ -82,7 +82,7 @@ class Gem::Ext::Builder
|
|
82
82
|
results << output
|
83
83
|
end
|
84
84
|
ensure
|
85
|
-
ENV[
|
85
|
+
ENV["RUBYGEMS_GEMDEPS"] = rubygems_gemdeps
|
86
86
|
end
|
87
87
|
|
88
88
|
unless status.success?
|
@@ -212,11 +212,11 @@ EOF
|
|
212
212
|
# Writes +output+ to gem_make.out in the extension install directory.
|
213
213
|
|
214
214
|
def write_gem_make_out(output) # :nodoc:
|
215
|
-
destination = File.join @spec.extension_dir,
|
215
|
+
destination = File.join @spec.extension_dir, "gem_make.out"
|
216
216
|
|
217
217
|
FileUtils.mkdir_p @spec.extension_dir
|
218
218
|
|
219
|
-
File.open destination,
|
219
|
+
File.open destination, "wb" do |io|
|
220
220
|
io.puts output
|
221
221
|
end
|
222
222
|
|
@@ -29,14 +29,14 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
29
29
|
def build_crate(dest_path, results, args, cargo_dir)
|
30
30
|
env = build_env
|
31
31
|
cmd = cargo_command(cargo_dir, dest_path, args)
|
32
|
-
runner.call cmd, results,
|
32
|
+
runner.call cmd, results, "cargo", cargo_dir, env
|
33
33
|
|
34
34
|
results
|
35
35
|
end
|
36
36
|
|
37
37
|
def build_env
|
38
38
|
build_env = rb_config_env
|
39
|
-
build_env["RUBY_STATIC"] = "true" if ruby_static? && ENV.key?(
|
39
|
+
build_env["RUBY_STATIC"] = "true" if ruby_static? && ENV.key?("RUBY_STATIC")
|
40
40
|
build_env
|
41
41
|
end
|
42
42
|
|
@@ -46,7 +46,7 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
46
46
|
|
47
47
|
cmd = []
|
48
48
|
cmd += [cargo, "rustc"]
|
49
|
-
cmd += ["--target", ENV[
|
49
|
+
cmd += ["--target", ENV["CARGO_BUILD_TARGET"]] if ENV["CARGO_BUILD_TARGET"]
|
50
50
|
cmd += ["--target-dir", dest_path]
|
51
51
|
cmd += ["--manifest-path", manifest]
|
52
52
|
cmd += ["--lib"]
|
@@ -144,13 +144,13 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
144
144
|
def cargo_dylib_path(dest_path)
|
145
145
|
prefix = so_ext == "dll" ? "" : "lib"
|
146
146
|
path_parts = [dest_path]
|
147
|
-
path_parts << ENV[
|
147
|
+
path_parts << ENV["CARGO_BUILD_TARGET"] if ENV["CARGO_BUILD_TARGET"]
|
148
148
|
path_parts += [profile_target_directory, "#{prefix}#{cargo_crate_name}.#{so_ext}"]
|
149
149
|
File.join(*path_parts)
|
150
150
|
end
|
151
151
|
|
152
152
|
def cargo_crate_name
|
153
|
-
spec.metadata.fetch(
|
153
|
+
spec.metadata.fetch("cargo_crate_name", spec.name).tr("-", "_")
|
154
154
|
end
|
155
155
|
|
156
156
|
def rustc_dynamic_linker_flags(dest_dir)
|
@@ -297,8 +297,8 @@ class Gem::Ext::CargoBuilder < Gem::Ext::Builder
|
|
297
297
|
|
298
298
|
def profile_target_directory
|
299
299
|
case profile
|
300
|
-
when :release then
|
301
|
-
when :dev then
|
300
|
+
when :release then "release"
|
301
|
+
when :dev then "debug"
|
302
302
|
else raise "unknown target directory for profile: #{profile}"
|
303
303
|
end
|
304
304
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
4
4
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd)
|
5
|
-
unless File.exist?(File.join(cmake_dir,
|
6
|
-
require_relative
|
5
|
+
unless File.exist?(File.join(cmake_dir, "Makefile"))
|
6
|
+
require_relative "../command"
|
7
7
|
cmd = ["cmake", ".", "-DCMAKE_INSTALL_PREFIX=#{dest_path}", *Gem::Command.build_args]
|
8
8
|
|
9
9
|
run cmd, results, class_name, cmake_dir
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
9
9
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd)
|
10
|
-
unless File.exist?(File.join(configure_dir,
|
10
|
+
unless File.exist?(File.join(configure_dir, "Makefile"))
|
11
11
|
cmd = ["sh", "./configure", "--prefix=#{dest_path}", *args]
|
12
12
|
|
13
13
|
run cmd, results, class_name, configure_dir
|
@@ -7,8 +7,8 @@
|
|
7
7
|
|
8
8
|
class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
9
9
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, extension_dir=Dir.pwd)
|
10
|
-
require
|
11
|
-
require
|
10
|
+
require "fileutils"
|
11
|
+
require "tempfile"
|
12
12
|
|
13
13
|
tmp_dest = Dir.mktmpdir(".gem.", extension_dir)
|
14
14
|
|
@@ -22,16 +22,16 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
22
22
|
|
23
23
|
begin
|
24
24
|
require "shellwords"
|
25
|
-
cmd = Gem.ruby.shellsplit << "-I" << File.expand_path(
|
25
|
+
cmd = Gem.ruby.shellsplit << "-I" << File.expand_path("../..", __dir__) << File.basename(extension)
|
26
26
|
cmd.push(*args)
|
27
27
|
|
28
28
|
run(cmd, results, class_name, extension_dir) do |s, r|
|
29
|
-
mkmf_log = File.join(extension_dir,
|
29
|
+
mkmf_log = File.join(extension_dir, "mkmf.log")
|
30
30
|
if File.exist? mkmf_log
|
31
31
|
unless s.success?
|
32
32
|
r << "To see why this extension failed to compile, please check" \
|
33
33
|
" the mkmf.log which can be found here:\n"
|
34
|
-
r << " " + File.join(dest_path,
|
34
|
+
r << " " + File.join(dest_path, "mkmf.log") + "\n"
|
35
35
|
end
|
36
36
|
FileUtils.mv mkmf_log, dest_path
|
37
37
|
end
|
@@ -44,7 +44,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
44
44
|
full_tmp_dest = File.join(extension_dir, tmp_dest_relative)
|
45
45
|
|
46
46
|
# TODO remove in RubyGems 4
|
47
|
-
if Gem.install_extension_in_lib
|
47
|
+
if Gem.install_extension_in_lib && lib_dir
|
48
48
|
FileUtils.mkdir_p lib_dir
|
49
49
|
entries = Dir.entries(full_tmp_dest) - %w[. ..]
|
50
50
|
entries = entries.map {|entry| File.join full_tmp_dest, entry }
|
@@ -53,7 +53,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
53
53
|
|
54
54
|
FileUtils::Entry_.new(full_tmp_dest).traverse do |ent|
|
55
55
|
destent = ent.class.new(dest_path, ent.rel)
|
56
|
-
destent.exist?
|
56
|
+
destent.exist? || FileUtils.mv(ent.path, destent.path)
|
57
57
|
end
|
58
58
|
ensure
|
59
59
|
ENV["DESTDIR"] = destdir
|
@@ -67,7 +67,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
|
|
67
67
|
private
|
68
68
|
|
69
69
|
def self.get_relative_path(path, base)
|
70
|
-
path[0..base.length - 1] =
|
70
|
+
path[0..base.length - 1] = "." if path.start_with?(base)
|
71
71
|
path
|
72
72
|
end
|
73
73
|
end
|
@@ -11,16 +11,16 @@ class Gem::Ext::RakeBuilder < Gem::Ext::Builder
|
|
11
11
|
run([Gem.ruby, File.basename(extension), *args], results, class_name, extension_dir)
|
12
12
|
end
|
13
13
|
|
14
|
-
rake = ENV[
|
14
|
+
rake = ENV["rake"]
|
15
15
|
|
16
16
|
if rake
|
17
17
|
require "shellwords"
|
18
18
|
rake = rake.shellsplit
|
19
19
|
else
|
20
20
|
begin
|
21
|
-
rake = [Gem.ruby, "-I#{File.expand_path("../..", __dir__)}", "-rrubygems", Gem.bin_path(
|
21
|
+
rake = [Gem.ruby, "-I#{File.expand_path("../..", __dir__)}", "-rrubygems", Gem.bin_path("rake", "rake")]
|
22
22
|
rescue Gem::Exception
|
23
|
-
rake = [Gem.default_exec_format %
|
23
|
+
rake = [Gem.default_exec_format % "rake"]
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
data/lib/rubygems/ext.rb
CHANGED
@@ -10,10 +10,10 @@
|
|
10
10
|
|
11
11
|
module Gem::Ext; end
|
12
12
|
|
13
|
-
require_relative
|
14
|
-
require_relative
|
15
|
-
require_relative
|
16
|
-
require_relative
|
17
|
-
require_relative
|
18
|
-
require_relative
|
19
|
-
require_relative
|
13
|
+
require_relative "ext/build_error"
|
14
|
+
require_relative "ext/builder"
|
15
|
+
require_relative "ext/configure_builder"
|
16
|
+
require_relative "ext/ext_conf_builder"
|
17
|
+
require_relative "ext/rake_builder"
|
18
|
+
require_relative "ext/cmake_builder"
|
19
|
+
require_relative "ext/cargo_builder"
|
data/lib/rubygems/gem_runner.rb
CHANGED
@@ -5,9 +5,9 @@
|
|
5
5
|
# See LICENSE.txt for permissions.
|
6
6
|
#++
|
7
7
|
|
8
|
-
require_relative
|
9
|
-
require_relative
|
10
|
-
require_relative
|
8
|
+
require_relative "../rubygems"
|
9
|
+
require_relative "command_manager"
|
10
|
+
require_relative "deprecate"
|
11
11
|
|
12
12
|
##
|
13
13
|
# Run an instance of the gem program.
|
@@ -41,7 +41,7 @@ class Gem::GemRunner
|
|
41
41
|
config_args = Gem.configuration[command_name]
|
42
42
|
config_args = case config_args
|
43
43
|
when String
|
44
|
-
config_args.split
|
44
|
+
config_args.split " "
|
45
45
|
else
|
46
46
|
Array(config_args)
|
47
47
|
end
|
@@ -56,7 +56,7 @@ class Gem::GemRunner
|
|
56
56
|
# other arguments in the list.
|
57
57
|
|
58
58
|
def extract_build_args(args) # :nodoc:
|
59
|
-
return [] unless offset = args.index(
|
59
|
+
return [] unless offset = args.index("--")
|
60
60
|
|
61
61
|
build_args = args.slice!(offset...args.length)
|
62
62
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative
|
3
|
-
require_relative
|
2
|
+
require_relative "remote_fetcher"
|
3
|
+
require_relative "text"
|
4
4
|
|
5
5
|
##
|
6
6
|
# Utility methods for using the RubyGems API.
|
@@ -19,8 +19,8 @@ module Gem::GemcutterUtilities
|
|
19
19
|
# Add the --key option
|
20
20
|
|
21
21
|
def add_key_option
|
22
|
-
add_option(
|
23
|
-
|
22
|
+
add_option("-k", "--key KEYNAME", Symbol,
|
23
|
+
"Use the given API key",
|
24
24
|
"from #{Gem.configuration.credentials_path}") do |value,options|
|
25
25
|
options[:key] = value
|
26
26
|
end
|
@@ -30,9 +30,9 @@ module Gem::GemcutterUtilities
|
|
30
30
|
# Add the --otp option
|
31
31
|
|
32
32
|
def add_otp_option
|
33
|
-
add_option(
|
34
|
-
|
35
|
-
|
33
|
+
add_option("--otp CODE",
|
34
|
+
"Digit code for multifactor authentication",
|
35
|
+
"You can also use the environment variable GEM_HOST_OTP_CODE") do |value, options|
|
36
36
|
options[:otp] = value
|
37
37
|
end
|
38
38
|
end
|
@@ -69,9 +69,9 @@ module Gem::GemcutterUtilities
|
|
69
69
|
|
70
70
|
@host ||=
|
71
71
|
begin
|
72
|
-
env_rubygems_host = ENV[
|
72
|
+
env_rubygems_host = ENV["RUBYGEMS_HOST"]
|
73
73
|
env_rubygems_host = nil if
|
74
|
-
env_rubygems_host
|
74
|
+
env_rubygems_host && env_rubygems_host.empty?
|
75
75
|
|
76
76
|
env_rubygems_host || configured_host
|
77
77
|
end
|
@@ -83,7 +83,7 @@ module Gem::GemcutterUtilities
|
|
83
83
|
# If +allowed_push_host+ metadata is present, then it will only allow that host.
|
84
84
|
|
85
85
|
def rubygems_api_request(method, path, host = nil, allowed_push_host = nil, scope: nil, &block)
|
86
|
-
require
|
86
|
+
require "net/http"
|
87
87
|
|
88
88
|
self.host = host if host
|
89
89
|
unless self.host
|
@@ -118,7 +118,7 @@ module Gem::GemcutterUtilities
|
|
118
118
|
end
|
119
119
|
|
120
120
|
def mfa_unauthorized?(response)
|
121
|
-
response.kind_of?(Net::HTTPUnauthorized) && response.body.start_with?(
|
121
|
+
response.kind_of?(Net::HTTPUnauthorized) && response.body.start_with?("You have enabled multifactor authentication")
|
122
122
|
end
|
123
123
|
|
124
124
|
def update_scope(scope)
|
@@ -163,8 +163,12 @@ module Gem::GemcutterUtilities
|
|
163
163
|
|
164
164
|
key_name = get_key_name(scope)
|
165
165
|
scope_params = get_scope_params(scope)
|
166
|
-
|
166
|
+
profile = get_user_profile(email, password)
|
167
|
+
mfa_params = get_mfa_params(profile)
|
167
168
|
all_params = scope_params.merge(mfa_params)
|
169
|
+
warning = profile["warning"]
|
170
|
+
|
171
|
+
say "#{warning}\n" if warning
|
168
172
|
|
169
173
|
response = rubygems_api_request(:post, "api/v1/api_key",
|
170
174
|
sign_in_host, scope: scope) do |request|
|
@@ -240,13 +244,13 @@ module Gem::GemcutterUtilities
|
|
240
244
|
end
|
241
245
|
|
242
246
|
def ask_otp
|
243
|
-
say
|
244
|
-
options[:otp] = ask
|
247
|
+
say "You have enabled multi-factor authentication. Please enter OTP code."
|
248
|
+
options[:otp] = ask "Code: "
|
245
249
|
end
|
246
250
|
|
247
251
|
def pretty_host(host)
|
248
252
|
if default_host?
|
249
|
-
|
253
|
+
"RubyGems.org"
|
250
254
|
else
|
251
255
|
host
|
252
256
|
end
|
@@ -273,29 +277,28 @@ module Gem::GemcutterUtilities
|
|
273
277
|
self.host == Gem::DEFAULT_HOST
|
274
278
|
end
|
275
279
|
|
276
|
-
def
|
280
|
+
def get_user_profile(email, password)
|
277
281
|
return {} unless default_host?
|
278
282
|
|
279
|
-
mfa_level = get_user_mfa_level(email, password)
|
280
|
-
params = {}
|
281
|
-
if mfa_level == "ui_only" || mfa_level == "ui_and_gem_signin"
|
282
|
-
selected = ask_yes_no("Would you like to enable MFA for this key? (strongly recommended)")
|
283
|
-
params["mfa"] = true if selected
|
284
|
-
end
|
285
|
-
params
|
286
|
-
end
|
287
|
-
|
288
|
-
def get_user_mfa_level(email, password)
|
289
283
|
response = rubygems_api_request(:get, "api/v1/profile/me.yaml") do |request|
|
290
284
|
request.basic_auth email, password
|
291
285
|
end
|
292
286
|
|
293
287
|
with_response response do |resp|
|
294
|
-
|
295
|
-
body["mfa"]
|
288
|
+
Gem::SafeYAML.load clean_text(resp.body)
|
296
289
|
end
|
297
290
|
end
|
298
291
|
|
292
|
+
def get_mfa_params(profile)
|
293
|
+
mfa_level = profile["mfa"]
|
294
|
+
params = {}
|
295
|
+
if mfa_level == "ui_only" || mfa_level == "ui_and_gem_signin"
|
296
|
+
selected = ask_yes_no("Would you like to enable MFA for this key? (strongly recommended)")
|
297
|
+
params["mfa"] = true if selected
|
298
|
+
end
|
299
|
+
params
|
300
|
+
end
|
301
|
+
|
299
302
|
def get_key_name(scope)
|
300
303
|
hostname = Socket.gethostname || "unknown-host"
|
301
304
|
user = ENV["USER"] || ENV["USERNAME"] || "unknown-user"
|
data/lib/rubygems/indexer.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative
|
3
|
-
require_relative
|
4
|
-
require
|
2
|
+
require_relative "../rubygems"
|
3
|
+
require_relative "package"
|
4
|
+
require "tmpdir"
|
5
5
|
|
6
6
|
##
|
7
7
|
# Top level class for building the gem repository index.
|
@@ -43,28 +43,28 @@ class Gem::Indexer
|
|
43
43
|
# Create an indexer that will index the gems in +directory+.
|
44
44
|
|
45
45
|
def initialize(directory, options = {})
|
46
|
-
require
|
47
|
-
require
|
48
|
-
require
|
46
|
+
require "fileutils"
|
47
|
+
require "tmpdir"
|
48
|
+
require "zlib"
|
49
49
|
|
50
50
|
options = { :build_modern => true }.merge options
|
51
51
|
|
52
52
|
@build_modern = options[:build_modern]
|
53
53
|
|
54
54
|
@dest_directory = directory
|
55
|
-
@directory = Dir.mktmpdir
|
55
|
+
@directory = Dir.mktmpdir "gem_generate_index"
|
56
56
|
|
57
57
|
marshal_name = "Marshal.#{Gem.marshal_version}"
|
58
58
|
|
59
|
-
@master_index = File.join @directory,
|
59
|
+
@master_index = File.join @directory, "yaml"
|
60
60
|
@marshal_index = File.join @directory, marshal_name
|
61
61
|
|
62
|
-
@quick_dir = File.join @directory,
|
62
|
+
@quick_dir = File.join @directory, "quick"
|
63
63
|
@quick_marshal_dir = File.join @quick_dir, marshal_name
|
64
64
|
@quick_marshal_dir_base = File.join "quick", marshal_name # FIX: UGH
|
65
65
|
|
66
|
-
@quick_index = File.join @quick_dir,
|
67
|
-
@latest_index = File.join @quick_dir,
|
66
|
+
@quick_index = File.join @quick_dir, "index"
|
67
|
+
@latest_index = File.join @quick_dir, "latest_index"
|
68
68
|
|
69
69
|
@specs_index = File.join @directory, "specs.#{Gem.marshal_version}"
|
70
70
|
@latest_specs_index =
|
@@ -104,7 +104,7 @@ class Gem::Indexer
|
|
104
104
|
|
105
105
|
files = []
|
106
106
|
|
107
|
-
Gem.time
|
107
|
+
Gem.time "Generated Marshal quick index gemspecs" do
|
108
108
|
specs.each do |spec|
|
109
109
|
next if spec.default_gem?
|
110
110
|
spec_file_name = "#{spec.original_name}.gemspec.rz"
|
@@ -112,7 +112,7 @@ class Gem::Indexer
|
|
112
112
|
|
113
113
|
marshal_zipped = Gem.deflate Marshal.dump(spec)
|
114
114
|
|
115
|
-
File.open marshal_name,
|
115
|
+
File.open marshal_name, "wb" do |io|
|
116
116
|
io.write marshal_zipped
|
117
117
|
end
|
118
118
|
|
@@ -136,7 +136,7 @@ class Gem::Indexer
|
|
136
136
|
say "Generating #{name} index"
|
137
137
|
|
138
138
|
Gem.time "Generated #{name} index" do
|
139
|
-
File.open(file,
|
139
|
+
File.open(file, "wb") do |io|
|
140
140
|
specs = index.map do |*spec|
|
141
141
|
# We have to splat here because latest_specs is an array, while the
|
142
142
|
# others are hashes.
|
@@ -149,7 +149,7 @@ class Gem::Indexer
|
|
149
149
|
next
|
150
150
|
end
|
151
151
|
|
152
|
-
platform = Gem::Platform::RUBY if platform.nil?
|
152
|
+
platform = Gem::Platform::RUBY if platform.nil? || platform.empty?
|
153
153
|
[spec.name, spec.version, platform]
|
154
154
|
end
|
155
155
|
|
@@ -169,10 +169,10 @@ class Gem::Indexer
|
|
169
169
|
latest_specs =
|
170
170
|
Gem::Specification._latest_specs specs
|
171
171
|
|
172
|
-
build_modern_index(released.sort, @specs_index,
|
173
|
-
build_modern_index(latest_specs.sort, @latest_specs_index,
|
172
|
+
build_modern_index(released.sort, @specs_index, "specs")
|
173
|
+
build_modern_index(latest_specs.sort, @latest_specs_index, "latest specs")
|
174
174
|
build_modern_index(prerelease.sort, @prerelease_specs_index,
|
175
|
-
|
175
|
+
"prerelease specs")
|
176
176
|
|
177
177
|
@files += [@specs_index,
|
178
178
|
"#{@specs_index}.gz",
|
@@ -217,7 +217,7 @@ class Gem::Indexer
|
|
217
217
|
def compress_indices
|
218
218
|
say "Compressing indices"
|
219
219
|
|
220
|
-
Gem.time
|
220
|
+
Gem.time "Compressed indices" do
|
221
221
|
if @build_modern
|
222
222
|
gzip @specs_index
|
223
223
|
gzip @latest_specs_index
|
@@ -252,7 +252,7 @@ class Gem::Indexer
|
|
252
252
|
|
253
253
|
zipped = Gem.deflate data
|
254
254
|
|
255
|
-
File.open "#{filename}.#{extension}",
|
255
|
+
File.open "#{filename}.#{extension}", "wb" do |io|
|
256
256
|
io.write zipped
|
257
257
|
end
|
258
258
|
end
|
@@ -296,7 +296,7 @@ class Gem::Indexer
|
|
296
296
|
files = @files
|
297
297
|
files.delete @quick_marshal_dir if files.include? @quick_dir
|
298
298
|
|
299
|
-
if files.include?
|
299
|
+
if files.include?(@quick_marshal_dir) && !files.include?(@quick_dir)
|
300
300
|
files.delete @quick_marshal_dir
|
301
301
|
|
302
302
|
dst_name = File.join(@dest_directory, @quick_marshal_dir_base)
|
@@ -308,7 +308,7 @@ class Gem::Indexer
|
|
308
308
|
end
|
309
309
|
|
310
310
|
files = files.map do |path|
|
311
|
-
path.sub(/^#{Regexp.escape @directory}\/?/,
|
311
|
+
path.sub(/^#{Regexp.escape @directory}\/?/, "") # HACK?
|
312
312
|
end
|
313
313
|
|
314
314
|
files.each do |file|
|
@@ -358,7 +358,7 @@ class Gem::Indexer
|
|
358
358
|
end
|
359
359
|
|
360
360
|
if updated_gems.empty?
|
361
|
-
say
|
361
|
+
say "No new gems"
|
362
362
|
terminate_interaction 0
|
363
363
|
end
|
364
364
|
|
@@ -367,7 +367,7 @@ class Gem::Indexer
|
|
367
367
|
|
368
368
|
files = build_marshal_gemspecs specs
|
369
369
|
|
370
|
-
Gem.time
|
370
|
+
Gem.time "Updated indexes" do
|
371
371
|
update_specs_index released, @dest_specs_index, @specs_index
|
372
372
|
update_specs_index released, @dest_latest_specs_index, @latest_specs_index
|
373
373
|
update_specs_index(prerelease,
|
@@ -389,7 +389,7 @@ class Gem::Indexer
|
|
389
389
|
files << "#{@prerelease_specs_index}.gz"
|
390
390
|
|
391
391
|
files = files.map do |path|
|
392
|
-
path.sub(/^#{Regexp.escape @directory}\/?/,
|
392
|
+
path.sub(/^#{Regexp.escape @directory}\/?/, "") # HACK?
|
393
393
|
end
|
394
394
|
|
395
395
|
files.each do |file|
|
@@ -414,13 +414,13 @@ class Gem::Indexer
|
|
414
414
|
|
415
415
|
index.each do |spec|
|
416
416
|
platform = spec.original_platform
|
417
|
-
platform = Gem::Platform::RUBY if platform.nil?
|
417
|
+
platform = Gem::Platform::RUBY if platform.nil? || platform.empty?
|
418
418
|
specs_index << [spec.name, spec.version, platform]
|
419
419
|
end
|
420
420
|
|
421
421
|
specs_index = compact_specs specs_index.uniq.sort
|
422
422
|
|
423
|
-
File.open dest,
|
423
|
+
File.open dest, "wb" do |io|
|
424
424
|
Marshal.dump specs_index, io
|
425
425
|
end
|
426
426
|
end
|