rubygems-update 2.6.1 → 3.5.0
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 +5 -5
- data/CHANGELOG.md +5899 -0
- data/CODE_OF_CONDUCT.md +76 -35
- data/CONTRIBUTING.md +231 -0
- data/MAINTAINERS.txt +8 -0
- data/Manifest.txt +428 -216
- data/POLICIES.md +135 -0
- data/README.md +112 -0
- data/UPGRADING.md +15 -0
- data/bundler/CHANGELOG.md +4719 -0
- data/bundler/LICENSE.md +22 -0
- data/bundler/README.md +58 -0
- data/bundler/UPGRADING.md +222 -0
- data/bundler/bundler.gemspec +46 -0
- data/bundler/exe/bundle +29 -0
- data/bundler/exe/bundler +4 -0
- data/bundler/lib/bundler/.document +1 -0
- data/bundler/lib/bundler/build_metadata.rb +45 -0
- data/bundler/lib/bundler/capistrano.rb +22 -0
- data/bundler/lib/bundler/checksum.rb +245 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +47 -0
- data/bundler/lib/bundler/cli/binstubs.rb +57 -0
- data/bundler/lib/bundler/cli/cache.rb +43 -0
- data/bundler/lib/bundler/cli/check.rb +40 -0
- data/bundler/lib/bundler/cli/clean.rb +25 -0
- data/bundler/lib/bundler/cli/common.rb +138 -0
- data/bundler/lib/bundler/cli/config.rb +204 -0
- data/bundler/lib/bundler/cli/console.rb +44 -0
- data/bundler/lib/bundler/cli/doctor.rb +157 -0
- data/bundler/lib/bundler/cli/exec.rb +88 -0
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +471 -0
- data/bundler/lib/bundler/cli/info.rb +83 -0
- data/bundler/lib/bundler/cli/init.rb +51 -0
- data/bundler/lib/bundler/cli/inject.rb +60 -0
- data/bundler/lib/bundler/cli/install.rb +190 -0
- data/bundler/lib/bundler/cli/issue.rb +41 -0
- data/bundler/lib/bundler/cli/list.rb +66 -0
- data/bundler/lib/bundler/cli/lock.rb +73 -0
- data/bundler/lib/bundler/cli/open.rb +29 -0
- data/bundler/lib/bundler/cli/outdated.rb +297 -0
- data/bundler/lib/bundler/cli/platform.rb +48 -0
- data/bundler/lib/bundler/cli/plugin.rb +34 -0
- data/bundler/lib/bundler/cli/pristine.rb +60 -0
- data/bundler/lib/bundler/cli/remove.rb +17 -0
- data/bundler/lib/bundler/cli/show.rb +75 -0
- data/bundler/lib/bundler/cli/update.rb +123 -0
- data/bundler/lib/bundler/cli/viz.rb +31 -0
- data/bundler/lib/bundler/cli.rb +846 -0
- data/bundler/lib/bundler/compact_index_client/cache.rb +121 -0
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +32 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +115 -0
- data/bundler/lib/bundler/compact_index_client.rb +126 -0
- data/bundler/lib/bundler/constants.rb +7 -0
- data/bundler/lib/bundler/current_ruby.rb +92 -0
- data/bundler/lib/bundler/definition.rb +1005 -0
- data/bundler/lib/bundler/dependency.rb +101 -0
- data/bundler/lib/bundler/deployment.rb +69 -0
- data/bundler/lib/bundler/deprecate.rb +44 -0
- data/bundler/lib/bundler/digest.rb +71 -0
- data/bundler/lib/bundler/dsl.rb +601 -0
- data/bundler/lib/bundler/endpoint_specification.rb +147 -0
- data/bundler/lib/bundler/env.rb +148 -0
- data/bundler/lib/bundler/environment_preserver.rb +86 -0
- data/bundler/lib/bundler/errors.rb +233 -0
- data/bundler/lib/bundler/feature_flag.rb +53 -0
- data/bundler/lib/bundler/fetcher/base.rb +52 -0
- data/bundler/lib/bundler/fetcher/compact_index.rb +129 -0
- data/bundler/lib/bundler/fetcher/dependency.rb +78 -0
- data/bundler/lib/bundler/fetcher/downloader.rb +91 -0
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +25 -0
- data/bundler/lib/bundler/fetcher.rb +324 -0
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +126 -0
- data/bundler/lib/bundler/gem_helper.rb +237 -0
- data/bundler/lib/bundler/gem_helpers.rb +127 -0
- data/bundler/lib/bundler/gem_tasks.rb +7 -0
- data/bundler/lib/bundler/gem_version_promoter.rb +145 -0
- data/bundler/lib/bundler/graph.rb +152 -0
- data/bundler/lib/bundler/index.rb +205 -0
- data/bundler/lib/bundler/injector.rb +287 -0
- data/bundler/lib/bundler/inline.rb +73 -0
- data/bundler/lib/bundler/installer/gem_installer.rb +84 -0
- data/bundler/lib/bundler/installer/parallel_installer.rb +202 -0
- data/bundler/lib/bundler/installer/standalone.rb +116 -0
- data/bundler/lib/bundler/installer.rb +267 -0
- data/bundler/lib/bundler/lazy_specification.rb +170 -0
- data/bundler/lib/bundler/lockfile_generator.rb +104 -0
- data/bundler/lib/bundler/lockfile_parser.rb +289 -0
- data/bundler/lib/bundler/man/.document +1 -0
- data/bundler/lib/bundler/man/bundle-add.1 +59 -0
- data/bundler/lib/bundler/man/bundle-add.1.ronn +58 -0
- data/bundler/lib/bundler/man/bundle-binstubs.1 +30 -0
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
- data/bundler/lib/bundler/man/bundle-cache.1 +40 -0
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +79 -0
- data/bundler/lib/bundler/man/bundle-check.1 +22 -0
- data/bundler/lib/bundler/man/bundle-check.1.ronn +26 -0
- data/bundler/lib/bundler/man/bundle-clean.1 +17 -0
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +18 -0
- data/bundler/lib/bundler/man/bundle-config.1 +321 -0
- data/bundler/lib/bundler/man/bundle-config.1.ronn +411 -0
- data/bundler/lib/bundler/man/bundle-console.1 +35 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +30 -0
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +33 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +104 -0
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +151 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +69 -0
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +117 -0
- 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 +14 -0
- data/bundler/lib/bundler/man/bundle-info.1.ronn +17 -0
- data/bundler/lib/bundler/man/bundle-init.1 +20 -0
- data/bundler/lib/bundler/man/bundle-init.1.ronn +31 -0
- data/bundler/lib/bundler/man/bundle-inject.1 +23 -0
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-install.1 +215 -0
- data/bundler/lib/bundler/man/bundle-install.1.ronn +383 -0
- data/bundler/lib/bundler/man/bundle-list.1 +35 -0
- data/bundler/lib/bundler/man/bundle-list.1.ronn +33 -0
- data/bundler/lib/bundler/man/bundle-lock.1 +60 -0
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +94 -0
- data/bundler/lib/bundler/man/bundle-open.1 +32 -0
- data/bundler/lib/bundler/man/bundle-open.1.ronn +27 -0
- data/bundler/lib/bundler/man/bundle-outdated.1 +100 -0
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +106 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +49 -0
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +49 -0
- data/bundler/lib/bundler/man/bundle-plugin.1 +55 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +23 -0
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +34 -0
- data/bundler/lib/bundler/man/bundle-remove.1 +21 -0
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +23 -0
- data/bundler/lib/bundler/man/bundle-show.1 +16 -0
- data/bundler/lib/bundler/man/bundle-show.1.ronn +21 -0
- data/bundler/lib/bundler/man/bundle-update.1 +275 -0
- data/bundler/lib/bundler/man/bundle-update.1.ronn +351 -0
- 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 +30 -0
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +32 -0
- data/bundler/lib/bundler/man/bundle.1 +102 -0
- data/bundler/lib/bundler/man/bundle.1.ronn +116 -0
- data/bundler/lib/bundler/man/gemfile.5 +470 -0
- data/bundler/lib/bundler/man/gemfile.5.ronn +552 -0
- data/bundler/lib/bundler/man/index.txt +29 -0
- data/bundler/lib/bundler/match_metadata.rb +17 -0
- data/bundler/lib/bundler/match_platform.rb +23 -0
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +221 -0
- data/bundler/lib/bundler/plugin/api/source.rb +321 -0
- data/bundler/lib/bundler/plugin/api.rb +81 -0
- data/bundler/lib/bundler/plugin/dsl.rb +53 -0
- data/bundler/lib/bundler/plugin/events.rb +61 -0
- data/bundler/lib/bundler/plugin/index.rb +193 -0
- data/bundler/lib/bundler/plugin/installer/git.rb +34 -0
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +19 -0
- data/bundler/lib/bundler/plugin/installer.rb +112 -0
- data/bundler/lib/bundler/plugin/source_list.rb +31 -0
- data/bundler/lib/bundler/plugin.rb +359 -0
- data/bundler/lib/bundler/process_lock.rb +24 -0
- data/bundler/lib/bundler/remote_specification.rb +117 -0
- data/bundler/lib/bundler/resolver/base.rb +107 -0
- data/bundler/lib/bundler/resolver/candidate.rb +94 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +77 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +79 -0
- data/bundler/lib/bundler/resolver.rb +462 -0
- data/bundler/lib/bundler/retry.rb +66 -0
- data/bundler/lib/bundler/ruby_dsl.rb +53 -0
- data/bundler/lib/bundler/ruby_version.rb +131 -0
- data/bundler/lib/bundler/rubygems_ext.rb +328 -0
- data/bundler/lib/bundler/rubygems_gem_installer.rb +137 -0
- data/bundler/lib/bundler/rubygems_integration.rb +493 -0
- data/bundler/lib/bundler/runtime.rb +307 -0
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/self_manager.rb +186 -0
- data/bundler/lib/bundler/settings/validator.rb +102 -0
- data/bundler/lib/bundler/settings.rb +588 -0
- data/bundler/lib/bundler/setup.rb +33 -0
- data/bundler/lib/bundler/shared_helpers.rb +380 -0
- data/bundler/lib/bundler/similarity_detector.rb +63 -0
- data/bundler/lib/bundler/source/gemspec.rb +18 -0
- data/bundler/lib/bundler/source/git/git_proxy.rb +455 -0
- data/bundler/lib/bundler/source/git.rb +380 -0
- data/bundler/lib/bundler/source/metadata.rb +62 -0
- data/bundler/lib/bundler/source/path/installer.rb +53 -0
- data/bundler/lib/bundler/source/path.rb +261 -0
- data/bundler/lib/bundler/source/rubygems/remote.rb +68 -0
- data/bundler/lib/bundler/source/rubygems.rb +516 -0
- data/bundler/lib/bundler/source/rubygems_aggregate.rb +68 -0
- data/bundler/lib/bundler/source.rb +116 -0
- data/bundler/lib/bundler/source_list.rb +227 -0
- data/bundler/lib/bundler/source_map.rb +71 -0
- data/bundler/lib/bundler/spec_set.rb +247 -0
- data/bundler/lib/bundler/stub_specification.rb +119 -0
- data/bundler/lib/bundler/templates/.document +1 -0
- data/bundler/lib/bundler/templates/Executable +27 -0
- data/bundler/lib/bundler/templates/Executable.bundler +109 -0
- data/bundler/lib/bundler/templates/Executable.standalone +14 -0
- data/bundler/lib/bundler/templates/Gemfile +5 -0
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +84 -0
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +26 -0
- data/bundler/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +45 -0
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +67 -0
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +11 -0
- data/bundler/lib/bundler/templates/newgem/bin/setup.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +25 -0
- data/bundler/lib/bundler/templates/newgem/exe/newgem.tt +3 -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 +9 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
- 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 +37 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +23 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +51 -0
- data/bundler/lib/bundler/templates/newgem/rspec.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +11 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/bundler/lib/bundler/ui/rg_proxy.rb +19 -0
- data/bundler/lib/bundler/ui/shell.rb +165 -0
- data/bundler/lib/bundler/ui/silent.rb +85 -0
- data/bundler/lib/bundler/ui.rb +9 -0
- data/bundler/lib/bundler/uri_credentials_filter.rb +43 -0
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/.document +1 -0
- data/bundler/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +174 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +175 -0
- data/bundler/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +2694 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1073 -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 +60 -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/thor/LICENSE.md +20 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +373 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +281 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +89 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +293 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +388 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +115 -0
- 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 +84 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/lcs_diff.rb +49 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -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 +81 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +663 -0
- data/bundler/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
- data/bundler/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +853 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1588 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +125 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +539 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +183 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/bundler/lib/bundler/vendored_fileutils.rb +4 -0
- data/bundler/lib/bundler/vendored_net_http.rb +8 -0
- data/bundler/lib/bundler/vendored_persistent.rb +11 -0
- data/bundler/lib/bundler/vendored_pub_grub.rb +4 -0
- data/bundler/lib/bundler/vendored_thor.rb +8 -0
- data/bundler/lib/bundler/vendored_timeout.rb +8 -0
- data/bundler/lib/bundler/vendored_tsort.rb +4 -0
- data/bundler/lib/bundler/vendored_uri.rb +4 -0
- data/bundler/lib/bundler/version.rb +13 -0
- data/bundler/lib/bundler/vlad.rb +17 -0
- data/bundler/lib/bundler/worker.rb +117 -0
- data/bundler/lib/bundler/yaml_serializer.rb +93 -0
- data/bundler/lib/bundler.rb +665 -0
- data/{test/rubygems/bogussources.rb → exe/gem} +5 -2
- data/exe/update_rubygems +38 -0
- data/hide_lib_for_update/note.txt +0 -4
- data/lib/rubygems/available_set.rb +12 -12
- data/lib/rubygems/basic_specification.rb +75 -58
- data/lib/rubygems/bundler_version_finder.rb +77 -0
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +144 -71
- data/lib/rubygems/command_manager.rb +64 -27
- data/lib/rubygems/commands/build_command.rb +88 -17
- data/lib/rubygems/commands/cert_command.rb +131 -83
- data/lib/rubygems/commands/check_command.rb +30 -27
- data/lib/rubygems/commands/cleanup_command.rb +57 -40
- data/lib/rubygems/commands/contents_command.rb +37 -39
- data/lib/rubygems/commands/dependency_command.rb +53 -65
- data/lib/rubygems/commands/environment_command.rb +32 -16
- data/lib/rubygems/commands/exec_command.rb +249 -0
- data/lib/rubygems/commands/fetch_command.rb +36 -19
- data/lib/rubygems/commands/generate_index_command.rb +40 -74
- data/lib/rubygems/commands/help_command.rb +22 -22
- data/lib/rubygems/commands/info_command.rb +38 -0
- data/lib/rubygems/commands/install_command.rb +67 -143
- data/lib/rubygems/commands/list_command.rb +10 -9
- data/lib/rubygems/commands/lock_command.rb +12 -14
- data/lib/rubygems/commands/mirror_command.rb +4 -4
- data/lib/rubygems/commands/open_command.rb +28 -26
- data/lib/rubygems/commands/outdated_command.rb +6 -6
- data/lib/rubygems/commands/owner_command.rb +51 -27
- data/lib/rubygems/commands/pristine_command.rb +99 -71
- data/lib/rubygems/commands/push_command.rb +53 -46
- data/lib/rubygems/commands/query_command.rb +21 -328
- data/lib/rubygems/commands/rdoc_command.rb +33 -33
- data/lib/rubygems/commands/search_command.rb +9 -9
- data/lib/rubygems/commands/server_command.rb +15 -76
- data/lib/rubygems/commands/setup_command.rb +370 -186
- data/lib/rubygems/commands/signin_command.rb +34 -0
- data/lib/rubygems/commands/signout_command.rb +32 -0
- data/lib/rubygems/commands/sources_command.rb +57 -41
- data/lib/rubygems/commands/specification_command.rb +38 -28
- data/lib/rubygems/commands/stale_command.rb +6 -5
- data/lib/rubygems/commands/uninstall_command.rb +96 -62
- data/lib/rubygems/commands/unpack_command.rb +44 -53
- data/lib/rubygems/commands/update_command.rb +155 -99
- data/lib/rubygems/commands/which_command.rb +14 -17
- data/lib/rubygems/commands/yank_command.rb +28 -32
- data/lib/rubygems/compatibility.rb +13 -32
- data/lib/rubygems/config_file.rb +214 -119
- data/lib/rubygems/core_ext/kernel_gem.rb +10 -16
- data/lib/rubygems/core_ext/kernel_require.rb +92 -90
- data/lib/rubygems/core_ext/kernel_warn.rb +49 -0
- data/lib/rubygems/core_ext/tcpsocket_init.rb +54 -0
- data/lib/rubygems/defaults.rb +184 -54
- data/lib/rubygems/dependency.rb +75 -62
- data/lib/rubygems/dependency_installer.rb +74 -230
- data/lib/rubygems/dependency_list.rb +32 -33
- data/lib/rubygems/deprecate.rb +113 -17
- data/lib/rubygems/doctor.rb +31 -31
- data/lib/rubygems/errors.rb +51 -13
- data/lib/rubygems/exceptions.rb +65 -35
- data/lib/rubygems/ext/build_error.rb +3 -1
- data/lib/rubygems/ext/builder.rb +103 -77
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +27 -0
- data/lib/rubygems/ext/cargo_builder.rb +360 -0
- data/lib/rubygems/ext/cmake_builder.rb +6 -7
- data/lib/rubygems/ext/configure_builder.rb +6 -9
- data/lib/rubygems/ext/ext_conf_builder.rb +40 -61
- data/lib/rubygems/ext/rake_builder.rb +18 -21
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +19 -21
- 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 +78 -0
- data/lib/rubygems/gemcutter_utilities.rb +246 -43
- data/lib/rubygems/install_default_message.rb +3 -3
- data/lib/rubygems/install_message.rb +3 -3
- data/lib/rubygems/install_update_options.rb +104 -98
- data/lib/rubygems/installer.rb +407 -225
- data/lib/rubygems/installer_uninstaller_utils.rb +27 -0
- data/lib/rubygems/local_remote_options.rb +29 -32
- data/lib/rubygems/name_tuple.rb +18 -23
- data/lib/rubygems/net/http.rb +3 -0
- data/lib/rubygems/net-http/LICENSE.txt +22 -0
- data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
- data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
- data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
- data/lib/rubygems/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
- data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/optparse/.document +1 -0
- data/lib/rubygems/optparse/COPYING +56 -0
- data/lib/rubygems/optparse/lib/optionparser.rb +2 -0
- data/lib/rubygems/optparse/lib/optparse/ac.rb +54 -0
- data/lib/rubygems/optparse/lib/optparse/date.rb +18 -0
- data/lib/rubygems/optparse/lib/optparse/kwargs.rb +22 -0
- data/lib/rubygems/optparse/lib/optparse/shellwords.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/time.rb +11 -0
- data/lib/rubygems/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/optparse/lib/optparse/version.rb +71 -0
- data/lib/rubygems/optparse/lib/optparse.rb +2330 -0
- data/lib/rubygems/optparse.rb +3 -0
- data/lib/rubygems/package/digest_io.rb +5 -7
- data/lib/rubygems/package/file_source.rb +6 -8
- data/lib/rubygems/package/io_source.rb +6 -4
- data/lib/rubygems/package/old.rb +19 -28
- data/lib/rubygems/package/source.rb +1 -1
- data/lib/rubygems/package/tar_header.rb +114 -93
- data/lib/rubygems/package/tar_reader/entry.rb +116 -22
- data/lib/rubygems/package/tar_reader.rb +18 -40
- data/lib/rubygems/package/tar_writer.rb +42 -56
- data/lib/rubygems/package.rb +245 -145
- data/lib/rubygems/package_task.rb +8 -14
- data/lib/rubygems/path_support.rb +21 -16
- data/lib/rubygems/platform.rb +135 -74
- data/lib/rubygems/psych_tree.rb +3 -2
- data/lib/rubygems/query_utils.rb +349 -0
- data/lib/rubygems/rdoc.rb +4 -326
- data/lib/rubygems/remote_fetcher.rb +99 -181
- data/lib/rubygems/request/connection_pools.rb +31 -24
- data/lib/rubygems/request/http_pool.rb +6 -7
- data/lib/rubygems/request/https_pool.rb +2 -3
- data/lib/rubygems/request.rb +103 -53
- data/lib/rubygems/request_set/gem_dependency_api.rb +182 -190
- data/lib/rubygems/request_set/lockfile/parser.rb +42 -52
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +34 -24
- data/lib/rubygems/request_set/lockfile.rb +32 -35
- data/lib/rubygems/request_set.rb +115 -71
- data/lib/rubygems/requirement.rb +77 -68
- data/lib/rubygems/resolv/LICENSE.txt +22 -0
- data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
- data/lib/rubygems/resolver/activation_request.rb +34 -61
- data/lib/rubygems/resolver/api_set/gem_parser.rb +24 -0
- data/lib/rubygems/resolver/api_set.rb +40 -32
- data/lib/rubygems/resolver/api_specification.rb +37 -18
- data/lib/rubygems/resolver/best_set.rb +15 -17
- data/lib/rubygems/resolver/composed_set.rb +9 -11
- data/lib/rubygems/resolver/conflict.rb +19 -33
- data/lib/rubygems/resolver/current_set.rb +2 -4
- data/lib/rubygems/resolver/dependency_request.rb +8 -9
- data/lib/rubygems/resolver/git_set.rb +8 -10
- data/lib/rubygems/resolver/git_specification.rb +11 -13
- data/lib/rubygems/resolver/index_set.rb +13 -15
- data/lib/rubygems/resolver/index_specification.rb +42 -11
- data/lib/rubygems/resolver/installed_specification.rb +9 -11
- data/lib/rubygems/resolver/installer_set.rb +87 -45
- data/lib/rubygems/resolver/local_specification.rb +5 -7
- data/lib/rubygems/resolver/lock_set.rb +13 -15
- data/lib/rubygems/resolver/lock_specification.rb +13 -15
- data/lib/rubygems/resolver/molinillo/LICENSE +9 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +88 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +164 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +110 -146
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +83 -9
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +13 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +552 -172
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +12 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- data/lib/rubygems/resolver/molinillo.rb +2 -1
- data/lib/rubygems/resolver/requirement_list.rb +2 -2
- data/lib/rubygems/resolver/set.rb +3 -5
- data/lib/rubygems/resolver/source_set.rb +6 -7
- data/lib/rubygems/resolver/spec_specification.rb +16 -4
- data/lib/rubygems/resolver/specification.rb +25 -10
- data/lib/rubygems/resolver/stats.rb +1 -0
- data/lib/rubygems/resolver/vendor_set.rb +6 -8
- data/lib/rubygems/resolver/vendor_specification.rb +6 -8
- data/lib/rubygems/resolver.rb +121 -72
- data/lib/rubygems/s3_uri_signer.rb +177 -0
- data/lib/rubygems/safe_marshal/elements.rb +138 -0
- data/lib/rubygems/safe_marshal/reader.rb +306 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -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 +36 -0
- data/lib/rubygems/security/policies.rb +49 -51
- data/lib/rubygems/security/policy.rb +46 -53
- data/lib/rubygems/security/signer.rb +86 -29
- data/lib/rubygems/security/trust_dir.rb +22 -24
- data/lib/rubygems/security.rb +101 -82
- data/lib/rubygems/security_option.rb +43 -0
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +40 -42
- data/lib/rubygems/source/installed.rb +5 -9
- data/lib/rubygems/source/local.rb +30 -33
- data/lib/rubygems/source/lock.rb +10 -10
- data/lib/rubygems/source/specific_file.rb +7 -9
- data/lib/rubygems/source/vendor.rb +3 -7
- data/lib/rubygems/source.rb +78 -68
- data/lib/rubygems/source_list.rb +11 -15
- data/lib/rubygems/spec_fetcher.rb +71 -83
- data/lib/rubygems/specification.rb +833 -1115
- data/lib/rubygems/specification_policy.rb +538 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +55 -57
- data/lib/rubygems/text.rb +39 -27
- data/lib/rubygems/timeout/LICENSE.txt +22 -0
- data/lib/rubygems/timeout/lib/timeout.rb +199 -0
- data/lib/rubygems/timeout.rb +3 -0
- data/lib/rubygems/tsort/.document +1 -0
- data/lib/rubygems/tsort/LICENSE.txt +22 -0
- data/lib/rubygems/tsort/lib/tsort.rb +455 -0
- data/lib/rubygems/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +150 -87
- data/lib/rubygems/unknown_command_spell_checker.rb +21 -0
- data/lib/rubygems/update_suggestion.rb +56 -0
- data/lib/rubygems/uri.rb +126 -0
- data/lib/rubygems/uri_formatter.rb +4 -7
- data/lib/rubygems/user_interaction.rb +92 -146
- data/lib/rubygems/util/licenses.rb +712 -317
- data/lib/rubygems/util/list.rb +5 -2
- data/lib/rubygems/util.rb +58 -75
- data/lib/rubygems/validator.rb +26 -48
- data/lib/rubygems/version.rb +106 -56
- data/lib/rubygems/version_option.rb +22 -14
- data/lib/rubygems/yaml_serializer.rb +93 -0
- data/lib/rubygems.rb +427 -361
- data/rubygems-update.gemspec +38 -0
- data/setup.rb +13 -27
- metadata +500 -363
- data/.autotest +0 -71
- data/.document +0 -5
- data/.travis.yml +0 -46
- data/CONTRIBUTING.rdoc +0 -129
- data/CVE-2013-4287.txt +0 -35
- data/CVE-2013-4363.txt +0 -45
- data/CVE-2015-3900.txt +0 -40
- data/History.txt +0 -3105
- data/MAINTAINERS.md +0 -5
- data/POLICIES.rdoc +0 -61
- data/README.rdoc +0 -54
- data/Rakefile +0 -449
- data/UPGRADING.rdoc +0 -92
- data/appveyor.yml +0 -36
- data/bin/gem +0 -25
- data/bin/update_rubygems +0 -37
- data/lib/gauntlet_rubygems.rb +0 -51
- data/lib/rubygems/indexer.rb +0 -434
- data/lib/rubygems/installer_test_case.rb +0 -194
- data/lib/rubygems/mock_gem_ui.rb +0 -89
- data/lib/rubygems/package/tar_test_case.rb +0 -147
- data/lib/rubygems/psych_additions.rb +0 -10
- data/lib/rubygems/server.rb +0 -869
- data/lib/rubygems/source_local.rb +0 -6
- data/lib/rubygems/source_specific_file.rb +0 -5
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/rubygems/syck_hack.rb +0 -77
- data/lib/rubygems/test_case.rb +0 -1496
- data/lib/rubygems/test_utilities.rb +0 -384
- data/lib/ubygems.rb +0 -11
- data/test/rubygems/alternate_cert.pem +0 -18
- data/test/rubygems/alternate_cert_32.pem +0 -18
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -2
- data/test/rubygems/ca_cert.pem +0 -68
- data/test/rubygems/child_cert.pem +0 -18
- data/test/rubygems/child_cert_32.pem +0 -18
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -49
- 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-type.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -18
- data/test/rubygems/fake_certlib/openssl.rb +0 -8
- data/test/rubygems/fix_openssl_warnings.rb +0 -13
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -18
- data/test/rubygems/future_cert_32.pem +0 -18
- data/test/rubygems/good_rake.rb +0 -2
- data/test/rubygems/grandchild_cert.pem +0 -18
- data/test/rubygems/grandchild_cert_32.pem +0 -18
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -18
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -18
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -18
- data/test/rubygems/invalid_signer_cert_32.pem +0 -18
- data/test/rubygems/invalidchild_cert.pem +0 -18
- data/test/rubygems/invalidchild_cert_32.pem +0 -18
- data/test/rubygems/invalidchild_key.pem +0 -27
- 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/private_key.pem +0 -27
- data/test/rubygems/public_cert.pem +0 -18
- data/test/rubygems/public_cert_32.pem +0 -18
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -6
- data/test/rubygems/rubygems_plugin.rb +0 -22
- 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 -9
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/ssl_cert.pem +0 -19
- data/test/rubygems/ssl_key.pem +0 -15
- data/test/rubygems/test_bundled_ca.rb +0 -59
- data/test/rubygems/test_config.rb +0 -24
- data/test/rubygems/test_deprecate.rb +0 -77
- data/test/rubygems/test_gem.rb +0 -1718
- data/test/rubygems/test_gem_available_set.rb +0 -130
- data/test/rubygems/test_gem_command.rb +0 -248
- data/test/rubygems/test_gem_command_manager.rb +0 -264
- data/test/rubygems/test_gem_commands_build_command.rb +0 -121
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -671
- data/test/rubygems/test_gem_commands_check_command.rb +0 -69
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -197
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -240
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -230
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -154
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -127
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -51
- data/test/rubygems/test_gem_commands_help_command.rb +0 -75
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1007
- data/test/rubygems/test_gem_commands_list_command.rb +0 -34
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -69
- data/test/rubygems/test_gem_commands_mirror.rb +0 -20
- data/test/rubygems/test_gem_commands_open_command.rb +0 -70
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -33
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -205
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -491
- data/test/rubygems/test_gem_commands_push_command.rb +0 -330
- data/test/rubygems/test_gem_commands_query_command.rb +0 -657
- data/test/rubygems/test_gem_commands_search_command.rb +0 -18
- data/test/rubygems/test_gem_commands_server_command.rb +0 -60
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -136
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -249
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -251
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -283
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -209
- data/test/rubygems/test_gem_commands_update_command.rb +0 -514
- data/test/rubygems/test_gem_commands_which_command.rb +0 -87
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -100
- data/test/rubygems/test_gem_config_file.rb +0 -491
- data/test/rubygems/test_gem_dependency.rb +0 -362
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1235
- data/test/rubygems/test_gem_dependency_list.rb +0 -260
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -29
- data/test/rubygems/test_gem_doctor.rb +0 -169
- data/test/rubygems/test_gem_ext_builder.rb +0 -341
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -87
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -87
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -211
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -65
- data/test/rubygems/test_gem_gem_runner.rb +0 -69
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -235
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -62
- data/test/rubygems/test_gem_indexer.rb +0 -367
- data/test/rubygems/test_gem_install_update_options.rb +0 -197
- data/test/rubygems/test_gem_installer.rb +0 -1552
- data/test/rubygems/test_gem_local_remote_options.rb +0 -134
- data/test/rubygems/test_gem_name_tuple.rb +0 -45
- data/test/rubygems/test_gem_package.rb +0 -876
- data/test/rubygems/test_gem_package_old.rb +0 -90
- data/test/rubygems/test_gem_package_tar_header.rb +0 -147
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -90
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -142
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -264
- data/test/rubygems/test_gem_package_task.rb +0 -84
- data/test/rubygems/test_gem_path_support.rb +0 -121
- data/test/rubygems/test_gem_platform.rb +0 -308
- data/test/rubygems/test_gem_rdoc.rb +0 -270
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1051
- data/test/rubygems/test_gem_request.rb +0 -363
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -130
- data/test/rubygems/test_gem_request_set.rb +0 -595
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -831
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -470
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -549
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -306
- data/test/rubygems/test_gem_requirement.rb +0 -387
- data/test/rubygems/test_gem_resolver.rb +0 -715
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -74
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -209
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -145
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -138
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -46
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -88
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -85
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -190
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -90
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -90
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -50
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -258
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -46
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -64
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -100
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -21
- data/test/rubygems/test_gem_resolver_specification.rb +0 -65
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -84
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -84
- data/test/rubygems/test_gem_security.rb +0 -307
- data/test/rubygems/test_gem_security_policy.rb +0 -541
- data/test/rubygems/test_gem_security_signer.rb +0 -209
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -101
- data/test/rubygems/test_gem_server.rb +0 -409
- data/test/rubygems/test_gem_silent_ui.rb +0 -117
- data/test/rubygems/test_gem_source.rb +0 -242
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -20
- data/test/rubygems/test_gem_source_git.rb +0 -309
- data/test/rubygems/test_gem_source_installed.rb +0 -37
- data/test/rubygems/test_gem_source_list.rb +0 -118
- data/test/rubygems/test_gem_source_local.rb +0 -107
- data/test/rubygems/test_gem_source_lock.rb +0 -115
- data/test/rubygems/test_gem_source_specific_file.rb +0 -76
- data/test/rubygems/test_gem_source_vendor.rb +0 -32
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -311
- data/test/rubygems/test_gem_specification.rb +0 -3519
- data/test/rubygems/test_gem_stream_ui.rb +0 -239
- data/test/rubygems/test_gem_stub_specification.rb +0 -217
- data/test/rubygems/test_gem_text.rb +0 -77
- data/test/rubygems/test_gem_uninstaller.rb +0 -485
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -33
- data/test/rubygems/test_gem_uri_formatter.rb +0 -29
- data/test/rubygems/test_gem_util.rb +0 -40
- data/test/rubygems/test_gem_validator.rb +0 -46
- data/test/rubygems/test_gem_version.rb +0 -222
- data/test/rubygems/test_gem_version_option.rb +0 -152
- data/test/rubygems/test_kernel.rb +0 -86
- data/test/rubygems/test_require.rb +0 -322
- data/test/rubygems/wrong_key_cert.pem +0 -18
- data/test/rubygems/wrong_key_cert_32.pem +0 -18
- data/util/CL2notes +0 -56
- data/util/create_certs.rb +0 -157
- data/util/create_encrypted_key.rb +0 -17
- data/util/generate_spdx_license_list.rb +0 -51
- data/util/update_bundled_ca_certificates.rb +0 -118
data/lib/rubygems/security.rb
CHANGED
@@ -1,19 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#--
|
3
4
|
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
4
5
|
# All rights reserved.
|
5
6
|
# See LICENSE.txt for permissions.
|
6
7
|
#++
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
begin
|
12
|
-
require 'openssl'
|
13
|
-
rescue LoadError => e
|
14
|
-
raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
|
15
|
-
e.message =~ / -- openssl$/
|
16
|
-
end
|
9
|
+
require_relative "exceptions"
|
10
|
+
require_relative "openssl"
|
17
11
|
|
18
12
|
##
|
19
13
|
# = Signing gems
|
@@ -62,11 +56,11 @@ end
|
|
62
56
|
#
|
63
57
|
# $ tar tf your-gem-1.0.gem
|
64
58
|
# metadata.gz
|
65
|
-
# metadata.gz.sum
|
66
59
|
# metadata.gz.sig # metadata signature
|
67
60
|
# data.tar.gz
|
68
|
-
# data.tar.gz.sum
|
69
61
|
# data.tar.gz.sig # data signature
|
62
|
+
# checksums.yaml.gz
|
63
|
+
# checksums.yaml.gz.sig # checksums signature
|
70
64
|
#
|
71
65
|
# === Manually signing gems
|
72
66
|
#
|
@@ -159,8 +153,11 @@ end
|
|
159
153
|
# certificate for EMAIL_ADDR
|
160
154
|
# -C, --certificate CERT Signing certificate for --sign
|
161
155
|
# -K, --private-key KEY Key for --sign or --build
|
156
|
+
# -A, --key-algorithm ALGORITHM Select key algorithm for --build from RSA, DSA, or EC. Defaults to RSA.
|
162
157
|
# -s, --sign CERT Signs CERT with the key from -K
|
163
158
|
# and the certificate from -C
|
159
|
+
# -d, --days NUMBER_OF_DAYS Days before the certificate expires
|
160
|
+
# -R, --re-sign Re-signs the certificate from -C with the key from -K
|
164
161
|
#
|
165
162
|
# We've already covered the <code>--build</code> option, and the
|
166
163
|
# <code>--add</code>, <code>--list</code>, and <code>--remove</code> commands
|
@@ -265,7 +262,7 @@ end
|
|
265
262
|
# 2. Grab the public key from the gemspec
|
266
263
|
#
|
267
264
|
# gem spec some_signed_gem-1.0.gem cert_chain | \
|
268
|
-
# ruby -
|
265
|
+
# ruby -rpsych -e 'puts Psych.load($stdin)' > public_key.crt
|
269
266
|
#
|
270
267
|
# 3. Generate a SHA1 hash of the data.tar.gz
|
271
268
|
#
|
@@ -322,7 +319,6 @@ end
|
|
322
319
|
# * Honor extension restrictions
|
323
320
|
# * Might be better to store the certificate chain as a PKCS#7 or PKCS#12
|
324
321
|
# file, instead of an array embedded in the metadata.
|
325
|
-
# * Flexible signature and key algorithms, not hard-coded to RSA and SHA1.
|
326
322
|
#
|
327
323
|
# == Original author
|
328
324
|
#
|
@@ -330,51 +326,46 @@ end
|
|
330
326
|
# http://pablotron.org/
|
331
327
|
|
332
328
|
module Gem::Security
|
333
|
-
|
334
329
|
##
|
335
330
|
# Gem::Security default exception type
|
336
331
|
|
337
332
|
class Exception < Gem::Exception; end
|
338
333
|
|
339
334
|
##
|
340
|
-
#
|
335
|
+
# Used internally to select the signing digest from all computed digests
|
341
336
|
|
342
|
-
|
343
|
-
if defined?(OpenSSL::Digest::SHA1) then
|
344
|
-
OpenSSL::Digest::SHA1
|
345
|
-
end
|
337
|
+
DIGEST_NAME = "SHA256" # :nodoc:
|
346
338
|
|
347
339
|
##
|
348
|
-
#
|
340
|
+
# Length of keys created by RSA and DSA keys
|
349
341
|
|
350
|
-
|
351
|
-
if DIGEST_ALGORITHM then
|
352
|
-
DIGEST_ALGORITHM.new.name
|
353
|
-
end
|
342
|
+
RSA_DSA_KEY_LENGTH = 3072
|
354
343
|
|
355
344
|
##
|
356
|
-
#
|
345
|
+
# Default algorithm to use when building a key pair
|
357
346
|
|
358
|
-
|
359
|
-
if defined?(OpenSSL::PKey::RSA) then
|
360
|
-
OpenSSL::PKey::RSA
|
361
|
-
end
|
347
|
+
DEFAULT_KEY_ALGORITHM = "RSA"
|
362
348
|
|
363
349
|
##
|
364
|
-
#
|
350
|
+
# Named curve used for Elliptic Curve
|
365
351
|
|
366
|
-
|
352
|
+
EC_NAME = "secp384r1"
|
367
353
|
|
368
354
|
##
|
369
355
|
# Cipher used to encrypt the key pair used to sign gems.
|
370
356
|
# Must be in the list returned by OpenSSL::Cipher.ciphers
|
371
357
|
|
372
|
-
KEY_CIPHER = OpenSSL::Cipher.new(
|
358
|
+
KEY_CIPHER = OpenSSL::Cipher.new("AES-256-CBC") if defined?(OpenSSL::Cipher)
|
359
|
+
|
360
|
+
##
|
361
|
+
# One day in seconds
|
362
|
+
|
363
|
+
ONE_DAY = 86_400
|
373
364
|
|
374
365
|
##
|
375
366
|
# One year in seconds
|
376
367
|
|
377
|
-
ONE_YEAR =
|
368
|
+
ONE_YEAR = ONE_DAY * 365
|
378
369
|
|
379
370
|
##
|
380
371
|
# The default set of extensions are:
|
@@ -385,13 +376,13 @@ module Gem::Security
|
|
385
376
|
# * The certificate contains a subject key identifier
|
386
377
|
|
387
378
|
EXTENSIONS = {
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
}
|
379
|
+
"basicConstraints" => "CA:FALSE",
|
380
|
+
"keyUsage" =>
|
381
|
+
"keyEncipherment,dataEncipherment,digitalSignature",
|
382
|
+
"subjectKeyIdentifier" => "hash",
|
383
|
+
}.freeze
|
393
384
|
|
394
|
-
def self.alt_name_or_x509_entry
|
385
|
+
def self.alt_name_or_x509_entry(certificate, x509_entry)
|
395
386
|
alt_name = certificate.extensions.find do |extension|
|
396
387
|
extension.oid == "#{x509_entry}AltName"
|
397
388
|
end
|
@@ -407,11 +398,10 @@ module Gem::Security
|
|
407
398
|
#
|
408
399
|
# The +extensions+ restrict the key to the indicated uses.
|
409
400
|
|
410
|
-
def self.create_cert
|
411
|
-
serial = 1
|
401
|
+
def self.create_cert(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
|
412
402
|
cert = OpenSSL::X509::Certificate.new
|
413
403
|
|
414
|
-
cert.public_key = key
|
404
|
+
cert.public_key = get_public_key(key)
|
415
405
|
cert.version = 2
|
416
406
|
cert.serial = serial
|
417
407
|
|
@@ -429,12 +419,25 @@ module Gem::Security
|
|
429
419
|
cert
|
430
420
|
end
|
431
421
|
|
422
|
+
##
|
423
|
+
# Gets the right public key from a PKey instance
|
424
|
+
|
425
|
+
def self.get_public_key(key)
|
426
|
+
# Ruby 3.0 (Ruby/OpenSSL 2.2) or later
|
427
|
+
return OpenSSL::PKey.read(key.public_to_der) if key.respond_to?(:public_to_der)
|
428
|
+
return key.public_key unless key.is_a?(OpenSSL::PKey::EC)
|
429
|
+
|
430
|
+
ec_key = OpenSSL::PKey::EC.new(key.group.curve_name)
|
431
|
+
ec_key.public_key = key.public_key
|
432
|
+
ec_key
|
433
|
+
end
|
434
|
+
|
432
435
|
##
|
433
436
|
# Creates a self-signed certificate with an issuer and subject from +email+,
|
434
437
|
# a subject alternative name of +email+ and the given +extensions+ for the
|
435
438
|
# +key+.
|
436
439
|
|
437
|
-
def self.create_cert_email
|
440
|
+
def self.create_cert_email(email, key, age = ONE_YEAR, extensions = EXTENSIONS)
|
438
441
|
subject = email_to_name email
|
439
442
|
|
440
443
|
extensions = extensions.merge "subjectAltName" => "email:#{email}"
|
@@ -446,34 +449,54 @@ module Gem::Security
|
|
446
449
|
# Creates a self-signed certificate with an issuer and subject of +subject+
|
447
450
|
# and the given +extensions+ for the +key+.
|
448
451
|
|
449
|
-
def self.create_cert_self_signed
|
450
|
-
extensions = EXTENSIONS, serial = 1
|
452
|
+
def self.create_cert_self_signed(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
|
451
453
|
certificate = create_cert subject, key, age, extensions
|
452
454
|
|
453
455
|
sign certificate, key, certificate, age, extensions, serial
|
454
456
|
end
|
455
457
|
|
456
458
|
##
|
457
|
-
# Creates a new
|
458
|
-
#
|
459
|
+
# Creates a new digest instance using the specified +algorithm+. The default
|
460
|
+
# is SHA256.
|
459
461
|
|
460
|
-
def self.
|
461
|
-
|
462
|
+
def self.create_digest(algorithm = DIGEST_NAME)
|
463
|
+
OpenSSL::Digest.new(algorithm)
|
462
464
|
end
|
463
465
|
|
464
466
|
##
|
465
|
-
#
|
467
|
+
# Creates a new key pair of the specified +algorithm+. RSA, DSA, and EC
|
468
|
+
# are supported.
|
469
|
+
|
470
|
+
def self.create_key(algorithm)
|
471
|
+
if defined?(OpenSSL::PKey)
|
472
|
+
case algorithm.downcase
|
473
|
+
when "dsa"
|
474
|
+
OpenSSL::PKey::DSA.new(RSA_DSA_KEY_LENGTH)
|
475
|
+
when "rsa"
|
476
|
+
OpenSSL::PKey::RSA.new(RSA_DSA_KEY_LENGTH)
|
477
|
+
when "ec"
|
478
|
+
OpenSSL::PKey::EC.generate(EC_NAME)
|
479
|
+
else
|
480
|
+
raise Gem::Security::Exception,
|
481
|
+
"#{algorithm} algorithm not found. RSA, DSA, and EC algorithms are supported."
|
482
|
+
end
|
483
|
+
end
|
484
|
+
end
|
466
485
|
|
467
|
-
|
468
|
-
|
486
|
+
##
|
487
|
+
# Turns +email_address+ into an OpenSSL::X509::Name
|
469
488
|
|
470
|
-
|
489
|
+
def self.email_to_name(email_address)
|
490
|
+
email_address = email_address.gsub(/[^\w@.-]+/i, "_")
|
471
491
|
|
472
|
-
dcs =
|
492
|
+
cn, dcs = email_address.split "@"
|
473
493
|
|
474
|
-
|
494
|
+
dcs = dcs.split "."
|
475
495
|
|
476
|
-
OpenSSL::X509::Name.
|
496
|
+
OpenSSL::X509::Name.new([
|
497
|
+
["CN", cn],
|
498
|
+
*dcs.map {|dc| ["DC", dc] },
|
499
|
+
])
|
477
500
|
end
|
478
501
|
|
479
502
|
##
|
@@ -482,20 +505,19 @@ module Gem::Security
|
|
482
505
|
#--
|
483
506
|
# TODO increment serial
|
484
507
|
|
485
|
-
def self.re_sign
|
486
|
-
extensions = EXTENSIONS
|
508
|
+
def self.re_sign(expired_certificate, private_key, age = ONE_YEAR, extensions = EXTENSIONS)
|
487
509
|
raise Gem::Security::Exception,
|
488
510
|
"incorrect signing key for re-signing " +
|
489
|
-
|
490
|
-
expired_certificate.
|
511
|
+
expired_certificate.subject.to_s unless
|
512
|
+
expired_certificate.check_private_key(private_key)
|
491
513
|
|
492
514
|
unless expired_certificate.subject.to_s ==
|
493
|
-
expired_certificate.issuer.to_s
|
515
|
+
expired_certificate.issuer.to_s
|
494
516
|
subject = alt_name_or_x509_entry expired_certificate, :subject
|
495
517
|
issuer = alt_name_or_x509_entry expired_certificate, :issuer
|
496
518
|
|
497
519
|
raise Gem::Security::Exception,
|
498
|
-
"#{subject} is not self-signed, contact #{issuer} "
|
520
|
+
"#{subject} is not self-signed, contact #{issuer} " \
|
499
521
|
"to obtain a valid certificate"
|
500
522
|
end
|
501
523
|
|
@@ -514,34 +536,33 @@ module Gem::Security
|
|
514
536
|
|
515
537
|
##
|
516
538
|
# Sign the public key from +certificate+ with the +signing_key+ and
|
517
|
-
# +signing_cert+, using the Gem::Security::
|
539
|
+
# +signing_cert+, using the Gem::Security::DIGEST_NAME. Uses the
|
518
540
|
# default certificate validity range and extensions.
|
519
541
|
#
|
520
542
|
# Returns the newly signed certificate.
|
521
543
|
|
522
|
-
def self.sign
|
523
|
-
age = ONE_YEAR, extensions = EXTENSIONS, serial = 1
|
544
|
+
def self.sign(certificate, signing_key, signing_cert, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
|
524
545
|
signee_subject = certificate.subject
|
525
546
|
signee_key = certificate.public_key
|
526
547
|
|
527
548
|
alt_name = certificate.extensions.find do |extension|
|
528
|
-
extension.oid ==
|
549
|
+
extension.oid == "subjectAltName"
|
529
550
|
end
|
530
551
|
|
531
|
-
extensions = extensions.merge
|
552
|
+
extensions = extensions.merge "subjectAltName" => alt_name.value if
|
532
553
|
alt_name
|
533
554
|
|
534
555
|
issuer_alt_name = signing_cert.extensions.find do |extension|
|
535
|
-
extension.oid ==
|
556
|
+
extension.oid == "subjectAltName"
|
536
557
|
end
|
537
558
|
|
538
|
-
extensions = extensions.merge
|
559
|
+
extensions = extensions.merge "issuerAltName" => issuer_alt_name.value if
|
539
560
|
issuer_alt_name
|
540
561
|
|
541
562
|
signed = create_cert signee_subject, signee_key, age, extensions, serial
|
542
563
|
signed.issuer = signing_cert.subject
|
543
564
|
|
544
|
-
signed.sign signing_key, Gem::Security::
|
565
|
+
signed.sign signing_key, Gem::Security::DIGEST_NAME
|
545
566
|
end
|
546
567
|
|
547
568
|
##
|
@@ -551,7 +572,7 @@ module Gem::Security
|
|
551
572
|
def self.trust_dir
|
552
573
|
return @trust_dir if @trust_dir
|
553
574
|
|
554
|
-
dir = File.join Gem.user_home,
|
575
|
+
dir = File.join Gem.user_home, ".gem", "trust"
|
555
576
|
|
556
577
|
@trust_dir ||= Gem::Security::TrustDir.new dir
|
557
578
|
end
|
@@ -559,7 +580,7 @@ module Gem::Security
|
|
559
580
|
##
|
560
581
|
# Enumerates the trusted certificates via Gem::Security::TrustDir.
|
561
582
|
|
562
|
-
def self.trusted_certificates
|
583
|
+
def self.trusted_certificates(&block)
|
563
584
|
trust_dir.each_certificate(&block)
|
564
585
|
end
|
565
586
|
|
@@ -568,11 +589,11 @@ module Gem::Security
|
|
568
589
|
# +permissions+. If passed +cipher+ and +passphrase+ those arguments will be
|
569
590
|
# passed to +to_pem+.
|
570
591
|
|
571
|
-
def self.write
|
592
|
+
def self.write(pemmable, path, permissions = 0o600, passphrase = nil, cipher = KEY_CIPHER)
|
572
593
|
path = File.expand_path path
|
573
594
|
|
574
|
-
open path,
|
575
|
-
if passphrase
|
595
|
+
File.open path, "wb", permissions do |io|
|
596
|
+
if passphrase && cipher
|
576
597
|
io.write pemmable.to_pem cipher, passphrase
|
577
598
|
else
|
578
599
|
io.write pemmable.to_pem
|
@@ -583,14 +604,12 @@ module Gem::Security
|
|
583
604
|
end
|
584
605
|
|
585
606
|
reset
|
586
|
-
|
587
607
|
end
|
588
608
|
|
589
|
-
if
|
590
|
-
|
591
|
-
|
592
|
-
|
609
|
+
if Gem::HAVE_OPENSSL
|
610
|
+
require_relative "security/policy"
|
611
|
+
require_relative "security/policies"
|
612
|
+
require_relative "security/trust_dir"
|
593
613
|
end
|
594
614
|
|
595
|
-
|
596
|
-
|
615
|
+
require_relative "security/signer"
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#--
|
4
|
+
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
5
|
+
# All rights reserved.
|
6
|
+
# See LICENSE.txt for permissions.
|
7
|
+
#++
|
8
|
+
|
9
|
+
require_relative "../rubygems"
|
10
|
+
|
11
|
+
# forward-declare
|
12
|
+
|
13
|
+
module Gem::Security # :nodoc:
|
14
|
+
class Policy # :nodoc:
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Mixin methods for security option for Gem::Commands
|
20
|
+
|
21
|
+
module Gem::SecurityOption
|
22
|
+
def add_security_option
|
23
|
+
Gem::OptionParser.accept Gem::Security::Policy do |value|
|
24
|
+
require_relative "security"
|
25
|
+
|
26
|
+
raise Gem::OptionParser::InvalidArgument, "OpenSSL not installed" unless
|
27
|
+
defined?(Gem::Security::HighSecurity)
|
28
|
+
|
29
|
+
policy = Gem::Security::Policies[value]
|
30
|
+
unless policy
|
31
|
+
valid = Gem::Security::Policies.keys.sort
|
32
|
+
raise Gem::OptionParser::InvalidArgument, "#{value} (#{valid.join ", "} are valid)"
|
33
|
+
end
|
34
|
+
policy
|
35
|
+
end
|
36
|
+
|
37
|
+
add_option(:"Install/Update", "-P", "--trust-policy POLICY",
|
38
|
+
Gem::Security::Policy,
|
39
|
+
"Specify gem trust policy") do |value, options|
|
40
|
+
options[:security_policy] = value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/rubygems/source/git.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'digest'
|
3
|
-
require 'rubygems/util'
|
4
2
|
|
5
3
|
##
|
6
4
|
# A git gem for use in a gem dependencies file.
|
@@ -13,7 +11,6 @@ require 'rubygems/util'
|
|
13
11
|
# source.specs
|
14
12
|
|
15
13
|
class Gem::Source::Git < Gem::Source
|
16
|
-
|
17
14
|
##
|
18
15
|
# The name of the gem created by this git gem.
|
19
16
|
|
@@ -51,20 +48,20 @@ class Gem::Source::Git < Gem::Source
|
|
51
48
|
# repository may contain multiple gems. If +submodules+ is true, submodules
|
52
49
|
# will be checked out when the gem is installed.
|
53
50
|
|
54
|
-
def initialize
|
55
|
-
|
56
|
-
|
51
|
+
def initialize(name, repository, reference, submodules = false)
|
52
|
+
require_relative "../uri"
|
53
|
+
@uri = Gem::Uri.parse(repository)
|
57
54
|
@name = name
|
58
55
|
@repository = repository
|
59
|
-
@reference = reference
|
56
|
+
@reference = reference || "HEAD"
|
60
57
|
@need_submodules = submodules
|
61
58
|
|
62
59
|
@remote = true
|
63
60
|
@root_dir = Gem.dir
|
64
|
-
@git = ENV[
|
61
|
+
@git = ENV["git"] || "git"
|
65
62
|
end
|
66
63
|
|
67
|
-
def <=>
|
64
|
+
def <=>(other)
|
68
65
|
case other
|
69
66
|
when Gem::Source::Git then
|
70
67
|
0
|
@@ -73,16 +70,14 @@ class Gem::Source::Git < Gem::Source
|
|
73
70
|
-1
|
74
71
|
when Gem::Source then
|
75
72
|
1
|
76
|
-
else
|
77
|
-
nil
|
78
73
|
end
|
79
74
|
end
|
80
75
|
|
81
|
-
def ==
|
82
|
-
super
|
83
|
-
@name == other.name
|
84
|
-
@repository == other.repository
|
85
|
-
@reference == other.reference
|
76
|
+
def ==(other) # :nodoc:
|
77
|
+
super &&
|
78
|
+
@name == other.name &&
|
79
|
+
@repository == other.repository &&
|
80
|
+
@reference == other.reference &&
|
86
81
|
@need_submodules == other.need_submodules
|
87
82
|
end
|
88
83
|
|
@@ -94,19 +89,22 @@ class Gem::Source::Git < Gem::Source
|
|
94
89
|
|
95
90
|
return false unless File.exist? repo_cache_dir
|
96
91
|
|
97
|
-
unless File.exist? install_dir
|
98
|
-
system @git,
|
92
|
+
unless File.exist? install_dir
|
93
|
+
system @git, "clone", "--quiet", "--no-checkout",
|
99
94
|
repo_cache_dir, install_dir
|
100
95
|
end
|
101
96
|
|
102
97
|
Dir.chdir install_dir do
|
103
|
-
system @git,
|
98
|
+
system @git, "fetch", "--quiet", "--force", "--tags", install_dir
|
99
|
+
|
100
|
+
success = system @git, "reset", "--quiet", "--hard", rev_parse
|
104
101
|
|
105
|
-
|
102
|
+
if @need_submodules
|
103
|
+
require "open3"
|
104
|
+
_, status = Open3.capture2e(@git, "submodule", "update", "--quiet", "--init", "--recursive")
|
106
105
|
|
107
|
-
|
108
|
-
|
109
|
-
'--quiet', '--init', '--recursive' if @need_submodules
|
106
|
+
success &&= status.success?
|
107
|
+
end
|
110
108
|
|
111
109
|
success
|
112
110
|
end
|
@@ -118,13 +116,13 @@ class Gem::Source::Git < Gem::Source
|
|
118
116
|
def cache # :nodoc:
|
119
117
|
return unless @remote
|
120
118
|
|
121
|
-
if File.exist? repo_cache_dir
|
119
|
+
if File.exist? repo_cache_dir
|
122
120
|
Dir.chdir repo_cache_dir do
|
123
|
-
system @git,
|
124
|
-
@repository,
|
121
|
+
system @git, "fetch", "--quiet", "--force", "--tags",
|
122
|
+
@repository, "refs/heads/*:refs/heads/*"
|
125
123
|
end
|
126
124
|
else
|
127
|
-
system @git,
|
125
|
+
system @git, "clone", "--quiet", "--bare", "--no-hardlinks",
|
128
126
|
@repository, repo_cache_dir
|
129
127
|
end
|
130
128
|
end
|
@@ -133,7 +131,7 @@ class Gem::Source::Git < Gem::Source
|
|
133
131
|
# Directory where git gems get unpacked and so-forth.
|
134
132
|
|
135
133
|
def base_dir # :nodoc:
|
136
|
-
File.join @root_dir,
|
134
|
+
File.join @root_dir, "bundler"
|
137
135
|
end
|
138
136
|
|
139
137
|
##
|
@@ -146,7 +144,7 @@ class Gem::Source::Git < Gem::Source
|
|
146
144
|
##
|
147
145
|
# Nothing to download for git gems
|
148
146
|
|
149
|
-
def download
|
147
|
+
def download(full_spec, path) # :nodoc:
|
150
148
|
end
|
151
149
|
|
152
150
|
##
|
@@ -155,11 +153,11 @@ class Gem::Source::Git < Gem::Source
|
|
155
153
|
def install_dir # :nodoc:
|
156
154
|
return unless File.exist? repo_cache_dir
|
157
155
|
|
158
|
-
File.join base_dir,
|
156
|
+
File.join base_dir, "gems", "#{@name}-#{dir_shortref}"
|
159
157
|
end
|
160
158
|
|
161
|
-
def pretty_print
|
162
|
-
q.group 2,
|
159
|
+
def pretty_print(q) # :nodoc:
|
160
|
+
q.group 2, "[Git: ", "]" do
|
163
161
|
q.breakable
|
164
162
|
q.text @repository
|
165
163
|
|
@@ -172,7 +170,7 @@ class Gem::Source::Git < Gem::Source
|
|
172
170
|
# The directory where the git gem's repository will be cached.
|
173
171
|
|
174
172
|
def repo_cache_dir # :nodoc:
|
175
|
-
File.join @root_dir,
|
173
|
+
File.join @root_dir, "cache", "bundler", "git", "#{@name}-#{uri_hash}"
|
176
174
|
end
|
177
175
|
|
178
176
|
##
|
@@ -182,7 +180,7 @@ class Gem::Source::Git < Gem::Source
|
|
182
180
|
hash = nil
|
183
181
|
|
184
182
|
Dir.chdir repo_cache_dir do
|
185
|
-
hash = Gem::Util.popen(@git,
|
183
|
+
hash = Gem::Util.popen(@git, "rev-parse", @reference).strip
|
186
184
|
end
|
187
185
|
|
188
186
|
raise Gem::Exception,
|
@@ -201,17 +199,17 @@ class Gem::Source::Git < Gem::Source
|
|
201
199
|
return [] unless install_dir
|
202
200
|
|
203
201
|
Dir.chdir install_dir do
|
204
|
-
Dir[
|
202
|
+
Dir["{,*,*/*}.gemspec"].map do |spec_file|
|
205
203
|
directory = File.dirname spec_file
|
206
204
|
file = File.basename spec_file
|
207
205
|
|
208
206
|
Dir.chdir directory do
|
209
207
|
spec = Gem::Specification.load file
|
210
|
-
if spec
|
208
|
+
if spec
|
211
209
|
spec.base_dir = base_dir
|
212
210
|
|
213
211
|
spec.extension_dir =
|
214
|
-
File.join base_dir,
|
212
|
+
File.join base_dir, "extensions", Gem::Platform.local.to_s,
|
215
213
|
Gem.extension_api_version, "#{name}-#{dir_shortref}"
|
216
214
|
|
217
215
|
spec.full_gem_path = File.dirname spec.loaded_from if spec
|
@@ -226,16 +224,16 @@ class Gem::Source::Git < Gem::Source
|
|
226
224
|
# A hash for the git gem based on the git repository URI.
|
227
225
|
|
228
226
|
def uri_hash # :nodoc:
|
227
|
+
require_relative "../openssl"
|
228
|
+
|
229
229
|
normalized =
|
230
|
-
if @repository
|
231
|
-
uri = URI(@repository).normalize.to_s.sub %r
|
230
|
+
if @repository.match?(%r{^\w+://(\w+@)?})
|
231
|
+
uri = URI(@repository).normalize.to_s.sub %r{/$},""
|
232
232
|
uri.sub(/\A(\w+)/) { $1.downcase }
|
233
233
|
else
|
234
234
|
@repository
|
235
235
|
end
|
236
236
|
|
237
|
-
Digest::SHA1.hexdigest normalized
|
237
|
+
OpenSSL::Digest::SHA1.hexdigest normalized
|
238
238
|
end
|
239
|
-
|
240
239
|
end
|
241
|
-
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
##
|
3
4
|
# Represents an installed gem. This is used for dependency resolution.
|
4
5
|
|
5
6
|
class Gem::Source::Installed < Gem::Source
|
6
|
-
|
7
7
|
def initialize # :nodoc:
|
8
8
|
@uri = nil
|
9
9
|
end
|
@@ -11,7 +11,7 @@ class Gem::Source::Installed < Gem::Source
|
|
11
11
|
##
|
12
12
|
# Installed sources sort before all other sources
|
13
13
|
|
14
|
-
def <=>
|
14
|
+
def <=>(other)
|
15
15
|
case other
|
16
16
|
when Gem::Source::Git,
|
17
17
|
Gem::Source::Lock,
|
@@ -21,21 +21,17 @@ class Gem::Source::Installed < Gem::Source
|
|
21
21
|
0
|
22
22
|
when Gem::Source then
|
23
23
|
1
|
24
|
-
else
|
25
|
-
nil
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
29
27
|
##
|
30
28
|
# We don't need to download an installed gem
|
31
29
|
|
32
|
-
def download
|
30
|
+
def download(spec, path)
|
33
31
|
nil
|
34
32
|
end
|
35
33
|
|
36
|
-
def pretty_print
|
37
|
-
q.text
|
34
|
+
def pretty_print(q) # :nodoc:
|
35
|
+
q.text "[Installed]"
|
38
36
|
end
|
39
|
-
|
40
37
|
end
|
41
|
-
|