rubygems-update 4.0.21 → 4.1.0.beta1
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 +590 -53
- data/CONTRIBUTING.md +66 -5
- data/MIT.txt +4 -3
- data/Manifest.txt +332 -375
- data/README.md +26 -6
- data/bundler.gemspec +63 -0
- data/doc/POLICIES.md +147 -0
- data/doc/UPGRADING.md +4 -4
- data/{bundler/lib → lib}/bundler/build_metadata.rb +2 -2
- data/{bundler/lib → lib}/bundler/checksum.rb +40 -25
- data/{bundler/lib → lib}/bundler/ci_detector.rb +1 -1
- data/{bundler/lib → lib}/bundler/cli/add.rb +3 -4
- data/{bundler/lib → lib}/bundler/cli/cache.rb +4 -0
- data/{bundler/lib → lib}/bundler/cli/clean.rb +5 -0
- data/{bundler/lib → lib}/bundler/cli/common.rb +37 -1
- data/{bundler/lib → lib}/bundler/cli/config.rb +4 -2
- data/{bundler/lib → lib}/bundler/cli/gem.rb +0 -17
- data/{bundler/lib → lib}/bundler/cli/install.rb +4 -5
- data/{bundler/lib → lib}/bundler/cli/lock.rb +1 -2
- data/{bundler/lib → lib}/bundler/cli/outdated.rb +8 -3
- data/{bundler/lib → lib}/bundler/cli/pristine.rb +2 -1
- data/{bundler/lib → lib}/bundler/cli/update.rb +21 -12
- data/{bundler/lib → lib}/bundler/cli.rb +14 -11
- data/{bundler/lib → lib}/bundler/definition.rb +61 -24
- data/{bundler/lib → lib}/bundler/dependency.rb +4 -0
- data/{bundler/lib → lib}/bundler/dsl.rb +77 -11
- data/{bundler/lib → lib}/bundler/endpoint_specification.rb +51 -14
- data/{bundler/lib → lib}/bundler/env.rb +7 -24
- data/{bundler/lib → lib}/bundler/errors.rb +34 -5
- data/{bundler/lib → lib}/bundler/fetcher/compact_index.rb +14 -5
- data/lib/bundler/fetcher/connection_pools.rb +150 -0
- data/{bundler/lib → lib}/bundler/fetcher/downloader.rb +31 -16
- data/{bundler/lib → lib}/bundler/fetcher.rb +8 -47
- data/{bundler/lib → lib}/bundler/injector.rb +3 -3
- data/{bundler/lib → lib}/bundler/inline.rb +44 -4
- data/{bundler/lib → lib}/bundler/installer/parallel_installer.rb +25 -30
- data/{bundler/lib → lib}/bundler/installer.rb +20 -6
- data/{bundler/lib → lib}/bundler/lazy_specification.rb +44 -17
- data/{bundler/lib → lib}/bundler/lockfile_generator.rb +24 -2
- data/{bundler/lib → lib}/bundler/lockfile_parser.rb +43 -5
- data/{bundler/lib → lib}/bundler/man/bundle-add.1 +7 -4
- data/{bundler/lib → lib}/bundler/man/bundle-add.1.ronn +8 -4
- data/{bundler/lib → lib}/bundler/man/bundle-binstubs.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-cache.1 +2 -2
- data/{bundler/lib → lib}/bundler/man/bundle-cache.1.ronn +2 -2
- data/{bundler/lib → lib}/bundler/man/bundle-check.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-clean.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-config.1 +38 -6
- data/{bundler/lib → lib}/bundler/man/bundle-config.1.ronn +143 -10
- data/{bundler/lib → lib}/bundler/man/bundle-console.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-doctor.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-env.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-exec.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-fund.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-gem.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-help.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-info.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-init.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-install.1 +2 -2
- data/{bundler/lib → lib}/bundler/man/bundle-install.1.ronn +4 -4
- data/{bundler/lib → lib}/bundler/man/bundle-issue.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-licenses.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-list.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-lock.1 +3 -3
- data/{bundler/lib → lib}/bundler/man/bundle-lock.1.ronn +5 -5
- data/{bundler/lib → lib}/bundler/man/bundle-open.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-outdated.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-platform.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-plugin.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-pristine.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-remove.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-show.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle-update.1 +3 -3
- data/{bundler/lib → lib}/bundler/man/bundle-update.1.ronn +3 -5
- data/{bundler/lib → lib}/bundler/man/bundle-version.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/bundle.1 +1 -1
- data/{bundler/lib → lib}/bundler/man/gemfile.5 +45 -1
- data/{bundler/lib → lib}/bundler/man/gemfile.5.ronn +53 -0
- data/lib/bundler/match_metadata.rb +50 -0
- data/{bundler/lib → lib}/bundler/match_platform.rb +25 -2
- data/lib/bundler/match_remote_metadata.rb +44 -0
- data/{bundler/lib → lib}/bundler/materialization.rb +2 -1
- data/lib/bundler/override.rb +69 -0
- data/{bundler/lib → lib}/bundler/plugin/dsl.rb +3 -5
- data/{bundler/lib → lib}/bundler/plugin/events.rb +55 -13
- data/{bundler/lib → lib}/bundler/plugin/index.rb +87 -11
- data/{bundler/lib → lib}/bundler/plugin/installer/path.rb +1 -1
- data/{bundler/lib → lib}/bundler/plugin/installer.rb +13 -5
- data/{bundler/lib → lib}/bundler/plugin.rb +58 -30
- data/{bundler/lib → lib}/bundler/remote_specification.rb +6 -3
- data/{bundler/lib → lib}/bundler/resolver/base.rb +2 -1
- data/{bundler/lib → lib}/bundler/resolver/incompatibility.rb +1 -1
- data/{bundler/lib → lib}/bundler/resolver.rb +73 -23
- data/{bundler/lib → lib}/bundler/ruby_version.rb +0 -2
- data/{bundler/lib → lib}/bundler/rubygems_ext.rb +71 -1
- data/{bundler/lib → lib}/bundler/rubygems_gem_installer.rb +41 -2
- data/{bundler/lib → lib}/bundler/rubygems_integration.rb +7 -2
- data/{bundler/lib → lib}/bundler/runtime.rb +69 -2
- data/{bundler/lib → lib}/bundler/self_manager.rb +9 -15
- data/{bundler/lib → lib}/bundler/settings.rb +373 -30
- data/{bundler/lib → lib}/bundler/shared_helpers.rb +2 -1
- data/{bundler/lib → lib}/bundler/source/git/git_proxy.rb +2 -10
- data/{bundler/lib → lib}/bundler/source/git.rb +15 -6
- data/{bundler/lib → lib}/bundler/source/path/installer.rb +1 -1
- data/{bundler/lib → lib}/bundler/source/rubygems/remote.rb +10 -5
- data/{bundler/lib → lib}/bundler/source/rubygems.rb +48 -12
- data/{bundler/lib → lib}/bundler/spec_set.rb +16 -4
- data/{bundler/lib → lib}/bundler/stub_specification.rb +2 -1
- data/{bundler/lib → lib}/bundler/templates/newgem/Gemfile.tt +4 -4
- data/{bundler/lib → lib}/bundler/templates/newgem/newgem.gemspec.tt +3 -3
- data/{bundler/lib → lib}/bundler/templates/newgem/spec/newgem_spec.rb.tt +1 -1
- data/{bundler/lib → lib}/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +1 -1
- data/{bundler/lib → lib}/bundler/ui/shell.rb +0 -4
- data/{bundler/lib → lib}/bundler/ui/silent.rb +0 -4
- data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +35 -2
- data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/base.rb +2 -1
- data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell/basic.rb +14 -6
- data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell/color.rb +2 -0
- data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor.rb +34 -1
- data/lib/bundler/vendored_pub_grub.rb +7 -0
- data/lib/bundler/vendored_securerandom.rb +15 -0
- data/lib/bundler/vendored_uri.rb +21 -0
- data/{bundler/lib → lib}/bundler/version.rb +1 -1
- data/{bundler/lib → lib}/bundler/worker.rb +3 -2
- data/{bundler/lib → lib}/bundler.rb +1 -1
- data/lib/rubygems/basic_specification.rb +15 -14
- data/lib/rubygems/bundler_settings.rb +137 -0
- data/lib/rubygems/bundler_version_finder.rb +13 -55
- data/lib/rubygems/ci_detector.rb +1 -1
- data/lib/rubygems/commands/build_command.rb +8 -1
- data/lib/rubygems/commands/cert_command.rb +9 -7
- data/lib/rubygems/commands/contents_command.rb +1 -1
- data/lib/rubygems/commands/dependency_command.rb +15 -3
- data/lib/rubygems/commands/environment_command.rb +1 -0
- data/lib/rubygems/commands/exec_command.rb +3 -0
- data/lib/rubygems/commands/fetch_command.rb +1 -1
- data/lib/rubygems/commands/help_command.rb +3 -1
- data/lib/rubygems/commands/install_command.rb +13 -3
- data/lib/rubygems/commands/lock_command.rb +2 -2
- data/lib/rubygems/commands/outdated_command.rb +77 -2
- data/lib/rubygems/commands/owner_command.rb +1 -1
- data/lib/rubygems/commands/push_command.rb +159 -21
- data/lib/rubygems/commands/setup_command.rb +20 -23
- data/lib/rubygems/commands/signin_command.rb +3 -1
- data/lib/rubygems/commands/signout_command.rb +26 -6
- data/lib/rubygems/commands/specification_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +84 -2
- data/lib/rubygems/commands/yank_command.rb +10 -7
- data/lib/rubygems/compact_index_client/cache.rb +122 -0
- data/lib/rubygems/compact_index_client/cache_file.rb +147 -0
- data/lib/rubygems/compact_index_client/http_fetcher.rb +88 -0
- data/lib/rubygems/compact_index_client/parser.rb +90 -0
- data/lib/rubygems/compact_index_client/updater.rb +113 -0
- data/lib/rubygems/compact_index_client.rb +111 -0
- data/lib/rubygems/config_file.rb +304 -22
- data/lib/rubygems/content_address.rb +194 -0
- data/lib/rubygems/cooldown.rb +173 -0
- data/lib/rubygems/cooldown_option.rb +27 -0
- data/lib/rubygems/cooldown_settings.rb +57 -0
- data/lib/rubygems/credential_store/native/linux.rb +97 -0
- data/lib/rubygems/credential_store/native/macos.rb +88 -0
- data/lib/rubygems/credential_store/native/windows.rb +130 -0
- data/lib/rubygems/credential_store.rb +332 -0
- data/lib/rubygems/defaults.rb +9 -0
- data/lib/rubygems/dependency_installer.rb +15 -0
- data/lib/rubygems/doctor.rb +23 -6
- data/lib/rubygems/exceptions.rb +11 -43
- data/lib/rubygems/ext/builder.rb +70 -5
- data/lib/rubygems/ext/cargo_builder.rb +0 -9
- data/lib/rubygems/ext/ext_conf_builder.rb +8 -15
- data/lib/rubygems/gemcutter_utilities.rb +44 -2
- data/lib/rubygems/install_update_options.rb +16 -0
- data/lib/rubygems/installer.rb +90 -11
- data/lib/rubygems/installer_uninstaller_utils.rb +24 -3
- data/lib/rubygems/name_tuple.rb +55 -18
- data/lib/rubygems/package/old.rb +1 -1
- data/lib/rubygems/package.rb +200 -47
- data/lib/rubygems/package_task.rb +2 -2
- data/lib/rubygems/platform.rb +2 -2
- data/lib/rubygems/query_utils.rb +84 -24
- data/lib/rubygems/remote_fetcher.rb +65 -17
- data/lib/rubygems/request/connection_pools.rb +3 -0
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set/lockfile.rb +0 -2
- data/lib/rubygems/request_set.rb +105 -17
- data/lib/rubygems/resolver/api_set.rb +14 -26
- data/lib/rubygems/resolver/api_specification.rb +56 -15
- data/lib/rubygems/resolver/incompatibility.rb +10 -0
- data/lib/rubygems/resolver/index_specification.rb +6 -4
- data/lib/rubygems/resolver/installer_set.rb +2 -2
- data/lib/rubygems/resolver/lock_specification.rb +5 -1
- data/lib/rubygems/resolver/spec_specification.rb +4 -0
- data/lib/rubygems/resolver/specification.rb +16 -1
- data/lib/rubygems/resolver/strategy.rb +44 -0
- data/lib/rubygems/resolver.rb +471 -145
- data/lib/rubygems/safe_marshal.rb +2 -1
- data/lib/rubygems/safe_yaml.rb +20 -3
- data/lib/rubygems/security/policy.rb +11 -3
- data/lib/rubygems/security/signer.rb +15 -7
- data/lib/rubygems/security.rb +111 -17
- data/lib/rubygems/source/local.rb +7 -2
- data/lib/rubygems/source.rb +270 -23
- data/lib/rubygems/spec_fetcher.rb +47 -12
- data/lib/rubygems/specification.rb +76 -32
- data/lib/rubygems/specification_policy.rb +33 -6
- data/lib/rubygems/specification_record.rb +41 -2
- data/lib/rubygems/stub_specification.rb +39 -16
- data/lib/rubygems/uninstaller.rb +2 -0
- data/lib/rubygems/util/atomic_file_writer.rb +109 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb +2 -1
- data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +5 -6
- data/lib/rubygems/vendor/net-http/lib/net/http/header.rb +8 -4
- data/lib/rubygems/vendor/net-http/lib/net/http/requests.rb +15 -1
- data/lib/rubygems/vendor/net-http/lib/net/http/response.rb +2 -1
- data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +68 -0
- data/lib/rubygems/vendor/net-http/lib/net/http.rb +60 -49
- data/lib/rubygems/vendor/optparse/lib/optparse.rb +23 -30
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/assignment.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +7 -7
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/failure_writer.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/incompatibility.rb +4 -4
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/package.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/partial_solution.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/rubygems.rb +3 -3
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/solve_failure.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/static_package_source.rb +3 -3
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/strategy.rb +2 -2
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/term.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/version.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/version_constraint.rb +3 -3
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/version_range.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/version_solver.rb +2 -2
- data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/lib/pub_grub/version_union.rb +1 -1
- data/lib/rubygems/vendor/pub_grub/lib/pub_grub.rb +57 -0
- data/lib/rubygems/vendor/resolv/lib/resolv.rb +3508 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +4 -0
- data/lib/rubygems/vendor/timeout/lib/timeout.rb +190 -77
- data/lib/rubygems/vendor/uri/lib/uri.rb +4 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendored_pub_grub.rb +0 -1
- data/lib/rubygems/version.rb +129 -111
- data/lib/rubygems/version_option.rb +14 -0
- data/lib/rubygems/yaml_serializer.rb +853 -71
- data/lib/rubygems.rb +45 -11
- data/rubygems-update.gemspec +3 -4
- data/setup.rb +1 -0
- metadata +365 -410
- data/bundler/CHANGELOG.md +0 -5784
- data/bundler/LICENSE.md +0 -22
- data/bundler/README.md +0 -58
- data/bundler/bundler.gemspec +0 -46
- data/bundler/lib/bundler/compact_index_client/cache.rb +0 -107
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -148
- data/bundler/lib/bundler/compact_index_client/parser.rb +0 -87
- data/bundler/lib/bundler/compact_index_client/updater.rb +0 -105
- data/bundler/lib/bundler/compact_index_client.rb +0 -92
- data/bundler/lib/bundler/match_metadata.rb +0 -30
- data/bundler/lib/bundler/match_remote_metadata.rb +0 -29
- data/bundler/lib/bundler/vendor/connection_pool/LICENSE +0 -20
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +0 -227
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +0 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -56
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +0 -230
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +0 -82
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +0 -41
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +0 -65
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +0 -80
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +0 -1153
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +0 -31
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +0 -102
- data/bundler/lib/bundler/vendor/uri/COPYING +0 -56
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +0 -922
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +0 -100
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +0 -267
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +0 -1592
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +0 -137
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +0 -23
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +0 -261
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +0 -22
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +0 -293
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +0 -547
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +0 -206
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +0 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +0 -83
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +0 -23
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +0 -104
- data/bundler/lib/bundler/vendored_persistent.rb +0 -11
- data/bundler/lib/bundler/vendored_securerandom.rb +0 -12
- data/bundler/lib/bundler/vendored_uri.rb +0 -21
- data/bundler/lib/bundler/yaml_serializer.rb +0 -98
- data/doc/rubygems/CONTRIBUTING.md +0 -231
- data/doc/rubygems/POLICIES.md +0 -60
- data/lib/rubygems/request_set/lockfile/parser.rb +0 -344
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +0 -122
- data/lib/rubygems/resolver/conflict.rb +0 -146
- data/lib/rubygems/resolver/stats.rb +0 -46
- data/lib/rubygems/util/list.rb +0 -40
- data/lib/rubygems/vendor/molinillo/LICENSE +0 -9
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/rubygems/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/rubygems/vendor/molinillo/lib/molinillo/errors.rb +0 -149
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/rubygems/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/rubygems/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/rubygems/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/rubygems/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/rubygems/vendor/molinillo/lib/molinillo.rb +0 -11
- data/lib/rubygems/vendored_molinillo.rb +0 -3
- /data/{bundler/exe → exe}/bundle +0 -0
- /data/{bundler/exe → exe}/bundler +0 -0
- /data/{bundler/lib → lib}/bundler/.document +0 -0
- /data/{bundler/lib → lib}/bundler/capistrano.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/binstubs.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/check.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/console.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/doctor/diagnose.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/doctor/ssl.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/doctor.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/exec.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/fund.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/info.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/init.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/issue.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/list.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/open.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/platform.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/plugin.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/remove.rb +0 -0
- /data/{bundler/lib → lib}/bundler/cli/show.rb +0 -0
- /data/{bundler/lib → lib}/bundler/constants.rb +0 -0
- /data/{bundler/lib → lib}/bundler/current_ruby.rb +0 -0
- /data/{bundler/lib → lib}/bundler/deployment.rb +0 -0
- /data/{bundler/lib → lib}/bundler/deprecate.rb +0 -0
- /data/{bundler/lib → lib}/bundler/digest.rb +0 -0
- /data/{bundler/lib → lib}/bundler/environment_preserver.rb +0 -0
- /data/{bundler/lib → lib}/bundler/feature_flag.rb +0 -0
- /data/{bundler/lib → lib}/bundler/fetcher/base.rb +0 -0
- /data/{bundler/lib → lib}/bundler/fetcher/dependency.rb +0 -0
- /data/{bundler/lib → lib}/bundler/fetcher/gem_remote_fetcher.rb +0 -0
- /data/{bundler/lib → lib}/bundler/fetcher/index.rb +0 -0
- /data/{bundler/lib → lib}/bundler/force_platform.rb +0 -0
- /data/{bundler/lib → lib}/bundler/friendly_errors.rb +0 -0
- /data/{bundler/lib → lib}/bundler/gem_helper.rb +0 -0
- /data/{bundler/lib → lib}/bundler/gem_tasks.rb +0 -0
- /data/{bundler/lib → lib}/bundler/gem_version_promoter.rb +0 -0
- /data/{bundler/lib → lib}/bundler/index.rb +0 -0
- /data/{bundler/lib → lib}/bundler/installer/gem_installer.rb +0 -0
- /data/{bundler/lib → lib}/bundler/installer/standalone.rb +0 -0
- /data/{bundler/lib → lib}/bundler/man/.document +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-binstubs.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-check.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-clean.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-console.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-doctor.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-env.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-exec.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-fund.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-gem.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-help.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-info.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-init.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-issue.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-licenses.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-list.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-open.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-outdated.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-platform.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-plugin.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-pristine.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-remove.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-show.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle-version.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/bundle.1.ronn +0 -0
- /data/{bundler/lib → lib}/bundler/man/index.txt +0 -0
- /data/{bundler/lib → lib}/bundler/mirror.rb +0 -0
- /data/{bundler/lib → lib}/bundler/plugin/api/source.rb +0 -0
- /data/{bundler/lib → lib}/bundler/plugin/api.rb +0 -0
- /data/{bundler/lib → lib}/bundler/plugin/installer/git.rb +0 -0
- /data/{bundler/lib → lib}/bundler/plugin/installer/rubygems.rb +0 -0
- /data/{bundler/lib → lib}/bundler/plugin/source_list.rb +0 -0
- /data/{bundler/lib → lib}/bundler/plugin/unloaded_source.rb +0 -0
- /data/{bundler/lib → lib}/bundler/process_lock.rb +0 -0
- /data/{bundler/lib → lib}/bundler/resolver/candidate.rb +0 -0
- /data/{bundler/lib → lib}/bundler/resolver/package.rb +0 -0
- /data/{bundler/lib → lib}/bundler/resolver/root.rb +0 -0
- /data/{bundler/lib → lib}/bundler/resolver/spec_group.rb +0 -0
- /data/{bundler/lib → lib}/bundler/resolver/strategy.rb +0 -0
- /data/{bundler/lib → lib}/bundler/retry.rb +0 -0
- /data/{bundler/lib → lib}/bundler/ruby_dsl.rb +0 -0
- /data/{bundler/lib → lib}/bundler/safe_marshal.rb +0 -0
- /data/{bundler/lib → lib}/bundler/settings/validator.rb +0 -0
- /data/{bundler/lib → lib}/bundler/setup.rb +0 -0
- /data/{bundler/lib → lib}/bundler/source/gemspec.rb +0 -0
- /data/{bundler/lib → lib}/bundler/source/metadata.rb +0 -0
- /data/{bundler/lib → lib}/bundler/source/path.rb +0 -0
- /data/{bundler/lib → lib}/bundler/source/rubygems_aggregate.rb +0 -0
- /data/{bundler/lib → lib}/bundler/source.rb +0 -0
- /data/{bundler/lib → lib}/bundler/source_list.rb +0 -0
- /data/{bundler/lib → lib}/bundler/source_map.rb +0 -0
- /data/{bundler/lib → lib}/bundler/templates/.document +0 -0
- /data/{bundler/lib → lib}/bundler/templates/Executable +0 -0
- /data/{bundler/lib → lib}/bundler/templates/Executable.standalone +0 -0
- /data/{bundler/lib → lib}/bundler/templates/Gemfile +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/CHANGELOG.md.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/Cargo.toml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/LICENSE.txt.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/README.md.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/Rakefile.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/bin/console.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/bin/setup.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/circleci/config.yml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/exe/newgem.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/build.rs.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/go.mod.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/newgem-go.c.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/newgem.c.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/newgem.go.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/newgem.h.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/github/workflows/build-gems.yml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/github/workflows/main.yml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/gitignore.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/gitlab-ci.yml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/lib/newgem/version.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/lib/newgem.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/rspec.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/rubocop.yml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/sig/newgem.rbs.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/spec/spec_helper.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/standard.yml.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/test/minitest/test_helper.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +0 -0
- /data/{bundler/lib → lib}/bundler/ui/rg_proxy.rb +0 -0
- /data/{bundler/lib → lib}/bundler/ui.rb +0 -0
- /data/{bundler/lib → lib}/bundler/uri_credentials_filter.rb +0 -0
- /data/{bundler/lib → lib}/bundler/uri_normalizer.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/.document +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/fileutils/COPYING +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/fileutils/lib/fileutils.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/LICENSE.md +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/actions/create_file.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/actions/create_link.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/actions/directory.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/actions.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/command.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/error.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/group.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/invocation.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/line_editor/basic.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/line_editor/readline.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/line_editor.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/nested_context.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/parser/argument.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/parser/arguments.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/parser/option.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/parser/options.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/parser.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/rake_compat.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/runner.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell/column_printer.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell/html.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell/table_printer.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell/terminal.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/shell.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendor/thor/lib/thor/util.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendored_fileutils.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendored_net_http.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendored_thor.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendored_timeout.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vendored_tsort.rb +0 -0
- /data/{bundler/lib → lib}/bundler/vlad.rb +0 -0
- /data/{bundler/lib/bundler → lib/rubygems}/vendor/pub_grub/LICENSE.txt +0 -0
- /data/{bundler/lib/bundler/vendor/securerandom → lib/rubygems/vendor/resolv}/COPYING +0 -0
data/lib/rubygems/package.rb
CHANGED
|
@@ -129,13 +129,45 @@ class Gem::Package
|
|
|
129
129
|
# Permission for other files
|
|
130
130
|
attr_accessor :data_mode
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
##
|
|
133
|
+
# The minimum RubyGems version that can install content-addressable gems.
|
|
134
|
+
# Built into +required_rubygems_version+ so older clients reject skinny
|
|
135
|
+
# gems through both the local and remote install paths.
|
|
136
|
+
|
|
137
|
+
MINIMUM_RUBYGEMS_VERSION = ">= 4.1.0.a"
|
|
138
|
+
|
|
139
|
+
##
|
|
140
|
+
# Builds the gem described by +spec+ and returns the built file name;
|
|
141
|
+
# passing +ruby_abi+ ("X.Y") builds a content-addressable gem named by the
|
|
142
|
+
# SHA-256 of its contents, updates +spec.required_ruby_version+ to
|
|
143
|
+
# "~> X.Y.0", and constrains +spec.required_rubygems_version+ to at least
|
|
144
|
+
# MINIMUM_RUBYGEMS_VERSION (incompatible with
|
|
145
|
+
# +file_name+).
|
|
146
|
+
|
|
147
|
+
def self.build(spec, skip_validation = false, strict_validation = false, file_name = nil, ruby_abi = nil)
|
|
148
|
+
if ruby_abi && file_name
|
|
149
|
+
raise ArgumentError, "Cannot specify both a Ruby ABI and an output file name because content addressable gems must use the generated file name."
|
|
150
|
+
end
|
|
151
|
+
if ruby_abi
|
|
152
|
+
require "digest"
|
|
153
|
+
require "stringio"
|
|
154
|
+
|
|
155
|
+
io = StringIO.new
|
|
156
|
+
io.set_encoding(Encoding::BINARY)
|
|
134
157
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
158
|
+
package = new io
|
|
159
|
+
package.spec = spec.dup
|
|
160
|
+
gem_file = package.build_content_addressable_file ruby_abi, skip_validation, strict_validation
|
|
138
161
|
|
|
162
|
+
spec.required_ruby_version = package.spec.required_ruby_version
|
|
163
|
+
spec.required_rubygems_version = package.spec.required_rubygems_version
|
|
164
|
+
else
|
|
165
|
+
gem_file = file_name || spec.file_name
|
|
166
|
+
|
|
167
|
+
package = new gem_file
|
|
168
|
+
package.spec = spec
|
|
169
|
+
package.build skip_validation, strict_validation
|
|
170
|
+
end
|
|
139
171
|
gem_file
|
|
140
172
|
end
|
|
141
173
|
|
|
@@ -216,6 +248,21 @@ class Gem::Package
|
|
|
216
248
|
FileUtils.cp @gem.path, path unless File.exist? path
|
|
217
249
|
end
|
|
218
250
|
|
|
251
|
+
##
|
|
252
|
+
# Derives the content address from the gem's file name and verifies it
|
|
253
|
+
# against the SHA256 digest of the file contents.
|
|
254
|
+
|
|
255
|
+
def content_address
|
|
256
|
+
path = @gem&.path
|
|
257
|
+
return unless path
|
|
258
|
+
|
|
259
|
+
address = Gem::ContentAddress.verified_file_name_claim(path, spec)
|
|
260
|
+
return nil unless address
|
|
261
|
+
return nil unless Gem::ContentAddress.eligible?(spec)
|
|
262
|
+
|
|
263
|
+
address
|
|
264
|
+
end
|
|
265
|
+
|
|
219
266
|
##
|
|
220
267
|
# Adds a checksum for each entry in the gem to checksums.yaml.gz.
|
|
221
268
|
|
|
@@ -232,7 +279,11 @@ class Gem::Package
|
|
|
232
279
|
|
|
233
280
|
tar.add_file_signed "checksums.yaml.gz", 0o444, @signer do |io|
|
|
234
281
|
gzip_to io do |gz_io|
|
|
235
|
-
|
|
282
|
+
if Gem.use_psych?
|
|
283
|
+
Psych.dump checksums_by_algorithm, gz_io
|
|
284
|
+
else
|
|
285
|
+
gz_io.write Gem::YAMLSerializer.dump(checksums_by_algorithm)
|
|
286
|
+
end
|
|
236
287
|
end
|
|
237
288
|
end
|
|
238
289
|
end
|
|
@@ -311,16 +362,47 @@ class Gem::Package
|
|
|
311
362
|
end
|
|
312
363
|
end
|
|
313
364
|
|
|
314
|
-
|
|
365
|
+
message = <<-EOM
|
|
315
366
|
Successfully built RubyGem
|
|
316
367
|
Name: #{@spec.name}
|
|
317
368
|
Version: #{@spec.version}
|
|
318
|
-
File: #{File.basename @gem.path}
|
|
319
369
|
EOM
|
|
370
|
+
|
|
371
|
+
message += " File: #{File.basename(@gem.path)}\n" if @gem.path
|
|
372
|
+
say message
|
|
320
373
|
ensure
|
|
321
374
|
@signer = nil
|
|
322
375
|
end
|
|
323
376
|
|
|
377
|
+
##
|
|
378
|
+
# Builds this package scoped to +ruby_abi+ ("X.Y"), then writes it to a
|
|
379
|
+
# content-addressable file name derived from the SHA-256 digest of the gem
|
|
380
|
+
# contents, e.g. "example-1.0-01234567.gem". Returns the file name of the
|
|
381
|
+
# written gem.
|
|
382
|
+
#
|
|
383
|
+
# The spec is validated for an ABI-scoped build and its
|
|
384
|
+
# +required_ruby_version+ and +required_rubygems_version+ are constrained
|
|
385
|
+
# before building, so every gem this method produces is eligible for
|
|
386
|
+
# content addressing.
|
|
387
|
+
|
|
388
|
+
def build_content_addressable_file(ruby_abi, skip_validation = false, strict_validation = false)
|
|
389
|
+
validate_ruby_abi ruby_abi
|
|
390
|
+
@spec.required_rubygems_version = normalized_required_rubygems_version(ruby_abi)
|
|
391
|
+
@spec.required_ruby_version = Gem::ContentAddress.ruby_abi_requirement(ruby_abi)
|
|
392
|
+
|
|
393
|
+
build skip_validation, strict_validation
|
|
394
|
+
|
|
395
|
+
bytes = @gem.with_read_io(&:read)
|
|
396
|
+
gem_file = "#{@spec.name}-#{@spec.version}-#{Gem::ContentAddress.address_for(bytes)}.gem"
|
|
397
|
+
File.binwrite(gem_file, bytes)
|
|
398
|
+
|
|
399
|
+
say " File: #{gem_file}"
|
|
400
|
+
say " Platform: #{@spec.platform}"
|
|
401
|
+
say " Ruby ABI: #{ruby_abi}"
|
|
402
|
+
|
|
403
|
+
gem_file
|
|
404
|
+
end
|
|
405
|
+
|
|
324
406
|
##
|
|
325
407
|
# A list of file names contained in this gem
|
|
326
408
|
|
|
@@ -474,7 +556,7 @@ EOM
|
|
|
474
556
|
end
|
|
475
557
|
end
|
|
476
558
|
|
|
477
|
-
if dir_mode
|
|
559
|
+
if dir_mode && !directories.empty?
|
|
478
560
|
File.chmod(dir_mode, *directories)
|
|
479
561
|
end
|
|
480
562
|
end
|
|
@@ -503,24 +585,6 @@ EOM
|
|
|
503
585
|
gz_io.close
|
|
504
586
|
end
|
|
505
587
|
|
|
506
|
-
##
|
|
507
|
-
# Returns the full path for installing +filename+.
|
|
508
|
-
#
|
|
509
|
-
# If +filename+ is not inside +destination_dir+ an exception is raised.
|
|
510
|
-
|
|
511
|
-
def install_location(filename, destination_dir) # :nodoc:
|
|
512
|
-
raise Gem::Package::PathError.new(filename, destination_dir) if
|
|
513
|
-
filename.start_with? "/"
|
|
514
|
-
|
|
515
|
-
destination_dir = File.realpath(destination_dir)
|
|
516
|
-
destination = File.expand_path(filename, destination_dir)
|
|
517
|
-
|
|
518
|
-
raise Gem::Package::PathError.new(destination, destination_dir) unless
|
|
519
|
-
normalize_path(destination).start_with? normalize_path(destination_dir + "/")
|
|
520
|
-
|
|
521
|
-
destination
|
|
522
|
-
end
|
|
523
|
-
|
|
524
588
|
if Gem.win_platform?
|
|
525
589
|
def normalize_path(pathname) # :nodoc:
|
|
526
590
|
pathname.downcase
|
|
@@ -534,7 +598,7 @@ EOM
|
|
|
534
598
|
##
|
|
535
599
|
# Loads a Gem::Specification from the TarEntry +entry+
|
|
536
600
|
|
|
537
|
-
def
|
|
601
|
+
def load_spec_from_metadata(entry) # :nodoc:
|
|
538
602
|
limit = 10 * 1024 * 1024
|
|
539
603
|
case entry.full_name
|
|
540
604
|
when "metadata" then
|
|
@@ -655,6 +719,110 @@ EOM
|
|
|
655
719
|
|
|
656
720
|
private
|
|
657
721
|
|
|
722
|
+
##
|
|
723
|
+
# The +required_rubygems_version+ for a content-addressable build: the
|
|
724
|
+
# spec's requirement raised to at least MINIMUM_RUBYGEMS_VERSION, warning
|
|
725
|
+
# if it had to be changed. Raises if the requirement excludes every version
|
|
726
|
+
# satisfying that floor, since no RubyGems could install the built gem.
|
|
727
|
+
|
|
728
|
+
def normalized_required_rubygems_version(ruby_abi)
|
|
729
|
+
minimum = Gem::Requirement.new(MINIMUM_RUBYGEMS_VERSION)
|
|
730
|
+
existing = @spec.required_rubygems_version
|
|
731
|
+
|
|
732
|
+
return minimum if existing.nil? || existing == Gem::Requirement.default
|
|
733
|
+
|
|
734
|
+
floor = minimum.requirements.first.last
|
|
735
|
+
|
|
736
|
+
if excludes_rubygems_floor?(existing, floor)
|
|
737
|
+
raise ArgumentError,
|
|
738
|
+
"Cannot build gem for Ruby ABI #{ruby_abi} because required_rubygems_version is set to #{existing}, " \
|
|
739
|
+
"which excludes RubyGems #{MINIMUM_RUBYGEMS_VERSION} required to install content addressable gems. " \
|
|
740
|
+
"Please remove or loosen the conflicting constraint."
|
|
741
|
+
end
|
|
742
|
+
|
|
743
|
+
return existing if satisfies_rubygems_floor?(existing, floor)
|
|
744
|
+
|
|
745
|
+
preserved = existing.requirements.filter_map do |op, version|
|
|
746
|
+
"#{op} #{version}" if ["~>", "<", "<=", "!="].include?(op)
|
|
747
|
+
end
|
|
748
|
+
|
|
749
|
+
normalized = Gem::Requirement.new([MINIMUM_RUBYGEMS_VERSION, *preserved])
|
|
750
|
+
|
|
751
|
+
alert_warning \
|
|
752
|
+
"required_rubygems_version was changed from \"#{existing}\" to \"#{normalized}\" for this build " \
|
|
753
|
+
"because content addressable gems can only be installed by RubyGems #{MINIMUM_RUBYGEMS_VERSION}."
|
|
754
|
+
|
|
755
|
+
normalized
|
|
756
|
+
end
|
|
757
|
+
|
|
758
|
+
##
|
|
759
|
+
# Whether +requirement+ excludes every RubyGems version satisfying the
|
|
760
|
+
# +floor+, so that no RubyGems could install the built gem.
|
|
761
|
+
|
|
762
|
+
def excludes_rubygems_floor?(requirement, floor)
|
|
763
|
+
capped_below_floor = requirement.requirements.any? do |op, version|
|
|
764
|
+
case op
|
|
765
|
+
when "<" then version <= floor
|
|
766
|
+
when "<=", "=" then version < floor
|
|
767
|
+
when "~>" then version.bump <= floor.release
|
|
768
|
+
else false
|
|
769
|
+
end
|
|
770
|
+
end
|
|
771
|
+
|
|
772
|
+
return true if capped_below_floor
|
|
773
|
+
|
|
774
|
+
!requirement.satisfied_by?(floor) && requirement.requirements.any? do |op, version|
|
|
775
|
+
["<=", "="].include?(op) && version == floor
|
|
776
|
+
end
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
##
|
|
780
|
+
# Whether one of the lower bounds of +requirement+ already guarantees the
|
|
781
|
+
# +floor+.
|
|
782
|
+
|
|
783
|
+
def satisfies_rubygems_floor?(requirement, floor)
|
|
784
|
+
requirement.requirements.any? do |op, version|
|
|
785
|
+
case op
|
|
786
|
+
when ">=", "~>", "=", ">" then version >= floor
|
|
787
|
+
else false
|
|
788
|
+
end
|
|
789
|
+
end
|
|
790
|
+
end
|
|
791
|
+
|
|
792
|
+
##
|
|
793
|
+
# Validates that the spec can be built as a content-addressable gem scoped
|
|
794
|
+
# to +ruby_abi+ ("X.Y"): the ABI must be well-formed, the spec must declare
|
|
795
|
+
# a non-Ruby platform, and any existing +required_ruby_version+ must match
|
|
796
|
+
# the ABI.
|
|
797
|
+
|
|
798
|
+
def validate_ruby_abi(ruby_abi)
|
|
799
|
+
if !Gem::ContentAddress.valid_ruby_abi?(ruby_abi)
|
|
800
|
+
raise ArgumentError, "Ruby ABI must be in X.Y format"
|
|
801
|
+
elsif !Gem::ContentAddress.platform_eligible?(@spec.platform)
|
|
802
|
+
raise ArgumentError, "Cannot build a gem scoped to a single Ruby ABI as no platform or a Ruby platform has been set"
|
|
803
|
+
elsif !Gem::ContentAddress.ruby_abi_compatible?(@spec, ruby_abi)
|
|
804
|
+
raise ArgumentError, "Cannot build gem for Ruby ABI #{ruby_abi} because required_ruby_version is set to #{@spec.required_ruby_version}. Please set required_ruby_version to \"~> #{ruby_abi}.0\"."
|
|
805
|
+
end
|
|
806
|
+
end
|
|
807
|
+
|
|
808
|
+
##
|
|
809
|
+
# Returns the full path for installing +filename+ into +destination_dir+,
|
|
810
|
+
# which must already be resolved with File.realpath by the caller.
|
|
811
|
+
#
|
|
812
|
+
# If +filename+ is not inside +destination_dir+ an exception is raised.
|
|
813
|
+
|
|
814
|
+
def install_location(filename, destination_dir) # :nodoc:
|
|
815
|
+
raise Gem::Package::PathError.new(filename, destination_dir) if
|
|
816
|
+
filename.start_with? "/"
|
|
817
|
+
|
|
818
|
+
destination = File.expand_path(filename, destination_dir)
|
|
819
|
+
|
|
820
|
+
raise Gem::Package::PathError.new(destination, destination_dir) unless
|
|
821
|
+
normalize_path(destination).start_with? normalize_path(destination_dir + "/")
|
|
822
|
+
|
|
823
|
+
destination
|
|
824
|
+
end
|
|
825
|
+
|
|
658
826
|
##
|
|
659
827
|
# Raises an exception unless +dir+, with symlinks resolved, is
|
|
660
828
|
# +destination_dir+ or a directory inside it. +destination_dir+ must
|
|
@@ -703,12 +871,7 @@ EOM
|
|
|
703
871
|
digest entry
|
|
704
872
|
end
|
|
705
873
|
|
|
706
|
-
|
|
707
|
-
when "metadata", "metadata.gz" then
|
|
708
|
-
load_spec entry
|
|
709
|
-
when "data.tar.gz" then
|
|
710
|
-
verify_gz entry
|
|
711
|
-
end
|
|
874
|
+
load_spec_from_metadata entry
|
|
712
875
|
rescue StandardError
|
|
713
876
|
warn "Exception while verifying #{@gem.path}"
|
|
714
877
|
raise
|
|
@@ -736,18 +899,6 @@ EOM
|
|
|
736
899
|
end
|
|
737
900
|
end
|
|
738
901
|
|
|
739
|
-
##
|
|
740
|
-
# Verifies that +entry+ is a valid gzipped file.
|
|
741
|
-
|
|
742
|
-
def verify_gz(entry) # :nodoc:
|
|
743
|
-
Zlib::GzipReader.wrap entry do |gzio|
|
|
744
|
-
# TODO: read into a buffer once zlib supports it
|
|
745
|
-
gzio.read 16_384 until gzio.eof? # gzip checksum verification
|
|
746
|
-
end
|
|
747
|
-
rescue Zlib::GzipFile::Error => e
|
|
748
|
-
raise Gem::Package::FormatError.new(e.message, entry.full_name)
|
|
749
|
-
end
|
|
750
|
-
|
|
751
902
|
if RUBY_ENGINE == "truffleruby"
|
|
752
903
|
def copy_stream(src, dst, size) # :nodoc:
|
|
753
904
|
dst.write src.read(size)
|
|
@@ -767,9 +918,11 @@ EOM
|
|
|
767
918
|
if Gem.win_platform?
|
|
768
919
|
# Create a symlink and fallback to copy the file or directory on Windows,
|
|
769
920
|
# where symlink creation needs special privileges in form of the Developer Mode.
|
|
921
|
+
# JRuby on Windows raises TypeError from the wincode path-conversion helper
|
|
922
|
+
# when it cannot create the symlink, so fall back to copy in that case too.
|
|
770
923
|
def create_symlink(old_name, new_name)
|
|
771
924
|
File.symlink(old_name, new_name)
|
|
772
|
-
rescue Errno::EACCES
|
|
925
|
+
rescue Errno::EACCES, TypeError
|
|
773
926
|
from = File.expand_path(old_name, File.dirname(new_name))
|
|
774
927
|
FileUtils.cp_r(from, new_name)
|
|
775
928
|
end
|
|
@@ -111,10 +111,10 @@ class Gem::PackageTask < Rake::PackageTask
|
|
|
111
111
|
file gem_path => [package_dir, gem_dir] + @gem_spec.files do
|
|
112
112
|
chdir(gem_dir) do
|
|
113
113
|
when_writing "Creating #{gem_spec.file_name}" do
|
|
114
|
-
Gem::Package.build gem_spec
|
|
114
|
+
built_gem_file = Gem::Package.build gem_spec
|
|
115
115
|
|
|
116
116
|
verbose trace do
|
|
117
|
-
mv
|
|
117
|
+
mv built_gem_file, ".."
|
|
118
118
|
end
|
|
119
119
|
end
|
|
120
120
|
end
|
data/lib/rubygems/platform.rb
CHANGED
|
@@ -196,7 +196,7 @@ class Gem::Platform
|
|
|
196
196
|
# the runtime platform.
|
|
197
197
|
#
|
|
198
198
|
#--
|
|
199
|
-
# NOTE: Until it can be removed, changes to this method must also be reflected in `
|
|
199
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `lib/bundler/rubygems_ext.rb`
|
|
200
200
|
|
|
201
201
|
def ===(other)
|
|
202
202
|
return nil unless Gem::Platform === other
|
|
@@ -221,7 +221,7 @@ class Gem::Platform
|
|
|
221
221
|
end
|
|
222
222
|
|
|
223
223
|
#--
|
|
224
|
-
# NOTE: Until it can be removed, changes to this method must also be reflected in `
|
|
224
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `lib/bundler/rubygems_ext.rb`
|
|
225
225
|
|
|
226
226
|
def normalized_linux_version
|
|
227
227
|
return nil unless @version
|
data/lib/rubygems/query_utils.rb
CHANGED
|
@@ -149,9 +149,15 @@ module Gem::QueryUtils
|
|
|
149
149
|
spec_tuples = if name.nil?
|
|
150
150
|
fetcher.detect(specs_type) { true }
|
|
151
151
|
else
|
|
152
|
-
fetcher.detect(specs_type) do |name_tuple|
|
|
152
|
+
matching_tuples = fetcher.detect(specs_type) do |name_tuple|
|
|
153
153
|
name === name_tuple.name && options[:version].satisfied_by?(name_tuple.version)
|
|
154
154
|
end
|
|
155
|
+
|
|
156
|
+
if args.empty?
|
|
157
|
+
matching_tuples
|
|
158
|
+
else
|
|
159
|
+
fetcher.decode_content_addressable_tuples(matching_tuples, latest: specs_type == :latest)
|
|
160
|
+
end
|
|
155
161
|
end
|
|
156
162
|
|
|
157
163
|
output_query_results(spec_tuples)
|
|
@@ -200,9 +206,11 @@ module Gem::QueryUtils
|
|
|
200
206
|
matching_tuples = matching_tuples.sort_by {|n,_| n.version }.reverse
|
|
201
207
|
|
|
202
208
|
platforms = Hash.new {|h,version| h[version] = [] }
|
|
209
|
+
platform_ruby_abis = Hash.new {|h,version| h[version] = Hash.new {|hh,platform| hh[platform] = [] } }
|
|
203
210
|
|
|
204
211
|
matching_tuples.each do |n, _|
|
|
205
212
|
platforms[n.version] << n.platform if n.platform
|
|
213
|
+
platform_ruby_abis[n.version][n.platform] << n.ruby_abi if n.ruby_abi
|
|
206
214
|
end
|
|
207
215
|
|
|
208
216
|
seen = {}
|
|
@@ -216,11 +224,11 @@ module Gem::QueryUtils
|
|
|
216
224
|
end
|
|
217
225
|
end
|
|
218
226
|
|
|
219
|
-
output << clean_text(make_entry(matching_tuples, platforms))
|
|
227
|
+
output << clean_text(make_entry(matching_tuples, platforms, platform_ruby_abis))
|
|
220
228
|
end
|
|
221
229
|
end
|
|
222
230
|
|
|
223
|
-
def entry_details(entry, detail_tuple, specs, platforms)
|
|
231
|
+
def entry_details(entry, detail_tuple, specs, platforms, platform_ruby_abis)
|
|
224
232
|
return unless options[:details]
|
|
225
233
|
|
|
226
234
|
name_tuple, spec = detail_tuple
|
|
@@ -229,7 +237,11 @@ module Gem::QueryUtils
|
|
|
229
237
|
|
|
230
238
|
entry << "\n"
|
|
231
239
|
|
|
232
|
-
|
|
240
|
+
if ruby_abi_metadata?(platform_ruby_abis)
|
|
241
|
+
spec_platform_ruby_abis entry, platforms, platform_ruby_abis
|
|
242
|
+
else
|
|
243
|
+
spec_platforms entry, platforms
|
|
244
|
+
end
|
|
233
245
|
spec_authors entry, spec
|
|
234
246
|
spec_homepage entry, spec
|
|
235
247
|
spec_license entry, spec
|
|
@@ -237,36 +249,63 @@ module Gem::QueryUtils
|
|
|
237
249
|
spec_summary entry, spec
|
|
238
250
|
end
|
|
239
251
|
|
|
240
|
-
def entry_versions(entry, name_tuples, platforms, specs)
|
|
252
|
+
def entry_versions(entry, name_tuples, platforms, platform_ruby_abis, specs)
|
|
241
253
|
return unless options[:versions]
|
|
242
254
|
|
|
243
255
|
list =
|
|
244
256
|
if platforms.empty? || options[:details]
|
|
245
257
|
name_tuples.map(&:version).uniq
|
|
258
|
+
elsif ruby_abi_metadata?(platform_ruby_abis)
|
|
259
|
+
platforms.sort.reverse.flat_map do |version, pls|
|
|
260
|
+
out = version_label(version, specs)
|
|
261
|
+
labels = version_platform_labels(version, pls, platform_ruby_abis, label_platform: true)
|
|
262
|
+
labels.empty? ? [out] : labels.map {|label| "#{out} #{label}" }
|
|
263
|
+
end
|
|
246
264
|
else
|
|
247
265
|
platforms.sort.reverse.map do |version, pls|
|
|
248
|
-
out = version
|
|
266
|
+
out = version_label(version, specs)
|
|
267
|
+
labels = version_platform_labels(version, pls, platform_ruby_abis)
|
|
268
|
+
labels.empty? ? out : "#{out} #{labels.join(" ")}"
|
|
269
|
+
end
|
|
270
|
+
end
|
|
249
271
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
out = "default: #{out}" if default
|
|
255
|
-
end
|
|
272
|
+
use_multiline_separator = !options[:details] && ruby_abi_metadata?(platform_ruby_abis) && list.length > 1
|
|
273
|
+
separator = use_multiline_separator ? "\n#{" " * (entry.first.length + 2)}" : ", "
|
|
274
|
+
entry << " (#{list.join separator})"
|
|
275
|
+
end
|
|
256
276
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
end
|
|
277
|
+
def version_label(version, specs)
|
|
278
|
+
out = version.to_s
|
|
279
|
+
return out unless options[:domain] == :local
|
|
261
280
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
281
|
+
default = specs.any? do |s|
|
|
282
|
+
!s.is_a?(Gem::Source) && s.version == version && s.default_gem?
|
|
283
|
+
end
|
|
284
|
+
default ? "default: #{out}" : out
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def ruby_abi_metadata?(platform_ruby_abis)
|
|
288
|
+
platform_ruby_abis.values.any? do |ruby_abis_by_platform|
|
|
289
|
+
ruby_abis_by_platform.values.any?(&:any?)
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def version_platform_labels(version, platforms, platform_ruby_abis, label_platform: false)
|
|
294
|
+
platforms = platforms.uniq
|
|
295
|
+
return [] if platforms == [Gem::Platform::RUBY]
|
|
265
296
|
|
|
266
|
-
|
|
297
|
+
platforms = [platforms.delete(Gem::Platform::RUBY), *platforms.sort].compact
|
|
298
|
+
platforms.map do |platform|
|
|
299
|
+
ruby_abis = platform_ruby_abis[version][platform].uniq.sort
|
|
300
|
+
platform_label = label_platform ? "Platform: #{platform}" : platform
|
|
301
|
+
next platform_label if ruby_abis.empty?
|
|
302
|
+
|
|
303
|
+
separator = label_platform ? ", " : " "
|
|
304
|
+
"#{platform_label}#{separator}Ruby ABI: #{ruby_abis.join(", ")}"
|
|
305
|
+
end
|
|
267
306
|
end
|
|
268
307
|
|
|
269
|
-
def make_entry(entry_tuples, platforms)
|
|
308
|
+
def make_entry(entry_tuples, platforms, platform_ruby_abis)
|
|
270
309
|
detail_tuple = entry_tuples.first
|
|
271
310
|
|
|
272
311
|
name_tuples, specs = entry_tuples.flatten.partition do |item|
|
|
@@ -275,8 +314,8 @@ module Gem::QueryUtils
|
|
|
275
314
|
|
|
276
315
|
entry = [name_tuples.first.name]
|
|
277
316
|
|
|
278
|
-
entry_versions(entry, name_tuples, platforms, specs)
|
|
279
|
-
entry_details(entry, detail_tuple, specs, platforms)
|
|
317
|
+
entry_versions(entry, name_tuples, platforms, platform_ruby_abis, specs)
|
|
318
|
+
entry_details(entry, detail_tuple, specs, platforms, platform_ruby_abis)
|
|
280
319
|
|
|
281
320
|
entry.join
|
|
282
321
|
end
|
|
@@ -319,6 +358,7 @@ module Gem::QueryUtils
|
|
|
319
358
|
end
|
|
320
359
|
|
|
321
360
|
def spec_platforms(entry, platforms)
|
|
361
|
+
platforms = platforms.transform_values(&:uniq)
|
|
322
362
|
non_ruby = platforms.any? do |_, pls|
|
|
323
363
|
pls.any? {|pl| pl != Gem::Platform::RUBY }
|
|
324
364
|
end
|
|
@@ -326,7 +366,7 @@ module Gem::QueryUtils
|
|
|
326
366
|
return unless non_ruby
|
|
327
367
|
|
|
328
368
|
if platforms.length == 1
|
|
329
|
-
title = platforms.values.length == 1 ? "Platform" : "Platforms"
|
|
369
|
+
title = platforms.values.first.length == 1 ? "Platform" : "Platforms"
|
|
330
370
|
entry << " #{title}: #{platforms.values.sort.join(", ")}\n"
|
|
331
371
|
else
|
|
332
372
|
entry << " Platforms:\n"
|
|
@@ -342,6 +382,26 @@ module Gem::QueryUtils
|
|
|
342
382
|
end
|
|
343
383
|
end
|
|
344
384
|
|
|
385
|
+
def spec_platform_ruby_abis(entry, platforms, platform_ruby_abis)
|
|
386
|
+
entry << " Platforms:\n"
|
|
387
|
+
|
|
388
|
+
platforms.sort.each do |version, pls|
|
|
389
|
+
labels = version_platform_labels(version, pls, platform_ruby_abis)
|
|
390
|
+
next if labels.empty?
|
|
391
|
+
|
|
392
|
+
if platforms.length == 1
|
|
393
|
+
labels.each do |label|
|
|
394
|
+
entry << " #{label}\n"
|
|
395
|
+
end
|
|
396
|
+
else
|
|
397
|
+
label = " #{version}: "
|
|
398
|
+
data = format_text labels.join(", "), 68, label.length
|
|
399
|
+
data[0, label.length] = label
|
|
400
|
+
entry << data << "\n"
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
|
|
345
405
|
def spec_summary(entry, spec)
|
|
346
406
|
summary = truncate_text(spec.summary, "the summary for #{spec.full_name}")
|
|
347
407
|
entry << "\n\n" << format_text(summary, 68, 4)
|