rubygems-update 3.3.18 → 3.6.2
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 +2182 -1067
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +184 -290
- data/README.md +35 -19
- data/bundler/CHANGELOG.md +1003 -3
- data/bundler/README.md +3 -7
- data/bundler/bundler.gemspec +11 -11
- data/bundler/exe/bundle +5 -25
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/capistrano.rb +1 -1
- data/bundler/lib/bundler/checksum.rb +254 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +7 -5
- data/bundler/lib/bundler/cli/binstubs.rb +10 -6
- data/bundler/lib/bundler/cli/cache.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +4 -4
- data/bundler/lib/bundler/cli/common.rb +11 -1
- data/bundler/lib/bundler/cli/config.rb +8 -7
- data/bundler/lib/bundler/cli/console.rb +2 -5
- data/bundler/lib/bundler/cli/doctor.rb +10 -12
- data/bundler/lib/bundler/cli/exec.rb +2 -1
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +77 -53
- data/bundler/lib/bundler/cli/info.rb +4 -15
- data/bundler/lib/bundler/cli/init.rb +6 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +27 -15
- data/bundler/lib/bundler/cli/issue.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +54 -28
- data/bundler/lib/bundler/cli/open.rb +9 -9
- data/bundler/lib/bundler/cli/outdated.rb +34 -29
- data/bundler/lib/bundler/cli/platform.rb +7 -5
- data/bundler/lib/bundler/cli/plugin.rb +9 -15
- data/bundler/lib/bundler/cli/pristine.rb +38 -30
- data/bundler/lib/bundler/cli/show.rb +4 -4
- data/bundler/lib/bundler/cli/update.rb +6 -5
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +258 -307
- data/bundler/lib/bundler/compact_index_client/cache.rb +55 -60
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +148 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +71 -83
- data/bundler/lib/bundler/compact_index_client.rb +58 -80
- data/bundler/lib/bundler/constants.rb +9 -2
- data/bundler/lib/bundler/current_ruby.rb +11 -16
- data/bundler/lib/bundler/definition.rb +547 -228
- data/bundler/lib/bundler/dependency.rb +30 -87
- data/bundler/lib/bundler/digest.rb +3 -3
- data/bundler/lib/bundler/dsl.rb +115 -65
- data/bundler/lib/bundler/endpoint_specification.rb +27 -14
- data/bundler/lib/bundler/env.rb +5 -7
- data/bundler/lib/bundler/environment_preserver.rb +8 -25
- data/bundler/lib/bundler/errors.rb +85 -11
- data/bundler/lib/bundler/feature_flag.rb +1 -2
- data/bundler/lib/bundler/fetcher/base.rb +5 -3
- data/bundler/lib/bundler/fetcher/compact_index.rb +28 -43
- data/bundler/lib/bundler/fetcher/dependency.rb +3 -7
- data/bundler/lib/bundler/fetcher/downloader.rb +17 -16
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +2 -3
- data/bundler/lib/bundler/fetcher.rb +91 -74
- data/bundler/lib/bundler/force_platform.rb +16 -0
- data/bundler/lib/bundler/friendly_errors.rb +6 -9
- data/bundler/lib/bundler/gem_helper.rb +5 -6
- data/bundler/lib/bundler/gem_helpers.rb +45 -7
- data/bundler/lib/bundler/gem_version_promoter.rb +68 -109
- data/bundler/lib/bundler/graph.rb +9 -9
- data/bundler/lib/bundler/index.rb +69 -73
- data/bundler/lib/bundler/injector.rb +12 -13
- data/bundler/lib/bundler/inline.rb +40 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +13 -12
- data/bundler/lib/bundler/installer/parallel_installer.rb +19 -66
- data/bundler/lib/bundler/installer/standalone.rb +29 -15
- data/bundler/lib/bundler/installer.rb +27 -77
- data/bundler/lib/bundler/lazy_specification.rb +134 -71
- data/bundler/lib/bundler/lockfile_generator.rb +13 -4
- data/bundler/lib/bundler/lockfile_parser.rb +134 -61
- data/bundler/lib/bundler/man/bundle-add.1 +46 -48
- data/bundler/lib/bundler/man/bundle-add.1.ronn +54 -22
- data/bundler/lib/bundler/man/bundle-binstubs.1 +10 -19
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +38 -25
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +40 -4
- data/bundler/lib/bundler/man/bundle-check.1 +7 -14
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +4 -11
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +41 -220
- data/bundler/lib/bundler/man/bundle-config.1.ronn +27 -22
- data/bundler/lib/bundler/man/bundle-console.1 +33 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +39 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +5 -19
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +20 -78
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +12 -10
- data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
- data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +53 -81
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +41 -9
- data/bundler/lib/bundler/man/bundle-help.1 +9 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +8 -11
- data/bundler/lib/bundler/man/bundle-info.1.ronn +9 -5
- data/bundler/lib/bundler/man/bundle-init.1 +7 -12
- data/bundler/lib/bundler/man/bundle-init.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +17 -19
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +12 -2
- data/bundler/lib/bundler/man/bundle-install.1 +42 -162
- data/bundler/lib/bundler/man/bundle-install.1.ronn +31 -49
- data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
- data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
- data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-list.1 +4 -19
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +25 -34
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +18 -18
- data/bundler/lib/bundler/man/bundle-open.1.ronn +10 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +22 -67
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +20 -12
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -28
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +58 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +63 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -11
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +30 -143
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/bundler/lib/bundler/man/bundle-version.1 +22 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +9 -18
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +9 -3
- data/bundler/lib/bundler/man/bundle.1 +17 -51
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +77 -341
- data/bundler/lib/bundler/man/gemfile.5.ronn +73 -54
- data/bundler/lib/bundler/man/index.txt +8 -0
- data/bundler/lib/bundler/match_metadata.rb +17 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +8 -10
- data/bundler/lib/bundler/plugin/api/source.rb +7 -5
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +13 -5
- data/bundler/lib/bundler/plugin/installer/path.rb +18 -0
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/plugin/installer.rb +42 -19
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +35 -7
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +17 -13
- data/bundler/lib/bundler/resolver/base.rb +117 -0
- data/bundler/lib/bundler/resolver/candidate.rb +82 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +90 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +54 -67
- data/bundler/lib/bundler/resolver.rb +432 -329
- data/bundler/lib/bundler/retry.rb +2 -2
- data/bundler/lib/bundler/ruby_dsl.rb +42 -7
- data/bundler/lib/bundler/ruby_version.rb +23 -10
- data/bundler/lib/bundler/rubygems_ext.rb +286 -81
- data/bundler/lib/bundler/rubygems_gem_installer.rb +77 -68
- data/bundler/lib/bundler/rubygems_integration.rb +57 -155
- data/bundler/lib/bundler/runtime.rb +28 -17
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/self_manager.rb +50 -12
- data/bundler/lib/bundler/settings.rb +144 -58
- data/bundler/lib/bundler/setup.rb +13 -1
- data/bundler/lib/bundler/shared_helpers.rb +87 -36
- data/bundler/lib/bundler/source/git/git_proxy.rb +278 -80
- data/bundler/lib/bundler/source/git.rb +161 -68
- data/bundler/lib/bundler/source/metadata.rb +16 -16
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +16 -26
- data/bundler/lib/bundler/source/rubygems/remote.rb +1 -1
- data/bundler/lib/bundler/source/rubygems.rb +94 -154
- data/bundler/lib/bundler/source.rb +3 -1
- data/bundler/lib/bundler/source_list.rb +34 -4
- data/bundler/lib/bundler/spec_set.rb +195 -65
- data/bundler/lib/bundler/stub_specification.rb +34 -4
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +6 -11
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +11 -5
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -8
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -8
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +12 -4
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +60 -15
- data/bundler/lib/bundler/ui/silent.rb +33 -6
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +56 -7
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -418
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +102 -64
- data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
- data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/bundler/lib/bundler/vendor/securerandom/.document +1 -0
- data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/bundler/lib/bundler/vendor/thor/.document +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +15 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +15 -15
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +16 -25
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +12 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +17 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +28 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +46 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +35 -159
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -46
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +8 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +166 -8
- data/bundler/lib/bundler/vendor/tsort/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/.document +1 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +343 -148
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +10 -4
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +3 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +44 -33
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +25 -12
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +130 -38
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +12 -11
- data/bundler/lib/bundler/vendored_net_http.rb +23 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -36
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +12 -0
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/vlad.rb +1 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler/yaml_serializer.rb +22 -13
- data/bundler/lib/bundler.rb +155 -148
- data/{bundler → doc/bundler}/UPGRADING.md +11 -4
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +40 -17
- data/doc/rubygems/POLICIES.md +204 -0
- data/{test/rubygems/fake_certlib/openssl.rb → exe/gem} +5 -1
- data/{bin → exe}/update_rubygems +12 -10
- data/lib/rubygems/available_set.rb +8 -7
- data/lib/rubygems/basic_specification.rb +90 -52
- data/lib/rubygems/bundler_version_finder.rb +6 -6
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +68 -64
- data/lib/rubygems/command_manager.rb +39 -24
- data/lib/rubygems/commands/build_command.rb +14 -19
- data/lib/rubygems/commands/cert_command.rb +39 -39
- data/lib/rubygems/commands/check_command.rb +30 -25
- data/lib/rubygems/commands/cleanup_command.rb +32 -43
- data/lib/rubygems/commands/contents_command.rb +33 -25
- data/lib/rubygems/commands/dependency_command.rb +22 -23
- data/lib/rubygems/commands/environment_command.rb +8 -9
- data/lib/rubygems/commands/exec_command.rb +247 -0
- data/lib/rubygems/commands/fetch_command.rb +25 -10
- data/lib/rubygems/commands/generate_index_command.rb +40 -74
- data/lib/rubygems/commands/help_command.rb +15 -14
- data/lib/rubygems/commands/info_command.rb +5 -5
- data/lib/rubygems/commands/install_command.rb +31 -38
- data/lib/rubygems/commands/list_command.rb +6 -5
- data/lib/rubygems/commands/lock_command.rb +6 -5
- data/lib/rubygems/commands/mirror_command.rb +4 -3
- data/lib/rubygems/commands/open_command.rb +11 -12
- data/lib/rubygems/commands/outdated_command.rb +6 -5
- data/lib/rubygems/commands/owner_command.rb +23 -22
- data/lib/rubygems/commands/pristine_command.rb +83 -62
- data/lib/rubygems/commands/push_command.rb +38 -13
- data/lib/rubygems/commands/query_command.rb +11 -11
- data/lib/rubygems/commands/rdoc_command.rb +23 -28
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/search_command.rb +6 -5
- data/lib/rubygems/commands/server_command.rb +4 -3
- data/lib/rubygems/commands/setup_command.rb +137 -154
- data/lib/rubygems/commands/signin_command.rb +10 -9
- data/lib/rubygems/commands/signout_command.rb +8 -7
- data/lib/rubygems/commands/sources_command.rb +34 -33
- data/lib/rubygems/commands/specification_command.rb +25 -20
- data/lib/rubygems/commands/stale_command.rb +5 -4
- data/lib/rubygems/commands/uninstall_command.rb +66 -59
- data/lib/rubygems/commands/unpack_command.rb +23 -30
- data/lib/rubygems/commands/update_command.rb +62 -94
- data/lib/rubygems/commands/which_command.rb +9 -8
- data/lib/rubygems/commands/yank_command.rb +14 -13
- data/lib/rubygems/compatibility.rb +5 -6
- data/lib/rubygems/config_file.rb +160 -50
- data/lib/rubygems/core_ext/kernel_gem.rb +3 -10
- data/lib/rubygems/core_ext/kernel_require.rb +88 -114
- data/lib/rubygems/core_ext/kernel_warn.rb +30 -39
- data/lib/rubygems/core_ext/tcpsocket_init.rb +4 -2
- data/lib/rubygems/defaults.rb +53 -22
- data/lib/rubygems/dependency.rb +34 -36
- data/lib/rubygems/dependency_installer.rb +52 -56
- data/lib/rubygems/dependency_list.rb +8 -7
- data/lib/rubygems/deprecate.rb +80 -75
- data/lib/rubygems/doctor.rb +23 -22
- data/lib/rubygems/errors.rb +6 -8
- data/lib/rubygems/exceptions.rb +20 -18
- data/lib/rubygems/ext/build_error.rb +2 -1
- data/lib/rubygems/ext/builder.rb +56 -32
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +158 -131
- data/lib/rubygems/ext/cmake_builder.rb +9 -4
- data/lib/rubygems/ext/configure_builder.rb +9 -3
- data/lib/rubygems/ext/ext_conf_builder.rb +19 -15
- data/lib/rubygems/ext/rake_builder.rb +14 -7
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +23 -9
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +80 -0
- data/lib/rubygems/gemcutter_utilities.rb +141 -63
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_default_message.rb +3 -2
- data/lib/rubygems/install_message.rb +3 -2
- data/lib/rubygems/install_update_options.rb +72 -67
- data/lib/rubygems/installer.rb +148 -130
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -4
- data/lib/rubygems/local_remote_options.rb +24 -28
- data/lib/rubygems/name_tuple.rb +10 -11
- data/lib/rubygems/package/digest_io.rb +2 -1
- data/lib/rubygems/package/file_source.rb +3 -2
- data/lib/rubygems/package/io_source.rb +1 -0
- data/lib/rubygems/package/old.rb +11 -10
- data/lib/rubygems/package/source.rb +1 -0
- data/lib/rubygems/package/tar_header.rb +125 -91
- data/lib/rubygems/package/tar_reader/entry.rb +106 -29
- data/lib/rubygems/package/tar_reader.rb +16 -39
- data/lib/rubygems/package/tar_writer.rb +29 -26
- data/lib/rubygems/package.rb +122 -84
- data/lib/rubygems/package_task.rb +7 -6
- data/lib/rubygems/path_support.rb +11 -11
- data/lib/rubygems/platform.rb +119 -70
- data/lib/rubygems/psych_tree.rb +6 -1
- data/lib/rubygems/query_utils.rb +46 -48
- data/lib/rubygems/rdoc.rb +13 -3
- data/lib/rubygems/remote_fetcher.rb +47 -39
- data/lib/rubygems/request/connection_pools.rb +6 -6
- data/lib/rubygems/request/http_pool.rb +2 -1
- data/lib/rubygems/request/https_pool.rb +1 -0
- data/lib/rubygems/request.rb +48 -44
- data/lib/rubygems/request_set/gem_dependency_api.rb +141 -144
- data/lib/rubygems/request_set/lockfile/parser.rb +31 -30
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +24 -14
- data/lib/rubygems/request_set/lockfile.rb +11 -15
- data/lib/rubygems/request_set.rb +25 -23
- data/lib/rubygems/requirement.rb +30 -27
- data/lib/rubygems/resolver/activation_request.rb +7 -10
- data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
- data/lib/rubygems/resolver/api_set.rb +20 -13
- data/lib/rubygems/resolver/api_specification.rb +8 -7
- data/lib/rubygems/resolver/best_set.rb +5 -32
- data/lib/rubygems/resolver/composed_set.rb +4 -3
- data/lib/rubygems/resolver/conflict.rb +14 -21
- data/lib/rubygems/resolver/current_set.rb +1 -0
- data/lib/rubygems/resolver/dependency_request.rb +3 -2
- data/lib/rubygems/resolver/git_set.rb +2 -2
- data/lib/rubygems/resolver/git_specification.rb +7 -6
- data/lib/rubygems/resolver/index_set.rb +10 -9
- data/lib/rubygems/resolver/index_specification.rb +8 -6
- data/lib/rubygems/resolver/installed_specification.rb +6 -5
- data/lib/rubygems/resolver/installer_set.rb +19 -22
- data/lib/rubygems/resolver/local_specification.rb +4 -3
- data/lib/rubygems/resolver/lock_set.rb +6 -5
- data/lib/rubygems/resolver/lock_specification.rb +5 -4
- data/lib/rubygems/resolver/requirement_list.rb +1 -0
- data/lib/rubygems/resolver/set.rb +1 -0
- data/lib/rubygems/resolver/source_set.rb +2 -0
- data/lib/rubygems/resolver/spec_specification.rb +8 -0
- data/lib/rubygems/resolver/specification.rb +2 -1
- data/lib/rubygems/resolver/stats.rb +2 -1
- data/lib/rubygems/resolver/vendor_set.rb +2 -1
- data/lib/rubygems/resolver/vendor_specification.rb +4 -3
- data/lib/rubygems/resolver.rb +51 -57
- data/lib/rubygems/s3_uri_signer.rb +18 -16
- data/lib/rubygems/safe_marshal/elements.rb +146 -0
- data/lib/rubygems/safe_marshal/reader.rb +325 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +428 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +14 -26
- data/lib/rubygems/security/policies.rb +48 -49
- data/lib/rubygems/security/policy.rb +25 -28
- data/lib/rubygems/security/signer.rb +16 -7
- data/lib/rubygems/security/trust_dir.rb +12 -13
- data/lib/rubygems/security.rb +40 -66
- data/lib/rubygems/security_option.rb +7 -6
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +34 -31
- data/lib/rubygems/source/installed.rb +4 -3
- data/lib/rubygems/source/local.rb +49 -49
- data/lib/rubygems/source/lock.rb +2 -3
- data/lib/rubygems/source/specific_file.rb +6 -4
- data/lib/rubygems/source/vendor.rb +1 -2
- data/lib/rubygems/source.rb +37 -31
- data/lib/rubygems/source_list.rb +8 -8
- data/lib/rubygems/spec_fetcher.rb +95 -66
- data/lib/rubygems/specification.rb +342 -404
- data/lib/rubygems/specification_policy.rb +147 -75
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +56 -30
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/text.rb +3 -4
- data/lib/rubygems/uninstaller.rb +67 -48
- data/lib/rubygems/update_suggestion.rb +56 -0
- data/lib/rubygems/uri.rb +10 -10
- data/lib/rubygems/uri_formatter.rb +2 -2
- data/lib/rubygems/user_interaction.rb +50 -40
- data/lib/rubygems/util/licenses.rb +310 -39
- data/lib/rubygems/util/list.rb +4 -1
- data/lib/rubygems/util.rb +19 -20
- data/lib/rubygems/validator.rb +15 -14
- data/lib/rubygems/vendor/molinillo/.document +1 -0
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/dependency_graph.rb +3 -3
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/resolver.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo/state.rb +1 -1
- data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/.document +1 -0
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/requests.rb +430 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/vendor/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/vendor/net-http/lib/net/http.rb +2580 -0
- data/lib/rubygems/vendor/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/vendor/net-protocol/.document +1 -0
- data/lib/rubygems/vendor/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/vendor/optparse/.document +1 -0
- data/lib/rubygems/vendor/optparse/COPYING +56 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +206 -83
- data/lib/rubygems/vendor/resolv/.document +1 -0
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/vendor/resolv/lib/resolv.rb +3455 -0
- data/lib/rubygems/vendor/securerandom/.document +1 -0
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/.document +1 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/vendor/timeout/lib/timeout.rb +198 -0
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/vendor/tsort/lib/tsort.rb +455 -0
- data/lib/rubygems/vendor/uri/.document +1 -0
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +876 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1578 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/{bundler/lib/bundler → lib/rubygems}/vendored_molinillo.rb +0 -1
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_securerandom.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/version.rb +57 -45
- data/lib/rubygems/version_option.rb +6 -8
- data/lib/rubygems/yaml_serializer.rb +98 -0
- data/lib/rubygems.rb +191 -133
- data/rubygems-update.gemspec +16 -9
- data/setup.rb +12 -9
- metadata +233 -307
- data/POLICIES.md +0 -100
- data/bin/gem +0 -13
- data/bundler/lib/bundler/dep_proxy.rb +0 -55
- data/bundler/lib/bundler/templates/gems.rb +0 -5
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/version_ranges.rb +0 -122
- data/lib/rubygems/indexer.rb +0 -427
- data/lib/rubygems/mock_gem_ui.rb +0 -85
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolver/molinillo/LICENSE +0 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +0 -143
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +0 -11
- data/lib/rubygems/resolver/molinillo.rb +0 -2
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort/lib/tsort.rb +0 -454
- data/lib/rubygems/tsort.rb +0 -3
- data/test/rubygems/alternate_cert.pem +0 -19
- data/test/rubygems/alternate_cert_32.pem +0 -19
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -2
- data/test/rubygems/ca_cert.pem +0 -77
- data/test/rubygems/child_cert.pem +0 -20
- data/test/rubygems/child_cert_32.pem +0 -20
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -107
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- data/test/rubygems/data/gem-private_key.pem +0 -27
- data/test/rubygems/data/gem-public_cert.pem +0 -20
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -19
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -19
- data/test/rubygems/future_cert_32.pem +0 -19
- data/test/rubygems/good_rake.rb +0 -2
- data/test/rubygems/grandchild_cert.pem +0 -20
- data/test/rubygems/grandchild_cert_32.pem +0 -20
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/helper.rb +0 -1622
- data/test/rubygems/installer_test_case.rb +0 -247
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -20
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -19
- data/test/rubygems/invalid_signer_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_cert.pem +0 -20
- data/test/rubygems/invalidchild_cert_32.pem +0 -20
- data/test/rubygems/invalidchild_key.pem +0 -27
- data/test/rubygems/package/tar_test_case.rb +0 -139
- data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
- data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -3
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -4
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -3
- data/test/rubygems/private3072_key.pem +0 -40
- data/test/rubygems/private_ec_key.pem +0 -9
- data/test/rubygems/private_key.pem +0 -27
- data/test/rubygems/public3072_cert.pem +0 -25
- data/test/rubygems/public_cert.pem +0 -20
- data/test/rubygems/public_cert_32.pem +0 -19
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -4
- data/test/rubygems/rubygems_plugin.rb +0 -23
- data/test/rubygems/sff/discover.rb +0 -1
- data/test/rubygems/simple_gem.rb +0 -67
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -7
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -12
- data/test/rubygems/ssl_cert.pem +0 -80
- data/test/rubygems/ssl_key.pem +0 -27
- data/test/rubygems/test_bundled_ca.rb +0 -60
- data/test/rubygems/test_config.rb +0 -27
- data/test/rubygems/test_deprecate.rb +0 -157
- data/test/rubygems/test_exit.rb +0 -11
- data/test/rubygems/test_gem.rb +0 -2112
- data/test/rubygems/test_gem_available_set.rb +0 -129
- data/test/rubygems/test_gem_bundler_version_finder.rb +0 -125
- data/test/rubygems/test_gem_command.rb +0 -400
- data/test/rubygems/test_gem_command_manager.rb +0 -334
- data/test/rubygems/test_gem_commands_build_command.rb +0 -727
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -867
- data/test/rubygems/test_gem_commands_check_command.rb +0 -67
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -291
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -270
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -227
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -167
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -257
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -80
- data/test/rubygems/test_gem_commands_help_command.rb +0 -93
- data/test/rubygems/test_gem_commands_info_command.rb +0 -43
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1553
- data/test/rubygems/test_gem_commands_list_command.rb +0 -32
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -66
- data/test/rubygems/test_gem_commands_mirror.rb +0 -19
- data/test/rubygems/test_gem_commands_open_command.rb +0 -97
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -49
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -326
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -659
- data/test/rubygems/test_gem_commands_push_command.rb +0 -477
- data/test/rubygems/test_gem_commands_query_command.rb +0 -857
- data/test/rubygems/test_gem_commands_search_command.rb +0 -15
- data/test/rubygems/test_gem_commands_server_command.rb +0 -19
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -447
- data/test/rubygems/test_gem_commands_signin_command.rb +0 -219
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -276
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -42
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -504
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -223
- data/test/rubygems/test_gem_commands_update_command.rb +0 -835
- data/test/rubygems/test_gem_commands_which_command.rb +0 -84
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -180
- data/test/rubygems/test_gem_config_file.rb +0 -504
- data/test/rubygems/test_gem_dependency.rb +0 -395
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1155
- data/test/rubygems/test_gem_dependency_list.rb +0 -264
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -26
- data/test/rubygems/test_gem_doctor.rb +0 -194
- data/test/rubygems/test_gem_ext_builder.rb +0 -338
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/src/lib.rs +0 -27
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -243
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -8
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -39
- data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -178
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -33
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -75
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -83
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -79
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -230
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -112
- data/test/rubygems/test_gem_gem_runner.rb +0 -113
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -272
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -59
- data/test/rubygems/test_gem_indexer.rb +0 -361
- data/test/rubygems/test_gem_install_update_options.rb +0 -207
- data/test/rubygems/test_gem_installer.rb +0 -2394
- data/test/rubygems/test_gem_local_remote_options.rb +0 -132
- data/test/rubygems/test_gem_name_tuple.rb +0 -42
- data/test/rubygems/test_gem_package.rb +0 -1178
- data/test/rubygems/test_gem_package_old.rb +0 -90
- data/test/rubygems/test_gem_package_tar_header.rb +0 -225
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -87
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -152
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -330
- data/test/rubygems/test_gem_package_task.rb +0 -117
- data/test/rubygems/test_gem_path_support.rb +0 -138
- data/test/rubygems/test_gem_platform.rb +0 -391
- data/test/rubygems/test_gem_rdoc.rb +0 -136
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1226
- data/test/rubygems/test_gem_request.rb +0 -541
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -150
- data/test/rubygems/test_gem_request_set.rb +0 -671
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -847
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -468
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -543
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
- data/test/rubygems/test_gem_requirement.rb +0 -498
- data/test/rubygems/test_gem_resolver.rb +0 -791
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -42
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -166
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -158
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -43
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -81
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -82
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -187
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -113
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -87
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -92
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -46
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -275
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -43
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -61
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -97
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -18
- data/test/rubygems/test_gem_resolver_specification.rb +0 -62
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -81
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -81
- data/test/rubygems/test_gem_security.rb +0 -340
- data/test/rubygems/test_gem_security_policy.rb +0 -535
- data/test/rubygems/test_gem_security_signer.rb +0 -217
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -98
- data/test/rubygems/test_gem_silent_ui.rb +0 -116
- data/test/rubygems/test_gem_source.rb +0 -253
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -36
- data/test/rubygems/test_gem_source_git.rb +0 -303
- data/test/rubygems/test_gem_source_installed.rb +0 -34
- data/test/rubygems/test_gem_source_list.rb +0 -118
- data/test/rubygems/test_gem_source_local.rb +0 -106
- data/test/rubygems/test_gem_source_lock.rb +0 -112
- data/test/rubygems/test_gem_source_specific_file.rb +0 -75
- data/test/rubygems/test_gem_source_subpath_problem.rb +0 -49
- data/test/rubygems/test_gem_source_vendor.rb +0 -29
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -337
- data/test/rubygems/test_gem_specification.rb +0 -3756
- data/test/rubygems/test_gem_stream_ui.rb +0 -224
- data/test/rubygems/test_gem_stub_specification.rb +0 -277
- data/test/rubygems/test_gem_text.rb +0 -102
- data/test/rubygems/test_gem_uninstaller.rb +0 -674
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -30
- data/test/rubygems/test_gem_uri.rb +0 -39
- data/test/rubygems/test_gem_uri_formatter.rb +0 -26
- data/test/rubygems/test_gem_util.rb +0 -90
- data/test/rubygems/test_gem_validator.rb +0 -42
- data/test/rubygems/test_gem_version.rb +0 -295
- data/test/rubygems/test_gem_version_option.rb +0 -164
- data/test/rubygems/test_kernel.rb +0 -129
- data/test/rubygems/test_project_sanity.rb +0 -20
- data/test/rubygems/test_remote_fetch_error.rb +0 -19
- data/test/rubygems/test_require.rb +0 -719
- data/test/rubygems/test_rubygems.rb +0 -74
- data/test/rubygems/utilities.rb +0 -371
- data/test/rubygems/wrong_key_cert.pem +0 -19
- data/test/rubygems/wrong_key_cert_32.pem +0 -19
- data/test/test_changelog_generator.rb +0 -17
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/connection_pool}/.document +0 -0
- /data/{lib/rubygems/tsort → bundler/lib/bundler/vendor/fileutils}/.document +0 -0
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/{bundler/lib/bundler → lib/rubygems}/vendor/molinillo/LICENSE +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
#--
|
4
5
|
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
@@ -6,12 +7,14 @@
|
|
6
7
|
# See LICENSE.txt for permissions.
|
7
8
|
#++
|
8
9
|
|
9
|
-
require_relative
|
10
|
-
require_relative
|
11
|
-
require_relative
|
12
|
-
require_relative
|
13
|
-
require_relative
|
14
|
-
require_relative
|
10
|
+
require_relative "deprecate"
|
11
|
+
require_relative "basic_specification"
|
12
|
+
require_relative "stub_specification"
|
13
|
+
require_relative "platform"
|
14
|
+
require_relative "specification_record"
|
15
|
+
require_relative "util/list"
|
16
|
+
|
17
|
+
require "rbconfig"
|
15
18
|
|
16
19
|
##
|
17
20
|
# The Specification class contains the information for a gem. Typically
|
@@ -75,29 +78,29 @@ class Gem::Specification < Gem::BasicSpecification
|
|
75
78
|
# key should be equal to the CURRENT_SPECIFICATION_VERSION.
|
76
79
|
|
77
80
|
SPECIFICATION_VERSION_HISTORY = { # :nodoc:
|
78
|
-
-1 => [
|
79
|
-
1
|
81
|
+
-1 => ["(RubyGems versions up to and including 0.7 did not have versioned specifications)"],
|
82
|
+
1 => [
|
80
83
|
'Deprecated "test_suite_file" in favor of the new, but equivalent, "test_files"',
|
81
84
|
'"test_file=x" is a shortcut for "test_files=[x]"',
|
82
85
|
],
|
83
86
|
2 => [
|
84
87
|
'Added "required_rubygems_version"',
|
85
|
-
|
88
|
+
"Now forward-compatible with future versions",
|
86
89
|
],
|
87
90
|
3 => [
|
88
|
-
|
91
|
+
"Added Fixnum validation to the specification_version",
|
89
92
|
],
|
90
93
|
4 => [
|
91
|
-
|
94
|
+
"Added sandboxed freeform metadata to the specification version.",
|
92
95
|
],
|
93
96
|
}.freeze
|
94
97
|
|
95
98
|
MARSHAL_FIELDS = { # :nodoc:
|
96
99
|
-1 => 16,
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
100
|
+
1 => 16,
|
101
|
+
2 => 16,
|
102
|
+
3 => 17,
|
103
|
+
4 => 18,
|
101
104
|
}.freeze
|
102
105
|
|
103
106
|
today = Time.now.utc
|
@@ -106,7 +109,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
106
109
|
@load_cache = {} # :nodoc:
|
107
110
|
@load_cache_mutex = Thread::Mutex.new
|
108
111
|
|
109
|
-
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z
|
112
|
+
VALID_NAME_PATTERN = /\A[a-zA-Z0-9\.\-\_]+\z/ # :nodoc:
|
110
113
|
|
111
114
|
# :startdoc:
|
112
115
|
|
@@ -125,35 +128,35 @@ class Gem::Specification < Gem::BasicSpecification
|
|
125
128
|
# Map of attribute names to default values.
|
126
129
|
|
127
130
|
@@default_value = {
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
135
|
-
:
|
136
|
-
:
|
137
|
-
:
|
138
|
-
:
|
139
|
-
:
|
140
|
-
:
|
141
|
-
:
|
142
|
-
:
|
143
|
-
:
|
144
|
-
:
|
145
|
-
:
|
146
|
-
:
|
147
|
-
:
|
148
|
-
:
|
149
|
-
:
|
150
|
-
:
|
151
|
-
:
|
152
|
-
:
|
153
|
-
:
|
154
|
-
:
|
155
|
-
:
|
156
|
-
:
|
131
|
+
authors: [],
|
132
|
+
autorequire: nil,
|
133
|
+
bindir: "bin",
|
134
|
+
cert_chain: [],
|
135
|
+
date: nil,
|
136
|
+
dependencies: [],
|
137
|
+
description: nil,
|
138
|
+
email: nil,
|
139
|
+
executables: [],
|
140
|
+
extensions: [],
|
141
|
+
extra_rdoc_files: [],
|
142
|
+
files: [],
|
143
|
+
homepage: nil,
|
144
|
+
licenses: [],
|
145
|
+
metadata: {},
|
146
|
+
name: nil,
|
147
|
+
platform: Gem::Platform::RUBY,
|
148
|
+
post_install_message: nil,
|
149
|
+
rdoc_options: [],
|
150
|
+
require_paths: ["lib"],
|
151
|
+
required_ruby_version: Gem::Requirement.default,
|
152
|
+
required_rubygems_version: Gem::Requirement.default,
|
153
|
+
requirements: [],
|
154
|
+
rubygems_version: Gem::VERSION,
|
155
|
+
signing_key: nil,
|
156
|
+
specification_version: CURRENT_SPECIFICATION_VERSION,
|
157
|
+
summary: nil,
|
158
|
+
test_files: [],
|
159
|
+
version: nil,
|
157
160
|
}.freeze
|
158
161
|
|
159
162
|
# rubocop:disable Style/MutableConstant
|
@@ -162,39 +165,27 @@ class Gem::Specification < Gem::BasicSpecification
|
|
162
165
|
|
163
166
|
@@default_value.each do |k,v|
|
164
167
|
INITIALIZE_CODE_FOR_DEFAULTS[k] = case v
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
else
|
172
|
-
"default_value(:#{k}).dup"
|
168
|
+
when [], {}, true, false, nil, Numeric, Symbol
|
169
|
+
v.inspect
|
170
|
+
when String
|
171
|
+
v.dump
|
172
|
+
else
|
173
|
+
"default_value(:#{k}).dup"
|
173
174
|
end
|
174
175
|
end
|
175
176
|
|
176
|
-
@@attributes = @@default_value.keys.sort_by
|
177
|
-
@@array_attributes = @@default_value.
|
177
|
+
@@attributes = @@default_value.keys.sort_by(&:to_s)
|
178
|
+
@@array_attributes = @@default_value.select {|_k,v| v.is_a?(Array) }.keys
|
178
179
|
@@nil_attributes, @@non_nil_attributes = @@default_value.keys.partition do |k|
|
179
180
|
@@default_value[k].nil?
|
180
181
|
end
|
181
182
|
|
182
|
-
def self.clear_specs # :nodoc:
|
183
|
-
@@all = nil
|
184
|
-
@@stubs = nil
|
185
|
-
@@stubs_by_name = {}
|
186
|
-
@@spec_with_requirable_file = {}
|
187
|
-
@@active_stub_with_requirable_file = {}
|
188
|
-
end
|
189
|
-
private_class_method :clear_specs
|
190
|
-
|
191
|
-
clear_specs
|
192
|
-
|
193
183
|
# Sentinel object to represent "not found" stubs
|
194
184
|
NOT_FOUND = Struct.new(:to_spec, :this).new # :nodoc:
|
185
|
+
deprecate_constant :NOT_FOUND
|
195
186
|
|
196
187
|
# Tracking removed method calls to warn users during build time.
|
197
|
-
REMOVED_METHODS = [:rubyforge_project
|
188
|
+
REMOVED_METHODS = [:rubyforge_project=, :mark_version].freeze # :nodoc:
|
198
189
|
def removed_method_calls
|
199
190
|
@removed_method_calls ||= []
|
200
191
|
end
|
@@ -263,8 +254,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
263
254
|
@test_files,
|
264
255
|
add_bindir(@executables),
|
265
256
|
@extra_rdoc_files,
|
266
|
-
@extensions
|
267
|
-
].flatten.compact.uniq.sort
|
257
|
+
@extensions].flatten.compact.uniq.sort
|
268
258
|
end
|
269
259
|
|
270
260
|
##
|
@@ -302,7 +292,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
302
292
|
#
|
303
293
|
# Usage:
|
304
294
|
#
|
305
|
-
# spec.description =
|
295
|
+
# spec.description = <<~EOF
|
306
296
|
# Rake is a Make-like program implemented in Ruby. Tasks and
|
307
297
|
# dependencies are specified in standard Ruby syntax.
|
308
298
|
# EOF
|
@@ -339,10 +329,10 @@ class Gem::Specification < Gem::BasicSpecification
|
|
339
329
|
# The simplest way is to specify the standard SPDX ID
|
340
330
|
# https://spdx.org/licenses/ for the license.
|
341
331
|
# Ideally, you should pick one that is OSI (Open Source Initiative)
|
342
|
-
#
|
332
|
+
# https://opensource.org/licenses/ approved.
|
343
333
|
#
|
344
334
|
# The most commonly used OSI-approved licenses are MIT and Apache-2.0.
|
345
|
-
# GitHub also provides a license picker at
|
335
|
+
# GitHub also provides a license picker at https://choosealicense.com/.
|
346
336
|
#
|
347
337
|
# You can also use a custom license file along with your gemspec and specify
|
348
338
|
# a LicenseRef-<idstring>, where idstring is the name of the file containing
|
@@ -401,7 +391,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
401
391
|
# "homepage_uri" => "https://bestgemever.example.io",
|
402
392
|
# "mailing_list_uri" => "https://groups.example.com/bestgemever",
|
403
393
|
# "source_code_uri" => "https://example.com/user/bestgemever",
|
404
|
-
# "wiki_uri" => "https://example.com/user/bestgemever/wiki"
|
394
|
+
# "wiki_uri" => "https://example.com/user/bestgemever/wiki",
|
405
395
|
# "funding_uri" => "https://example.com/donate"
|
406
396
|
# }
|
407
397
|
#
|
@@ -427,11 +417,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
427
417
|
end
|
428
418
|
|
429
419
|
##
|
430
|
-
# The path in the gem for executable scripts. Usually '
|
420
|
+
# The path in the gem for executable scripts. Usually 'exe'
|
431
421
|
#
|
432
422
|
# Usage:
|
433
423
|
#
|
434
|
-
# spec.bindir = '
|
424
|
+
# spec.bindir = 'exe'
|
435
425
|
|
436
426
|
attr_accessor :bindir
|
437
427
|
|
@@ -474,10 +464,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
474
464
|
# spec.platform = Gem::Platform.local
|
475
465
|
|
476
466
|
def platform=(platform)
|
477
|
-
|
478
|
-
@original_platform == Gem::Platform::RUBY
|
479
|
-
@original_platform = platform
|
480
|
-
end
|
467
|
+
@original_platform = platform
|
481
468
|
|
482
469
|
case platform
|
483
470
|
when Gem::Platform::CURRENT then
|
@@ -490,12 +477,12 @@ class Gem::Specification < Gem::BasicSpecification
|
|
490
477
|
# legacy constants
|
491
478
|
when nil, Gem::Platform::RUBY then
|
492
479
|
@new_platform = Gem::Platform::RUBY
|
493
|
-
when
|
494
|
-
@new_platform = Gem::Platform.new
|
495
|
-
when
|
496
|
-
@new_platform = Gem::Platform.new
|
497
|
-
when
|
498
|
-
@new_platform = Gem::Platform.new
|
480
|
+
when "mswin32" then # was Gem::Platform::WIN32
|
481
|
+
@new_platform = Gem::Platform.new "x86-mswin32"
|
482
|
+
when "i586-linux" then # was Gem::Platform::LINUX_586
|
483
|
+
@new_platform = Gem::Platform.new "x86-linux"
|
484
|
+
when "powerpc-darwin" then # was Gem::Platform::DARWIN
|
485
|
+
@new_platform = Gem::Platform.new "ppc-darwin"
|
499
486
|
else
|
500
487
|
@new_platform = Gem::Platform.new platform
|
501
488
|
end
|
@@ -503,8 +490,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|
503
490
|
@platform = @new_platform.to_s
|
504
491
|
|
505
492
|
invalidate_memoized_attributes
|
506
|
-
|
507
|
-
@new_platform
|
508
493
|
end
|
509
494
|
|
510
495
|
##
|
@@ -533,13 +518,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|
533
518
|
|
534
519
|
attr_reader :required_rubygems_version
|
535
520
|
|
536
|
-
##
|
537
|
-
# The version of RubyGems used to create this gem.
|
538
|
-
#
|
539
|
-
# Do not set this, it is set automatically when the gem is packaged.
|
540
|
-
|
541
|
-
attr_accessor :rubygems_version
|
542
|
-
|
543
521
|
##
|
544
522
|
# The key used to sign this gem. See Gem::Security for details.
|
545
523
|
|
@@ -565,9 +543,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
565
543
|
#
|
566
544
|
# Usage:
|
567
545
|
#
|
568
|
-
# spec.
|
546
|
+
# spec.add_dependency 'example', '~> 1.1', '>= 1.1.4'
|
569
547
|
|
570
|
-
def
|
548
|
+
def add_dependency(gem, *requirements)
|
571
549
|
if requirements.uniq.size != requirements.size
|
572
550
|
warn "WARNING: duplicated #{gem} dependency #{requirements}"
|
573
551
|
end
|
@@ -578,7 +556,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
578
556
|
##
|
579
557
|
# Executables included in the gem.
|
580
558
|
#
|
581
|
-
# For example, the rake gem has rake as an executable. You don
|
559
|
+
# For example, the rake gem has rake as an executable. You don't specify the
|
582
560
|
# full path (as in bin/rake); all application-style files are expected to be
|
583
561
|
# found in bindir. These files must be executable Ruby files. Files that
|
584
562
|
# use bash or other interpreters will not work.
|
@@ -599,7 +577,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
599
577
|
# extconf.rb-style files used to compile extensions.
|
600
578
|
#
|
601
579
|
# These files will be run when the gem is installed, causing the C (or
|
602
|
-
# whatever) code to be compiled on the user
|
580
|
+
# whatever) code to be compiled on the user's machine.
|
603
581
|
#
|
604
582
|
# Usage:
|
605
583
|
#
|
@@ -727,6 +705,21 @@ class Gem::Specification < Gem::BasicSpecification
|
|
727
705
|
@test_files = Array files
|
728
706
|
end
|
729
707
|
|
708
|
+
######################################################################
|
709
|
+
# :section: Read-only attributes
|
710
|
+
|
711
|
+
##
|
712
|
+
# The version of RubyGems used to create this gem.
|
713
|
+
|
714
|
+
attr_accessor :rubygems_version
|
715
|
+
|
716
|
+
##
|
717
|
+
# The path where this gem installs its extensions.
|
718
|
+
|
719
|
+
def extensions_dir
|
720
|
+
@extensions_dir ||= super
|
721
|
+
end
|
722
|
+
|
730
723
|
######################################################################
|
731
724
|
# :section: Specification internals
|
732
725
|
|
@@ -735,7 +728,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
735
728
|
|
736
729
|
attr_accessor :activated
|
737
730
|
|
738
|
-
|
731
|
+
alias_method :activated?, :activated
|
739
732
|
|
740
733
|
##
|
741
734
|
# Autorequire was used by old RubyGems to automatically require a file.
|
@@ -765,7 +758,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
765
758
|
attr_accessor :specification_version
|
766
759
|
|
767
760
|
def self._all # :nodoc:
|
768
|
-
|
761
|
+
specification_record.all
|
769
762
|
end
|
770
763
|
|
771
764
|
def self.clear_load_cache # :nodoc:
|
@@ -775,34 +768,22 @@ class Gem::Specification < Gem::BasicSpecification
|
|
775
768
|
end
|
776
769
|
private_class_method :clear_load_cache
|
777
770
|
|
771
|
+
def self.gem_path # :nodoc:
|
772
|
+
Gem.path
|
773
|
+
end
|
774
|
+
private_class_method :gem_path
|
775
|
+
|
778
776
|
def self.each_gemspec(dirs) # :nodoc:
|
779
777
|
dirs.each do |dir|
|
780
778
|
Gem::Util.glob_files_in_dir("*.gemspec", dir).each do |path|
|
781
|
-
yield path
|
779
|
+
yield path
|
782
780
|
end
|
783
781
|
end
|
784
782
|
end
|
785
783
|
|
786
|
-
def self.gemspec_stubs_in(dir, pattern)
|
784
|
+
def self.gemspec_stubs_in(dir, pattern) # :nodoc:
|
787
785
|
Gem::Util.glob_files_in_dir(pattern, dir).map {|path| yield path }.select(&:valid?)
|
788
786
|
end
|
789
|
-
private_class_method :gemspec_stubs_in
|
790
|
-
|
791
|
-
def self.installed_stubs(dirs, pattern)
|
792
|
-
map_stubs(dirs, pattern) do |path, base_dir, gems_dir|
|
793
|
-
Gem::StubSpecification.gemspec_stub(path, base_dir, gems_dir)
|
794
|
-
end
|
795
|
-
end
|
796
|
-
private_class_method :installed_stubs
|
797
|
-
|
798
|
-
def self.map_stubs(dirs, pattern) # :nodoc:
|
799
|
-
dirs.flat_map do |dir|
|
800
|
-
base_dir = File.dirname dir
|
801
|
-
gems_dir = File.join base_dir, "gems"
|
802
|
-
gemspec_stubs_in(dir, pattern) {|path| yield path, base_dir, gems_dir }
|
803
|
-
end
|
804
|
-
end
|
805
|
-
private_class_method :map_stubs
|
806
787
|
|
807
788
|
def self.each_spec(dirs) # :nodoc:
|
808
789
|
each_gemspec(dirs) do |path|
|
@@ -815,13 +796,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
815
796
|
# Returns a Gem::StubSpecification for every installed gem
|
816
797
|
|
817
798
|
def self.stubs
|
818
|
-
|
819
|
-
pattern = "*.gemspec"
|
820
|
-
stubs = stubs_for_pattern(pattern, false)
|
821
|
-
|
822
|
-
@@stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
|
823
|
-
stubs
|
824
|
-
end
|
799
|
+
specification_record.stubs
|
825
800
|
end
|
826
801
|
|
827
802
|
##
|
@@ -840,13 +815,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
840
815
|
# only returns stubs that match Gem.platforms
|
841
816
|
|
842
817
|
def self.stubs_for(name)
|
843
|
-
|
844
|
-
@@stubs_by_name[name] || []
|
845
|
-
else
|
846
|
-
@@stubs_by_name[name] ||= stubs_for_pattern("#{name}-*.gemspec").select do |s|
|
847
|
-
s.name == name
|
848
|
-
end
|
849
|
-
end
|
818
|
+
specification_record.stubs_for(name)
|
850
819
|
end
|
851
820
|
|
852
821
|
##
|
@@ -854,12 +823,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
854
823
|
# optionally filtering out specs not matching the current platform
|
855
824
|
#
|
856
825
|
def self.stubs_for_pattern(pattern, match_platform = true) # :nodoc:
|
857
|
-
|
858
|
-
installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
|
859
|
-
stubs = installed_stubs + default_stubs(pattern)
|
860
|
-
stubs = stubs.uniq {|stub| stub.full_name }
|
861
|
-
_resort!(stubs)
|
862
|
-
stubs
|
826
|
+
specification_record.stubs_for_pattern(pattern, match_platform)
|
863
827
|
end
|
864
828
|
|
865
829
|
def self._resort!(specs) # :nodoc:
|
@@ -868,7 +832,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
868
832
|
next names if names.nonzero?
|
869
833
|
versions = b.version <=> a.version
|
870
834
|
next versions if versions.nonzero?
|
871
|
-
Gem::Platform.sort_priority(b.platform)
|
835
|
+
platforms = Gem::Platform.sort_priority(b.platform) <=> Gem::Platform.sort_priority(a.platform)
|
836
|
+
next platforms if platforms.nonzero?
|
837
|
+
default_gem = a.default_gem_priority <=> b.default_gem_priority
|
838
|
+
next default_gem if default_gem.nonzero?
|
839
|
+
a.base_dir_priority(gem_path) <=> b.base_dir_priority(gem_path)
|
872
840
|
end
|
873
841
|
end
|
874
842
|
|
@@ -888,23 +856,14 @@ class Gem::Specification < Gem::BasicSpecification
|
|
888
856
|
# properly sorted.
|
889
857
|
|
890
858
|
def self.add_spec(spec)
|
891
|
-
|
892
|
-
|
893
|
-
_all << spec
|
894
|
-
stubs << spec
|
895
|
-
(@@stubs_by_name[spec.name] ||= []) << spec
|
896
|
-
|
897
|
-
_resort!(@@stubs_by_name[spec.name])
|
898
|
-
_resort!(stubs)
|
859
|
+
specification_record.add_spec(spec)
|
899
860
|
end
|
900
861
|
|
901
862
|
##
|
902
863
|
# Removes +spec+ from the known specs.
|
903
864
|
|
904
865
|
def self.remove_spec(spec)
|
905
|
-
|
906
|
-
stubs.delete spec
|
907
|
-
(@@stubs_by_name[spec.name] || []).delete spec
|
866
|
+
specification_record.remove_spec(spec)
|
908
867
|
end
|
909
868
|
|
910
869
|
##
|
@@ -912,33 +871,23 @@ class Gem::Specification < Gem::BasicSpecification
|
|
912
871
|
# You probably want to use one of the Enumerable methods instead.
|
913
872
|
|
914
873
|
def self.all
|
915
|
-
warn "NOTE: Specification.all called from #{caller.first}" unless
|
874
|
+
warn "NOTE: Specification.all called from #{caller(1, 1).first}" unless
|
916
875
|
Gem::Deprecate.skip
|
917
876
|
_all
|
918
877
|
end
|
919
878
|
|
920
879
|
##
|
921
|
-
# Sets the known specs to +specs+.
|
922
|
-
# the future. Use at your own risk. Caveat emptor. Doomy doom doom.
|
923
|
-
# Etc etc.
|
924
|
-
#
|
925
|
-
#--
|
926
|
-
# Makes +specs+ the known specs
|
927
|
-
# Listen, time is a river
|
928
|
-
# Winter comes, code breaks
|
929
|
-
#
|
930
|
-
# -- wilsonb
|
880
|
+
# Sets the known specs to +specs+.
|
931
881
|
|
932
882
|
def self.all=(specs)
|
933
|
-
|
934
|
-
@@all = @@stubs = specs
|
883
|
+
specification_record.all = specs
|
935
884
|
end
|
936
885
|
|
937
886
|
##
|
938
887
|
# Return full names of all specs in sorted order.
|
939
888
|
|
940
889
|
def self.all_names
|
941
|
-
|
890
|
+
specification_record.all_names
|
942
891
|
end
|
943
892
|
|
944
893
|
##
|
@@ -963,9 +912,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
963
912
|
# Return the directories that Specification uses to find specs.
|
964
913
|
|
965
914
|
def self.dirs
|
966
|
-
@@dirs ||= Gem.
|
967
|
-
File.join dir.dup.tap(&Gem::UNTAINT), "specifications"
|
968
|
-
end
|
915
|
+
@@dirs ||= Gem::SpecificationRecord.dirs_from(gem_path)
|
969
916
|
end
|
970
917
|
|
971
918
|
##
|
@@ -973,9 +920,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
973
920
|
# this resets the list of known specs.
|
974
921
|
|
975
922
|
def self.dirs=(dirs)
|
976
|
-
|
923
|
+
reset
|
977
924
|
|
978
|
-
@@dirs = Array(dirs)
|
925
|
+
@@dirs = Gem::SpecificationRecord.dirs_from(Array(dirs))
|
979
926
|
end
|
980
927
|
|
981
928
|
extend Enumerable
|
@@ -984,23 +931,15 @@ class Gem::Specification < Gem::BasicSpecification
|
|
984
931
|
# Enumerate every known spec. See ::dirs= and ::add_spec to set the list of
|
985
932
|
# specs.
|
986
933
|
|
987
|
-
def self.each
|
988
|
-
|
989
|
-
|
990
|
-
self._all.each do |x|
|
991
|
-
yield x
|
992
|
-
end
|
934
|
+
def self.each(&block)
|
935
|
+
specification_record.each(&block)
|
993
936
|
end
|
994
937
|
|
995
938
|
##
|
996
939
|
# Returns every spec that matches +name+ and optional +requirements+.
|
997
940
|
|
998
941
|
def self.find_all_by_name(name, *requirements)
|
999
|
-
|
1000
|
-
|
1001
|
-
# TODO: maybe try: find_all { |s| spec === dep }
|
1002
|
-
|
1003
|
-
Gem::Dependency.new(name, *requirements).matching_specs
|
942
|
+
specification_record.find_all_by_name(name, *requirements)
|
1004
943
|
end
|
1005
944
|
|
1006
945
|
##
|
@@ -1017,20 +956,20 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1017
956
|
def self.find_by_name(name, *requirements)
|
1018
957
|
requirements = Gem::Requirement.default if requirements.empty?
|
1019
958
|
|
1020
|
-
# TODO: maybe try: find { |s| spec === dep }
|
1021
|
-
|
1022
959
|
Gem::Dependency.new(name, *requirements).to_spec
|
1023
960
|
end
|
1024
961
|
|
962
|
+
##
|
963
|
+
# Find the best specification matching a +full_name+.
|
964
|
+
def self.find_by_full_name(full_name)
|
965
|
+
stubs.find {|s| s.full_name == full_name }&.to_spec
|
966
|
+
end
|
967
|
+
|
1025
968
|
##
|
1026
969
|
# Return the best specification that contains the file matching +path+.
|
1027
970
|
|
1028
971
|
def self.find_by_path(path)
|
1029
|
-
path
|
1030
|
-
spec = @@spec_with_requirable_file[path] ||= (stubs.find do |s|
|
1031
|
-
s.contains_requirable_file? path
|
1032
|
-
end || NOT_FOUND)
|
1033
|
-
spec.to_spec
|
972
|
+
specification_record.find_by_path(path)
|
1034
973
|
end
|
1035
974
|
|
1036
975
|
##
|
@@ -1038,18 +977,15 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1038
977
|
# amongst the specs that are not activated.
|
1039
978
|
|
1040
979
|
def self.find_inactive_by_path(path)
|
1041
|
-
|
1042
|
-
next if s.activated?
|
1043
|
-
s.contains_requirable_file? path
|
1044
|
-
end
|
1045
|
-
stub && stub.to_spec
|
980
|
+
specification_record.find_inactive_by_path(path)
|
1046
981
|
end
|
1047
982
|
|
983
|
+
##
|
984
|
+
# Return the best specification that contains the file matching +path+, among
|
985
|
+
# those already activated.
|
986
|
+
|
1048
987
|
def self.find_active_stub_by_path(path)
|
1049
|
-
|
1050
|
-
s.activated? and s.contains_requirable_file? path
|
1051
|
-
end || NOT_FOUND)
|
1052
|
-
stub.this
|
988
|
+
specification_record.find_active_stub_by_path(path)
|
1053
989
|
end
|
1054
990
|
|
1055
991
|
##
|
@@ -1065,7 +1001,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1065
1001
|
|
1066
1002
|
def self.find_in_unresolved_tree(path)
|
1067
1003
|
unresolved_specs.each do |spec|
|
1068
|
-
spec.traverse do |
|
1004
|
+
spec.traverse do |_from_spec, _dep, to_spec, trail|
|
1069
1005
|
if to_spec.has_conflicts? || to_spec.conficts_when_loaded_with?(trail)
|
1070
1006
|
:next
|
1071
1007
|
else
|
@@ -1078,7 +1014,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1078
1014
|
end
|
1079
1015
|
|
1080
1016
|
def self.unresolved_specs
|
1081
|
-
unresolved_deps.values.
|
1017
|
+
unresolved_deps.values.flat_map(&:to_specs)
|
1082
1018
|
end
|
1083
1019
|
private_class_method :unresolved_specs
|
1084
1020
|
|
@@ -1116,26 +1052,28 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1116
1052
|
# +prerelease+ is true.
|
1117
1053
|
|
1118
1054
|
def self.latest_specs(prerelease = false)
|
1119
|
-
|
1055
|
+
specification_record.latest_specs(prerelease)
|
1120
1056
|
end
|
1121
1057
|
|
1122
1058
|
##
|
1123
1059
|
# Return the latest installed spec for gem +name+.
|
1124
1060
|
|
1125
1061
|
def self.latest_spec_for(name)
|
1126
|
-
|
1062
|
+
specification_record.latest_spec_for(name)
|
1127
1063
|
end
|
1128
1064
|
|
1129
1065
|
def self._latest_specs(specs, prerelease = false) # :nodoc:
|
1130
1066
|
result = {}
|
1131
1067
|
|
1132
1068
|
specs.reverse_each do |spec|
|
1133
|
-
|
1069
|
+
unless prerelease
|
1070
|
+
next if spec.version.prerelease?
|
1071
|
+
end
|
1134
1072
|
|
1135
1073
|
result[spec.name] = spec
|
1136
1074
|
end
|
1137
1075
|
|
1138
|
-
result.
|
1076
|
+
result.flat_map(&:last).sort_by(&:name)
|
1139
1077
|
end
|
1140
1078
|
|
1141
1079
|
##
|
@@ -1144,36 +1082,33 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1144
1082
|
def self.load(file)
|
1145
1083
|
return unless file
|
1146
1084
|
|
1147
|
-
|
1148
|
-
return
|
1085
|
+
spec = @load_cache_mutex.synchronize { @load_cache[file] }
|
1086
|
+
return spec if spec
|
1149
1087
|
|
1150
|
-
file = file.dup.tap(&Gem::UNTAINT)
|
1151
1088
|
return unless File.file?(file)
|
1152
1089
|
|
1153
|
-
code = Gem.open_file(file,
|
1154
|
-
|
1155
|
-
code.tap(&Gem::UNTAINT)
|
1090
|
+
code = Gem.open_file(file, "r:UTF-8:-", &:read)
|
1156
1091
|
|
1157
1092
|
begin
|
1158
|
-
|
1093
|
+
spec = eval code, binding, file
|
1159
1094
|
|
1160
|
-
if Gem::Specification ===
|
1161
|
-
|
1095
|
+
if Gem::Specification === spec
|
1096
|
+
spec.loaded_from = File.expand_path file.to_s
|
1162
1097
|
@load_cache_mutex.synchronize do
|
1163
1098
|
prev = @load_cache[file]
|
1164
1099
|
if prev
|
1165
|
-
|
1100
|
+
spec = prev
|
1166
1101
|
else
|
1167
|
-
@load_cache[file] =
|
1102
|
+
@load_cache[file] = spec
|
1168
1103
|
end
|
1169
1104
|
end
|
1170
|
-
return
|
1105
|
+
return spec
|
1171
1106
|
end
|
1172
1107
|
|
1173
|
-
warn "[#{file}] isn't a Gem::Specification (#{
|
1108
|
+
warn "[#{file}] isn't a Gem::Specification (#{spec.class} instead)."
|
1174
1109
|
rescue SignalException, SystemExit
|
1175
1110
|
raise
|
1176
|
-
rescue SyntaxError,
|
1111
|
+
rescue SyntaxError, StandardError => e
|
1177
1112
|
warn "Invalid gemspec in [#{file}]: #{e}"
|
1178
1113
|
end
|
1179
1114
|
|
@@ -1235,7 +1170,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1235
1170
|
latest_remote = remotes.sort.last
|
1236
1171
|
|
1237
1172
|
yield [local_spec, latest_remote] if
|
1238
|
-
latest_remote
|
1173
|
+
latest_remote && local_spec.version < latest_remote
|
1239
1174
|
end
|
1240
1175
|
|
1241
1176
|
nil
|
@@ -1261,27 +1196,42 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1261
1196
|
|
1262
1197
|
def self.reset
|
1263
1198
|
@@dirs = nil
|
1264
|
-
Gem.pre_reset_hooks.each
|
1265
|
-
|
1199
|
+
Gem.pre_reset_hooks.each(&:call)
|
1200
|
+
@specification_record = nil
|
1266
1201
|
clear_load_cache
|
1267
|
-
|
1268
|
-
unless
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1202
|
+
|
1203
|
+
unless unresolved_deps.empty?
|
1204
|
+
unresolved = unresolved_deps.filter_map do |name, dep|
|
1205
|
+
matching_versions = find_all_by_name(name)
|
1206
|
+
next if dep.latest_version? && matching_versions.any?(&:default_gem?)
|
1207
|
+
|
1208
|
+
[dep, matching_versions.uniq(&:full_name)]
|
1209
|
+
end.to_h
|
1210
|
+
|
1211
|
+
unless unresolved.empty?
|
1212
|
+
warn "WARN: Unresolved or ambiguous specs during Gem::Specification.reset:"
|
1213
|
+
unresolved.each do |dep, versions|
|
1214
|
+
warn " #{dep}"
|
1215
|
+
|
1216
|
+
unless versions.empty?
|
1217
|
+
warn " Available/installed versions of this gem:"
|
1218
|
+
versions.each {|s| warn " - #{s.version}" }
|
1219
|
+
end
|
1278
1220
|
end
|
1221
|
+
warn "WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'"
|
1222
|
+
warn "Please report a bug if this causes problems."
|
1279
1223
|
end
|
1280
|
-
|
1281
|
-
|
1282
|
-
unresolved.clear
|
1224
|
+
|
1225
|
+
unresolved_deps.clear
|
1283
1226
|
end
|
1284
|
-
Gem.post_reset_hooks.each
|
1227
|
+
Gem.post_reset_hooks.each(&:call)
|
1228
|
+
end
|
1229
|
+
|
1230
|
+
##
|
1231
|
+
# Keeps track of all currently known specifications
|
1232
|
+
|
1233
|
+
def self.specification_record
|
1234
|
+
@specification_record ||= Gem::SpecificationRecord.new(dirs)
|
1285
1235
|
end
|
1286
1236
|
|
1287
1237
|
# DOC: This method needs documented or nodoc'd
|
@@ -1294,10 +1244,23 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1294
1244
|
|
1295
1245
|
def self._load(str)
|
1296
1246
|
Gem.load_yaml
|
1247
|
+
Gem.load_safe_marshal
|
1248
|
+
|
1249
|
+
yaml_set = false
|
1250
|
+
retry_count = 0
|
1297
1251
|
|
1298
1252
|
array = begin
|
1299
|
-
|
1253
|
+
Gem::SafeMarshal.safe_load str
|
1300
1254
|
rescue ArgumentError => e
|
1255
|
+
# Avoid an infinite retry loop when the argument error has nothing to do
|
1256
|
+
# with the classes not being defined.
|
1257
|
+
# 1 retry each allowed in case all 3 of
|
1258
|
+
# - YAML
|
1259
|
+
# - YAML::Syck::DefaultKey
|
1260
|
+
# - YAML::PrivateType
|
1261
|
+
# need to be defined
|
1262
|
+
raise if retry_count >= 3
|
1263
|
+
|
1301
1264
|
#
|
1302
1265
|
# Some very old marshaled specs included references to `YAML::PrivateType`
|
1303
1266
|
# and `YAML::Syck::DefaultKey` constants due to bugs in the old emitter
|
@@ -1307,17 +1270,23 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1307
1270
|
message = e.message
|
1308
1271
|
raise unless message.include?("YAML::")
|
1309
1272
|
|
1310
|
-
|
1273
|
+
unless Object.const_defined?(:YAML)
|
1274
|
+
Object.const_set "YAML", Psych
|
1275
|
+
yaml_set = true
|
1276
|
+
end
|
1311
1277
|
|
1312
1278
|
if message.include?("YAML::Syck::")
|
1313
1279
|
YAML.const_set "Syck", YAML unless YAML.const_defined?(:Syck)
|
1314
1280
|
|
1315
|
-
YAML::Syck.const_set "DefaultKey", Class.new if message.include?("YAML::Syck::DefaultKey")
|
1316
|
-
elsif message.include?("YAML::PrivateType")
|
1281
|
+
YAML::Syck.const_set "DefaultKey", Class.new if message.include?("YAML::Syck::DefaultKey") && !YAML::Syck.const_defined?(:DefaultKey)
|
1282
|
+
elsif message.include?("YAML::PrivateType") && !YAML.const_defined?(:PrivateType)
|
1317
1283
|
YAML.const_set "PrivateType", Class.new
|
1318
1284
|
end
|
1319
1285
|
|
1286
|
+
retry_count += 1
|
1320
1287
|
retry
|
1288
|
+
ensure
|
1289
|
+
Object.__send__(:remove_const, "YAML") if yaml_set
|
1321
1290
|
end
|
1322
1291
|
|
1323
1292
|
spec = Gem::Specification.new
|
@@ -1345,7 +1314,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1345
1314
|
spec.instance_variable_set :@summary, array[5]
|
1346
1315
|
spec.instance_variable_set :@required_ruby_version, array[6]
|
1347
1316
|
spec.instance_variable_set :@required_rubygems_version, array[7]
|
1348
|
-
spec.
|
1317
|
+
spec.platform = array[8]
|
1349
1318
|
spec.instance_variable_set :@dependencies, array[9]
|
1350
1319
|
# offset due to rubyforge_project removal
|
1351
1320
|
spec.instance_variable_set :@email, array[11]
|
@@ -1353,9 +1322,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1353
1322
|
spec.instance_variable_set :@description, array[13]
|
1354
1323
|
spec.instance_variable_set :@homepage, array[14]
|
1355
1324
|
spec.instance_variable_set :@has_rdoc, array[15]
|
1356
|
-
spec.instance_variable_set :@
|
1357
|
-
spec.instance_variable_set :@platform, array[16].to_s
|
1358
|
-
spec.instance_variable_set :@license, array[17]
|
1325
|
+
spec.instance_variable_set :@licenses, [array[17]]
|
1359
1326
|
spec.instance_variable_set :@metadata, array[18]
|
1360
1327
|
spec.instance_variable_set :@loaded, false
|
1361
1328
|
spec.instance_variable_set :@activated, false
|
@@ -1392,7 +1359,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1392
1359
|
@required_rubygems_version,
|
1393
1360
|
@original_platform,
|
1394
1361
|
@dependencies,
|
1395
|
-
|
1362
|
+
"", # rubyforge_project
|
1396
1363
|
@email,
|
1397
1364
|
@authors,
|
1398
1365
|
@description,
|
@@ -1411,7 +1378,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1411
1378
|
# there are conflicts upon activation.
|
1412
1379
|
|
1413
1380
|
def activate
|
1414
|
-
other = Gem.loaded_specs[
|
1381
|
+
other = Gem.loaded_specs[name]
|
1415
1382
|
if other
|
1416
1383
|
check_version_conflict other
|
1417
1384
|
return false
|
@@ -1422,11 +1389,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1422
1389
|
activate_dependencies
|
1423
1390
|
add_self_to_load_path
|
1424
1391
|
|
1425
|
-
Gem.loaded_specs[
|
1392
|
+
Gem.loaded_specs[name] = self
|
1426
1393
|
@activated = true
|
1427
1394
|
@loaded = true
|
1428
1395
|
|
1429
|
-
|
1396
|
+
true
|
1430
1397
|
end
|
1431
1398
|
|
1432
1399
|
##
|
@@ -1437,7 +1404,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1437
1404
|
def activate_dependencies
|
1438
1405
|
unresolved = Gem::Specification.unresolved_deps
|
1439
1406
|
|
1440
|
-
|
1407
|
+
runtime_dependencies.each do |spec_dep|
|
1441
1408
|
if loaded = Gem.loaded_specs[spec_dep.name]
|
1442
1409
|
next if spec_dep.matches_spec? loaded
|
1443
1410
|
|
@@ -1449,9 +1416,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1449
1416
|
end
|
1450
1417
|
|
1451
1418
|
begin
|
1452
|
-
specs = spec_dep.to_specs
|
1419
|
+
specs = spec_dep.to_specs.uniq(&:full_name)
|
1453
1420
|
rescue Gem::MissingSpecError => e
|
1454
|
-
raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{
|
1421
|
+
raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}")
|
1455
1422
|
end
|
1456
1423
|
|
1457
1424
|
if specs.size == 1
|
@@ -1497,7 +1464,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1497
1464
|
def sanitize_string(string)
|
1498
1465
|
return string unless string
|
1499
1466
|
|
1500
|
-
# HACK the #to_s is in here because RSpec has an Array of Arrays of
|
1467
|
+
# HACK: the #to_s is in here because RSpec has an Array of Arrays of
|
1501
1468
|
# Strings for authors. Need a way to disallow bad values on gemspec
|
1502
1469
|
# generation. (Probably won't happen.)
|
1503
1470
|
string.to_s
|
@@ -1515,8 +1482,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1515
1482
|
else
|
1516
1483
|
executables
|
1517
1484
|
end
|
1518
|
-
rescue
|
1519
|
-
|
1485
|
+
rescue StandardError
|
1486
|
+
nil
|
1520
1487
|
end
|
1521
1488
|
|
1522
1489
|
##
|
@@ -1541,7 +1508,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1541
1508
|
|
1542
1509
|
private :add_dependency_with_type
|
1543
1510
|
|
1544
|
-
|
1511
|
+
alias_method :add_runtime_dependency, :add_dependency
|
1545
1512
|
|
1546
1513
|
##
|
1547
1514
|
# Adds this spec's require paths to LOAD_PATH, in the proper location.
|
@@ -1558,7 +1525,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1558
1525
|
# Singular reader for #authors. Returns the first author in the list
|
1559
1526
|
|
1560
1527
|
def author
|
1561
|
-
val = authors
|
1528
|
+
(val = authors) && val.first
|
1562
1529
|
end
|
1563
1530
|
|
1564
1531
|
##
|
@@ -1593,7 +1560,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1593
1560
|
def build_args
|
1594
1561
|
if File.exist? build_info_file
|
1595
1562
|
build_info = File.readlines build_info_file
|
1596
|
-
build_info = build_info.map
|
1563
|
+
build_info = build_info.map(&:strip)
|
1597
1564
|
build_info.delete ""
|
1598
1565
|
build_info
|
1599
1566
|
else
|
@@ -1608,9 +1575,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1608
1575
|
def build_extensions # :nodoc:
|
1609
1576
|
return if extensions.empty?
|
1610
1577
|
return if default_gem?
|
1578
|
+
# we need to fresh build when same name and version of default gems
|
1579
|
+
return if self.class.find_by_full_name(full_name)&.default_gem?
|
1611
1580
|
return if File.exist? gem_build_complete_path
|
1612
|
-
return
|
1613
|
-
return
|
1581
|
+
return unless File.writable?(base_dir)
|
1582
|
+
return unless File.exist?(File.join(base_dir, "extensions"))
|
1614
1583
|
|
1615
1584
|
begin
|
1616
1585
|
# We need to require things in $LOAD_PATH without looking for the
|
@@ -1618,9 +1587,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1618
1587
|
unresolved_deps = Gem::Specification.unresolved_deps.dup
|
1619
1588
|
Gem::Specification.unresolved_deps.clear
|
1620
1589
|
|
1621
|
-
require_relative
|
1622
|
-
require_relative
|
1623
|
-
require_relative
|
1590
|
+
require_relative "config_file"
|
1591
|
+
require_relative "ext"
|
1592
|
+
require_relative "user_interaction"
|
1624
1593
|
|
1625
1594
|
ui = Gem::SilentUI.new
|
1626
1595
|
Gem::DefaultUserInteraction.use_ui ui do
|
@@ -1628,7 +1597,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1628
1597
|
builder.build_extensions
|
1629
1598
|
end
|
1630
1599
|
ensure
|
1631
|
-
ui
|
1600
|
+
ui&.close
|
1632
1601
|
Gem::Specification.unresolved_deps.replace unresolved_deps
|
1633
1602
|
end
|
1634
1603
|
end
|
@@ -1668,9 +1637,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1668
1637
|
|
1669
1638
|
def conflicts
|
1670
1639
|
conflicts = {}
|
1671
|
-
|
1640
|
+
runtime_dependencies.each do |dep|
|
1672
1641
|
spec = Gem.loaded_specs[dep.name]
|
1673
|
-
if spec
|
1642
|
+
if spec && !spec.satisfies_requirement?(dep)
|
1674
1643
|
(conflicts[spec] ||= []) << dep
|
1675
1644
|
end
|
1676
1645
|
end
|
@@ -1684,7 +1653,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1684
1653
|
|
1685
1654
|
def conficts_when_loaded_with?(list_of_specs) # :nodoc:
|
1686
1655
|
result = list_of_specs.any? do |spec|
|
1687
|
-
spec.
|
1656
|
+
spec.runtime_dependencies.any? {|dep| (dep.name == name) && !satisfies_requirement?(dep) }
|
1688
1657
|
end
|
1689
1658
|
result
|
1690
1659
|
end
|
@@ -1694,14 +1663,12 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1694
1663
|
|
1695
1664
|
def has_conflicts?
|
1696
1665
|
return true unless Gem.env_requirement(name).satisfied_by?(version)
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
spec and not spec.satisfies_requirement? dep
|
1701
|
-
else
|
1702
|
-
false
|
1703
|
-
end
|
1666
|
+
runtime_dependencies.any? do |dep|
|
1667
|
+
spec = Gem.loaded_specs[dep.name]
|
1668
|
+
spec && !spec.satisfies_requirement?(dep)
|
1704
1669
|
end
|
1670
|
+
rescue ArgumentError => e
|
1671
|
+
raise e, "#{name} #{version}: #{e.message}"
|
1705
1672
|
end
|
1706
1673
|
|
1707
1674
|
# The date this gem was created.
|
@@ -1718,14 +1685,14 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1718
1685
|
|
1719
1686
|
DateLike = Object.new # :nodoc:
|
1720
1687
|
def DateLike.===(obj) # :nodoc:
|
1721
|
-
defined?(::Date)
|
1688
|
+
defined?(::Date) && Date === obj
|
1722
1689
|
end
|
1723
1690
|
|
1724
1691
|
DateTimeFormat = # :nodoc:
|
1725
1692
|
/\A
|
1726
1693
|
(\d{4})-(\d{2})-(\d{2})
|
1727
1694
|
(\s+ \d{2}:\d{2}:\d{2}\.\d+ \s* (Z | [-+]\d\d:\d\d) )?
|
1728
|
-
\Z/x
|
1695
|
+
\Z/x
|
1729
1696
|
|
1730
1697
|
##
|
1731
1698
|
# The date this gem was created
|
@@ -1737,17 +1704,17 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1737
1704
|
# This is the cleanest, most-readable, faster-than-using-Date
|
1738
1705
|
# way to do it.
|
1739
1706
|
@date = case date
|
1740
|
-
|
1741
|
-
|
1742
|
-
|
1743
|
-
|
1744
|
-
|
1745
|
-
|
1746
|
-
|
1747
|
-
|
1748
|
-
|
1749
|
-
|
1750
|
-
|
1707
|
+
when String then
|
1708
|
+
if DateTimeFormat =~ date
|
1709
|
+
Time.utc($1.to_i, $2.to_i, $3.to_i)
|
1710
|
+
else
|
1711
|
+
raise(Gem::InvalidSpecificationException,
|
1712
|
+
"invalid date format in specification: #{date.inspect}")
|
1713
|
+
end
|
1714
|
+
when Time, DateLike then
|
1715
|
+
Time.utc(date.year, date.month, date.day)
|
1716
|
+
else
|
1717
|
+
TODAY
|
1751
1718
|
end
|
1752
1719
|
end
|
1753
1720
|
|
@@ -1758,9 +1725,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1758
1725
|
# executable now. See Gem.bin_path.
|
1759
1726
|
|
1760
1727
|
def default_executable # :nodoc:
|
1761
|
-
if defined?(@default_executable)
|
1728
|
+
if defined?(@default_executable) && @default_executable
|
1762
1729
|
result = @default_executable
|
1763
|
-
elsif @executables
|
1730
|
+
elsif @executables && @executables.size == 1
|
1764
1731
|
result = Array(@executables).first
|
1765
1732
|
else
|
1766
1733
|
result = nil
|
@@ -1797,13 +1764,12 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1797
1764
|
Gem::Specification.each do |spec|
|
1798
1765
|
deps = check_dev ? spec.dependencies : spec.runtime_dependencies
|
1799
1766
|
deps.each do |dep|
|
1800
|
-
|
1801
|
-
|
1802
|
-
|
1803
|
-
|
1804
|
-
end
|
1805
|
-
out << [spec, dep, sats]
|
1767
|
+
next unless satisfies_requirement?(dep)
|
1768
|
+
sats = []
|
1769
|
+
find_all_satisfiers(dep) do |sat|
|
1770
|
+
sats << sat
|
1806
1771
|
end
|
1772
|
+
out << [spec, dep, sats]
|
1807
1773
|
end
|
1808
1774
|
end
|
1809
1775
|
out
|
@@ -1813,7 +1779,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1813
1779
|
# Returns all specs that matches this spec's runtime dependencies.
|
1814
1780
|
|
1815
1781
|
def dependent_specs
|
1816
|
-
runtime_dependencies.
|
1782
|
+
runtime_dependencies.flat_map(&:to_specs)
|
1817
1783
|
end
|
1818
1784
|
|
1819
1785
|
##
|
@@ -1839,7 +1805,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1839
1805
|
# spec.doc_dir 'ri' # => "/path/to/gem_repo/doc/a-1/ri"
|
1840
1806
|
|
1841
1807
|
def doc_dir(type = nil)
|
1842
|
-
@doc_dir ||= File.join base_dir,
|
1808
|
+
@doc_dir ||= File.join base_dir, "doc", full_name
|
1843
1809
|
|
1844
1810
|
if type
|
1845
1811
|
File.join @doc_dir, type
|
@@ -1849,23 +1815,15 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1849
1815
|
end
|
1850
1816
|
|
1851
1817
|
def encode_with(coder) # :nodoc:
|
1852
|
-
|
1853
|
-
|
1854
|
-
coder.add
|
1855
|
-
coder.add
|
1856
|
-
platform = case @original_platform
|
1857
|
-
when nil, '' then
|
1858
|
-
'ruby'
|
1859
|
-
when String then
|
1860
|
-
@original_platform
|
1861
|
-
else
|
1862
|
-
@original_platform.to_s
|
1863
|
-
end
|
1864
|
-
coder.add 'platform', platform
|
1818
|
+
coder.add "name", @name
|
1819
|
+
coder.add "version", @version
|
1820
|
+
coder.add "platform", platform.to_s
|
1821
|
+
coder.add "original_platform", original_platform.to_s if platform.to_s != original_platform.to_s
|
1865
1822
|
|
1866
1823
|
attributes = @@attributes.map(&:to_s) - %w[name version platform]
|
1867
1824
|
attributes.each do |name|
|
1868
|
-
|
1825
|
+
value = instance_variable_get("@#{name}")
|
1826
|
+
coder.add name, value unless value.nil?
|
1869
1827
|
end
|
1870
1828
|
end
|
1871
1829
|
|
@@ -1877,7 +1835,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1877
1835
|
# Singular accessor for #executables
|
1878
1836
|
|
1879
1837
|
def executable
|
1880
|
-
val = executables
|
1838
|
+
(val = executables) && val.first
|
1881
1839
|
end
|
1882
1840
|
|
1883
1841
|
##
|
@@ -1952,7 +1910,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1952
1910
|
end
|
1953
1911
|
|
1954
1912
|
##
|
1955
|
-
# Work around bundler removing my methods
|
1913
|
+
# Work around old bundler versions removing my methods
|
1914
|
+
# Can be removed once RubyGems can no longer install Bundler 2.5
|
1956
1915
|
|
1957
1916
|
def gem_dir # :nodoc:
|
1958
1917
|
super
|
@@ -1982,18 +1941,18 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1982
1941
|
end
|
1983
1942
|
rubygems_deprecate :has_rdoc=
|
1984
1943
|
|
1985
|
-
|
1944
|
+
alias_method :has_rdoc?, :has_rdoc # :nodoc:
|
1986
1945
|
rubygems_deprecate :has_rdoc?
|
1987
1946
|
|
1988
1947
|
##
|
1989
1948
|
# True if this gem has files in test_files
|
1990
1949
|
|
1991
1950
|
def has_unit_tests? # :nodoc:
|
1992
|
-
|
1951
|
+
!test_files.empty?
|
1993
1952
|
end
|
1994
1953
|
|
1995
1954
|
# :stopdoc:
|
1996
|
-
|
1955
|
+
alias_method :has_test_suite?, :has_unit_tests?
|
1997
1956
|
# :startdoc:
|
1998
1957
|
|
1999
1958
|
def hash # :nodoc:
|
@@ -2042,7 +2001,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2042
2001
|
self.name = name if name
|
2043
2002
|
self.version = version if version
|
2044
2003
|
|
2045
|
-
if platform = Gem.platforms.last
|
2004
|
+
if (platform = Gem.platforms.last) && platform != Gem::Platform::RUBY && platform != Gem::Platform.local
|
2046
2005
|
self.platform = platform
|
2047
2006
|
end
|
2048
2007
|
|
@@ -2050,7 +2009,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2050
2009
|
end
|
2051
2010
|
|
2052
2011
|
##
|
2053
|
-
# Duplicates
|
2012
|
+
# Duplicates Array and Gem::Requirement attributes from +other_spec+ so state isn't shared.
|
2013
|
+
#
|
2054
2014
|
|
2055
2015
|
def initialize_copy(other_spec)
|
2056
2016
|
self.class.array_attributes.each do |name|
|
@@ -2072,6 +2032,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2072
2032
|
raise e
|
2073
2033
|
end
|
2074
2034
|
end
|
2035
|
+
|
2036
|
+
@required_ruby_version = other_spec.required_ruby_version.dup
|
2037
|
+
@required_rubygems_version = other_spec.required_rubygems_version.dup
|
2075
2038
|
end
|
2076
2039
|
|
2077
2040
|
def base_dir
|
@@ -2140,13 +2103,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2140
2103
|
@spec_file = nil
|
2141
2104
|
end
|
2142
2105
|
|
2143
|
-
##
|
2144
|
-
# Sets the rubygems_version to the current RubyGems version.
|
2145
|
-
|
2146
|
-
def mark_version
|
2147
|
-
@rubygems_version = Gem::VERSION
|
2148
|
-
end
|
2149
|
-
|
2150
2106
|
##
|
2151
2107
|
# Track removed method calls to warn about during build time.
|
2152
2108
|
# Warn about unknown attributes while loading a spec.
|
@@ -2157,8 +2113,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2157
2113
|
return
|
2158
2114
|
end
|
2159
2115
|
|
2160
|
-
if @specification_version > CURRENT_SPECIFICATION_VERSION
|
2161
|
-
|
2116
|
+
if @specification_version > CURRENT_SPECIFICATION_VERSION &&
|
2117
|
+
sym.to_s.end_with?("=")
|
2162
2118
|
warn "ignoring #{sym} loading #{full_name}" if $DEBUG
|
2163
2119
|
else
|
2164
2120
|
super
|
@@ -2184,7 +2140,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2184
2140
|
# file list.
|
2185
2141
|
|
2186
2142
|
def normalize
|
2187
|
-
if defined?(@extra_rdoc_files)
|
2143
|
+
if defined?(@extra_rdoc_files) && @extra_rdoc_files
|
2188
2144
|
@extra_rdoc_files.uniq!
|
2189
2145
|
@files ||= []
|
2190
2146
|
@files.concat(@extra_rdoc_files)
|
@@ -2209,7 +2165,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2209
2165
|
# platform. For use with legacy gems.
|
2210
2166
|
|
2211
2167
|
def original_name # :nodoc:
|
2212
|
-
if platform == Gem::Platform::RUBY
|
2168
|
+
if platform == Gem::Platform::RUBY || platform.nil?
|
2213
2169
|
"#{@name}-#{@version}"
|
2214
2170
|
else
|
2215
2171
|
"#{@name}-#{@version}-#{@original_platform}"
|
@@ -2227,11 +2183,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2227
2183
|
# The platform this gem runs on. See Gem::Platform for details.
|
2228
2184
|
|
2229
2185
|
def platform
|
2230
|
-
@new_platform ||= Gem::Platform::RUBY
|
2186
|
+
@new_platform ||= Gem::Platform::RUBY # rubocop:disable Naming/MemoizedInstanceVariableName
|
2231
2187
|
end
|
2232
2188
|
|
2233
2189
|
def pretty_print(q) # :nodoc:
|
2234
|
-
q.group 2,
|
2190
|
+
q.group 2, "Gem::Specification.new do |s|", "end" do
|
2235
2191
|
q.breakable
|
2236
2192
|
|
2237
2193
|
attributes = @@attributes - [:name, :version]
|
@@ -2240,23 +2196,22 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2240
2196
|
attributes.unshift :name
|
2241
2197
|
|
2242
2198
|
attributes.each do |attr_name|
|
2243
|
-
current_value =
|
2244
|
-
current_value = current_value.sort if
|
2245
|
-
|
2246
|
-
|
2247
|
-
|
2248
|
-
q.text "s.#{attr_name} = "
|
2199
|
+
current_value = send attr_name
|
2200
|
+
current_value = current_value.sort if [:files, :test_files].include? attr_name
|
2201
|
+
next unless current_value != default_value(attr_name) ||
|
2202
|
+
self.class.required_attribute?(attr_name)
|
2249
2203
|
|
2250
|
-
|
2251
|
-
current_value = current_value.utc
|
2204
|
+
q.text "s.#{attr_name} = "
|
2252
2205
|
|
2253
|
-
|
2254
|
-
|
2255
|
-
q.pp current_value
|
2256
|
-
end
|
2206
|
+
if attr_name == :date
|
2207
|
+
current_value = current_value.utc
|
2257
2208
|
|
2258
|
-
q.
|
2209
|
+
q.text "Time.utc(#{current_value.year}, #{current_value.month}, #{current_value.day})"
|
2210
|
+
else
|
2211
|
+
q.pp current_value
|
2259
2212
|
end
|
2213
|
+
|
2214
|
+
q.breakable
|
2260
2215
|
end
|
2261
2216
|
end
|
2262
2217
|
end
|
@@ -2266,7 +2221,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2266
2221
|
# that is already loaded (+other+)
|
2267
2222
|
|
2268
2223
|
def check_version_conflict(other) # :nodoc:
|
2269
|
-
return if
|
2224
|
+
return if version == other.version
|
2270
2225
|
|
2271
2226
|
# This gem is already loaded. If the currently loaded gem is not in the
|
2272
2227
|
# list of candidate gems, then we have a version conflict.
|
@@ -2274,7 +2229,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2274
2229
|
msg = "can't activate #{full_name}, already activated #{other.full_name}"
|
2275
2230
|
|
2276
2231
|
e = Gem::LoadError.new msg
|
2277
|
-
e.name =
|
2232
|
+
e.name = name
|
2278
2233
|
|
2279
2234
|
raise e
|
2280
2235
|
end
|
@@ -2301,7 +2256,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2301
2256
|
# Singular accessor for #require_paths
|
2302
2257
|
|
2303
2258
|
def require_path
|
2304
|
-
val = require_paths
|
2259
|
+
(val = require_paths) && val.first
|
2305
2260
|
end
|
2306
2261
|
|
2307
2262
|
##
|
@@ -2326,7 +2281,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2326
2281
|
# Returns the full path to this spec's ri directory.
|
2327
2282
|
|
2328
2283
|
def ri_dir
|
2329
|
-
@ri_dir ||= File.join base_dir,
|
2284
|
+
@ri_dir ||= File.join base_dir, "ri", full_name
|
2330
2285
|
end
|
2331
2286
|
|
2332
2287
|
##
|
@@ -2336,16 +2291,16 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2336
2291
|
def ruby_code(obj)
|
2337
2292
|
case obj
|
2338
2293
|
when String then obj.dump + ".freeze"
|
2339
|
-
when Array then
|
2294
|
+
when Array then "[" + obj.map {|x| ruby_code x }.join(", ") + "]"
|
2340
2295
|
when Hash then
|
2341
2296
|
seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
|
2342
|
-
"{ #{seg.join(
|
2343
|
-
when Gem::Version then obj.to_s
|
2344
|
-
when DateLike then obj.strftime(
|
2345
|
-
when Time then obj.strftime(
|
2297
|
+
"{ #{seg.join(", ")} }"
|
2298
|
+
when Gem::Version then ruby_code(obj.to_s)
|
2299
|
+
when DateLike then obj.strftime("%Y-%m-%d").dump
|
2300
|
+
when Time then obj.strftime("%Y-%m-%d").dump
|
2346
2301
|
when Numeric then obj.inspect
|
2347
2302
|
when true, false, nil then obj.inspect
|
2348
|
-
when Gem::Platform then "Gem::Platform.new(#{obj.to_a
|
2303
|
+
when Gem::Platform then "Gem::Platform.new(#{ruby_code obj.to_a})"
|
2349
2304
|
when Gem::Requirement then
|
2350
2305
|
list = obj.as_list
|
2351
2306
|
"Gem::Requirement.new(#{ruby_code(list.size == 1 ? obj.to_s : list)})"
|
@@ -2366,7 +2321,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2366
2321
|
# True if this gem has the same attributes as +other+.
|
2367
2322
|
|
2368
2323
|
def same_attributes?(spec)
|
2369
|
-
@@attributes.all? {|name,
|
2324
|
+
@@attributes.all? {|name, _default| send(name) == spec.send(name) }
|
2370
2325
|
end
|
2371
2326
|
|
2372
2327
|
private :same_attributes?
|
@@ -2375,7 +2330,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2375
2330
|
# Checks if this specification meets the requirement of +dependency+.
|
2376
2331
|
|
2377
2332
|
def satisfies_requirement?(dependency)
|
2378
|
-
|
2333
|
+
@name == dependency.name &&
|
2379
2334
|
dependency.requirement.satisfied_by?(@version)
|
2380
2335
|
end
|
2381
2336
|
|
@@ -2430,7 +2385,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2430
2385
|
# Singular accessor for #test_files
|
2431
2386
|
|
2432
2387
|
def test_file # :nodoc:
|
2433
|
-
val = test_files
|
2388
|
+
(val = test_files) && val.first
|
2434
2389
|
end
|
2435
2390
|
|
2436
2391
|
##
|
@@ -2452,7 +2407,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2452
2407
|
@test_files = [@test_suite_file].flatten
|
2453
2408
|
@test_suite_file = nil
|
2454
2409
|
end
|
2455
|
-
if defined?(@test_files)
|
2410
|
+
if defined?(@test_files) && @test_files
|
2456
2411
|
@test_files
|
2457
2412
|
else
|
2458
2413
|
@test_files = []
|
@@ -2465,7 +2420,6 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2465
2420
|
# still have their default values are omitted.
|
2466
2421
|
|
2467
2422
|
def to_ruby
|
2468
|
-
mark_version
|
2469
2423
|
result = []
|
2470
2424
|
result << "# -*- encoding: utf-8 -*-"
|
2471
2425
|
result << "#{Gem::StubSpecification::PREFIX}#{name} #{version} #{platform} #{raw_require_paths.join("\0")}"
|
@@ -2476,13 +2430,13 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2476
2430
|
|
2477
2431
|
result << " s.name = #{ruby_code name}"
|
2478
2432
|
result << " s.version = #{ruby_code version}"
|
2479
|
-
unless platform.nil?
|
2433
|
+
unless platform.nil? || platform == Gem::Platform::RUBY
|
2480
2434
|
result << " s.platform = #{ruby_code original_platform}"
|
2481
2435
|
end
|
2482
2436
|
result << ""
|
2483
2437
|
result << " s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version="
|
2484
2438
|
|
2485
|
-
if metadata
|
2439
|
+
if metadata && !metadata.empty?
|
2486
2440
|
result << " s.metadata = #{ruby_code metadata} if s.respond_to? :metadata="
|
2487
2441
|
end
|
2488
2442
|
result << " s.require_paths = #{ruby_code raw_require_paths}"
|
@@ -2503,42 +2457,30 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2503
2457
|
|
2504
2458
|
@@attributes.each do |attr_name|
|
2505
2459
|
next if handled.include? attr_name
|
2506
|
-
current_value =
|
2460
|
+
current_value = send(attr_name)
|
2507
2461
|
if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
|
2508
2462
|
result << " s.#{attr_name} = #{ruby_code current_value}"
|
2509
2463
|
end
|
2510
2464
|
end
|
2511
2465
|
|
2512
2466
|
if String === signing_key
|
2513
|
-
result << " s.signing_key = #{signing_key
|
2467
|
+
result << " s.signing_key = #{ruby_code signing_key}"
|
2514
2468
|
end
|
2515
2469
|
|
2516
2470
|
if @installed_by_version
|
2517
2471
|
result << nil
|
2518
|
-
result << " s.installed_by_version =
|
2472
|
+
result << " s.installed_by_version = #{ruby_code Gem::VERSION}"
|
2519
2473
|
end
|
2520
2474
|
|
2521
2475
|
unless dependencies.empty?
|
2522
2476
|
result << nil
|
2523
|
-
result << "
|
2524
|
-
result << " s.specification_version = #{specification_version}"
|
2525
|
-
result << " end"
|
2477
|
+
result << " s.specification_version = #{specification_version}"
|
2526
2478
|
result << nil
|
2527
2479
|
|
2528
|
-
result << " if s.respond_to? :add_runtime_dependency then"
|
2529
|
-
|
2530
2480
|
dependencies.each do |dep|
|
2531
|
-
req = dep.requirements_list.inspect
|
2532
2481
|
dep.instance_variable_set :@type, :runtime if dep.type.nil? # HACK
|
2533
|
-
result << "
|
2482
|
+
result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{ruby_code dep.requirements_list})"
|
2534
2483
|
end
|
2535
|
-
|
2536
|
-
result << " else"
|
2537
|
-
dependencies.each do |dep|
|
2538
|
-
version_reqs_param = dep.requirements_list.inspect
|
2539
|
-
result << " s.add_dependency(%q<#{dep.name}>.freeze, #{version_reqs_param})"
|
2540
|
-
end
|
2541
|
-
result << " end"
|
2542
2484
|
end
|
2543
2485
|
|
2544
2486
|
result << "end"
|
@@ -2575,14 +2517,14 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2575
2517
|
# back, we have to check again here to make sure that our
|
2576
2518
|
# psych code was properly loaded, and load it if not.
|
2577
2519
|
unless Gem.const_defined?(:NoAliasYAMLTree)
|
2578
|
-
require_relative
|
2520
|
+
require_relative "psych_tree"
|
2579
2521
|
end
|
2580
2522
|
|
2581
2523
|
builder = Gem::NoAliasYAMLTree.create
|
2582
2524
|
builder << self
|
2583
2525
|
ast = builder.tree
|
2584
2526
|
|
2585
|
-
require
|
2527
|
+
require "stringio"
|
2586
2528
|
io = StringIO.new
|
2587
2529
|
io.set_encoding Encoding::UTF_8
|
2588
2530
|
|
@@ -2598,10 +2540,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2598
2540
|
def traverse(trail = [], visited = {}, &block)
|
2599
2541
|
trail.push(self)
|
2600
2542
|
begin
|
2601
|
-
|
2602
|
-
next unless dep.runtime?
|
2543
|
+
runtime_dependencies.each do |dep|
|
2603
2544
|
dep.matching_specs(true).each do |dep_spec|
|
2604
|
-
next if visited.
|
2545
|
+
next if visited.key?(dep_spec)
|
2605
2546
|
visited[dep_spec] = true
|
2606
2547
|
trail.push(dep_spec)
|
2607
2548
|
begin
|
@@ -2609,11 +2550,10 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2609
2550
|
ensure
|
2610
2551
|
trail.pop
|
2611
2552
|
end
|
2612
|
-
|
2613
|
-
|
2614
|
-
|
2615
|
-
|
2616
|
-
end
|
2553
|
+
next if result == :next
|
2554
|
+
spec_name = dep_spec.name
|
2555
|
+
dep_spec.traverse(trail, visited, &block) unless
|
2556
|
+
trail.any? {|s| s.name == spec_name }
|
2617
2557
|
end
|
2618
2558
|
end
|
2619
2559
|
ensure
|
@@ -2644,6 +2584,10 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2644
2584
|
@test_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) }
|
2645
2585
|
end
|
2646
2586
|
|
2587
|
+
def validate_for_resolution
|
2588
|
+
Gem::SpecificationPolicy.new(self).validate_for_resolution
|
2589
|
+
end
|
2590
|
+
|
2647
2591
|
def validate_metadata
|
2648
2592
|
Gem::SpecificationPolicy.new(self).validate_metadata
|
2649
2593
|
end
|
@@ -2660,20 +2604,13 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2660
2604
|
rubygems_deprecate :validate_permissions
|
2661
2605
|
|
2662
2606
|
##
|
2663
|
-
# Set the version to +version
|
2664
|
-
# required_rubygems_version if +version+ indicates it is a
|
2665
|
-
# prerelease.
|
2607
|
+
# Set the version to +version+.
|
2666
2608
|
|
2667
2609
|
def version=(version)
|
2668
2610
|
@version = Gem::Version.create(version)
|
2669
|
-
|
2670
|
-
# It caused to raise CircularDependencyError
|
2671
|
-
if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
|
2672
|
-
self.required_rubygems_version = '> 1.3.1'
|
2673
|
-
end
|
2674
|
-
invalidate_memoized_attributes
|
2611
|
+
return if @version.nil?
|
2675
2612
|
|
2676
|
-
|
2613
|
+
invalidate_memoized_attributes
|
2677
2614
|
end
|
2678
2615
|
|
2679
2616
|
def stubbed?
|
@@ -2685,14 +2622,13 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2685
2622
|
case ivar
|
2686
2623
|
when "date"
|
2687
2624
|
# Force Date to go through the extra coerce logic in date=
|
2688
|
-
self.date = val
|
2625
|
+
self.date = val
|
2626
|
+
when "platform"
|
2627
|
+
self.platform = val
|
2689
2628
|
else
|
2690
|
-
instance_variable_set "@#{ivar}", val
|
2629
|
+
instance_variable_set "@#{ivar}", val
|
2691
2630
|
end
|
2692
2631
|
end
|
2693
|
-
|
2694
|
-
@original_platform = @platform # for backwards compatibility
|
2695
|
-
self.platform = Gem::Platform.new @platform
|
2696
2632
|
end
|
2697
2633
|
|
2698
2634
|
##
|
@@ -2704,17 +2640,19 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2704
2640
|
end
|
2705
2641
|
|
2706
2642
|
nil_attributes.each do |attribute|
|
2707
|
-
default =
|
2643
|
+
default = default_value attribute
|
2708
2644
|
|
2709
2645
|
value = case default
|
2710
|
-
|
2711
|
-
|
2646
|
+
when Time, Numeric, Symbol, true, false, nil then default
|
2647
|
+
else default.dup
|
2712
2648
|
end
|
2713
2649
|
|
2714
2650
|
instance_variable_set "@#{attribute}", value
|
2715
2651
|
end
|
2716
2652
|
|
2717
2653
|
@installed_by_version ||= nil
|
2654
|
+
|
2655
|
+
nil
|
2718
2656
|
end
|
2719
2657
|
|
2720
2658
|
def flatten_require_paths # :nodoc:
|