rubygems-update 3.0.6 → 3.2.14
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/{History.txt → CHANGELOG.md} +1100 -436
- data/CODE_OF_CONDUCT.md +55 -19
- data/CONTRIBUTING.md +37 -10
- data/MAINTAINERS.txt +1 -6
- data/Manifest.txt +104 -64
- data/POLICIES.md +6 -12
- data/README.md +6 -6
- data/Rakefile +121 -111
- data/bin/gem +0 -6
- data/bin/update_rubygems +2 -2
- data/bundler/CHANGELOG.md +1788 -1251
- data/bundler/LICENSE.md +18 -19
- data/bundler/README.md +9 -10
- data/bundler/UPGRADING.md +215 -0
- data/bundler/bundler.gemspec +9 -26
- data/bundler/exe/bundle +22 -3
- data/bundler/lib/bundler.rb +233 -94
- data/bundler/lib/bundler/build_metadata.rb +5 -13
- data/bundler/lib/bundler/capistrano.rb +4 -4
- data/bundler/lib/bundler/cli.rb +221 -148
- data/bundler/lib/bundler/cli/add.rb +28 -16
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/cache.rb +24 -17
- data/bundler/lib/bundler/cli/clean.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +25 -12
- data/bundler/lib/bundler/cli/config.rb +161 -86
- data/bundler/lib/bundler/cli/console.rb +1 -1
- data/bundler/lib/bundler/cli/doctor.rb +5 -5
- data/bundler/lib/bundler/cli/exec.rb +8 -20
- data/bundler/lib/bundler/cli/fund.rb +36 -0
- data/bundler/lib/bundler/cli/gem.rb +125 -32
- data/bundler/lib/bundler/cli/info.rb +29 -6
- data/bundler/lib/bundler/cli/init.rb +2 -2
- data/bundler/lib/bundler/cli/inject.rb +1 -1
- data/bundler/lib/bundler/cli/install.rb +27 -23
- data/bundler/lib/bundler/cli/issue.rb +5 -5
- data/bundler/lib/bundler/cli/list.rb +12 -10
- data/bundler/lib/bundler/cli/open.rb +10 -6
- data/bundler/lib/bundler/cli/outdated.rb +134 -109
- data/bundler/lib/bundler/cli/plugin.rb +19 -2
- data/bundler/lib/bundler/cli/pristine.rb +6 -1
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +34 -12
- data/bundler/lib/bundler/compact_index_client.rb +26 -10
- data/bundler/lib/bundler/compact_index_client/cache.rb +6 -14
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +8 -20
- data/bundler/lib/bundler/current_ruby.rb +9 -7
- data/bundler/lib/bundler/definition.rb +133 -132
- data/bundler/lib/bundler/dep_proxy.rb +16 -9
- data/bundler/lib/bundler/dependency.rb +19 -14
- data/bundler/lib/bundler/deployment.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +54 -71
- data/bundler/lib/bundler/endpoint_specification.rb +1 -1
- data/bundler/lib/bundler/env.rb +9 -14
- data/bundler/lib/bundler/environment_preserver.rb +26 -3
- data/bundler/lib/bundler/errors.rb +1 -0
- data/bundler/lib/bundler/feature_flag.rb +19 -34
- data/bundler/lib/bundler/fetcher.rb +19 -16
- data/bundler/lib/bundler/fetcher/base.rb +1 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +27 -13
- data/bundler/lib/bundler/fetcher/dependency.rb +1 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +6 -3
- data/bundler/lib/bundler/fetcher/index.rb +8 -7
- data/bundler/lib/bundler/friendly_errors.rb +27 -19
- data/bundler/lib/bundler/gem_helper.rb +68 -37
- data/bundler/lib/bundler/gem_helpers.rb +38 -29
- data/bundler/lib/bundler/gem_tasks.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +5 -5
- data/bundler/lib/bundler/graph.rb +3 -3
- data/bundler/lib/bundler/index.rb +12 -7
- data/bundler/lib/bundler/injector.rb +32 -12
- data/bundler/lib/bundler/inline.rb +41 -30
- data/bundler/lib/bundler/installer.rb +41 -60
- data/bundler/lib/bundler/installer/gem_installer.rb +8 -4
- data/bundler/lib/bundler/installer/parallel_installer.rb +20 -26
- data/bundler/lib/bundler/installer/standalone.rb +18 -4
- data/bundler/lib/bundler/lazy_specification.rb +41 -27
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +16 -33
- data/bundler/lib/bundler/{ssl_certs → man}/.document +0 -0
- data/bundler/lib/bundler/man/bundle-add.1 +66 -0
- data/bundler/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +7 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +42 -0
- data/bundler/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +3 -5
- data/bundler/lib/bundler/man/bundle-cache.1 +55 -0
- data/bundler/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +15 -15
- data/bundler/lib/bundler/man/bundle-check.1 +31 -0
- data/bundler/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-clean.1 +24 -0
- data/bundler/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-config.1 +488 -0
- data/bundler/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +59 -67
- data/bundler/lib/bundler/man/bundle-doctor.1 +44 -0
- data/bundler/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +165 -0
- data/bundler/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +102 -0
- data/bundler/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/bundler/lib/bundler/man/bundle-info.1 +20 -0
- data/bundler/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-init.1 +25 -0
- data/bundler/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +33 -0
- data/bundler/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-install.1 +338 -0
- data/bundler/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +34 -7
- data/bundler/lib/bundler/man/bundle-list.1 +50 -0
- data/bundler/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/bundler/lib/bundler/man/bundle-lock.1 +84 -0
- data/bundler/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-open.1 +32 -0
- data/bundler/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-outdated.1 +155 -0
- data/bundler/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +61 -0
- data/bundler/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +34 -0
- data/bundler/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-remove.1 +31 -0
- data/bundler/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-show.1 +23 -0
- data/bundler/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle-update.1 +394 -0
- data/bundler/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +39 -0
- data/bundler/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/bundler/lib/bundler/man/bundle.1 +136 -0
- data/bundler/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +2 -2
- data/bundler/lib/bundler/man/gemfile.5 +686 -0
- data/bundler/{man → lib/bundler/man}/gemfile.5.ronn +16 -20
- data/bundler/lib/bundler/man/index.txt +25 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/mirror.rb +5 -5
- data/bundler/lib/bundler/plugin.rb +75 -36
- data/bundler/lib/bundler/plugin/api.rb +1 -1
- data/bundler/lib/bundler/plugin/api/source.rb +12 -7
- data/bundler/lib/bundler/plugin/dsl.rb +1 -1
- data/bundler/lib/bundler/plugin/index.rb +24 -4
- data/bundler/lib/bundler/plugin/installer.rb +33 -22
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/bundler/lib/bundler/plugin/source_list.rb +5 -1
- data/bundler/lib/bundler/psyched_yaml.rb +0 -15
- data/bundler/lib/bundler/remote_specification.rb +5 -4
- data/bundler/lib/bundler/resolver.rb +191 -87
- data/bundler/lib/bundler/resolver/spec_group.rb +76 -48
- data/bundler/lib/bundler/retry.rb +3 -3
- data/bundler/lib/bundler/ruby_version.rb +5 -20
- data/bundler/lib/bundler/rubygems_ext.rb +76 -72
- data/bundler/lib/bundler/rubygems_gem_installer.rb +47 -13
- data/bundler/lib/bundler/rubygems_integration.rb +159 -444
- data/bundler/lib/bundler/runtime.rb +6 -23
- data/bundler/lib/bundler/settings.rb +67 -93
- data/bundler/lib/bundler/setup.rb +11 -12
- data/bundler/lib/bundler/shared_helpers.rb +54 -80
- data/bundler/lib/bundler/similarity_detector.rb +3 -3
- data/bundler/lib/bundler/source.rb +12 -6
- data/bundler/lib/bundler/source/git.rb +47 -38
- data/bundler/lib/bundler/source/git/git_proxy.rb +101 -102
- data/bundler/lib/bundler/source/metadata.rb +7 -6
- data/bundler/lib/bundler/source/path.rb +20 -11
- data/bundler/lib/bundler/source/path/installer.rb +10 -10
- data/bundler/lib/bundler/source/rubygems.rb +56 -29
- data/bundler/lib/bundler/source/rubygems/remote.rb +3 -4
- data/bundler/lib/bundler/source_list.rb +32 -30
- data/bundler/lib/bundler/spec_set.rb +37 -25
- data/bundler/lib/bundler/stub_specification.rb +40 -34
- data/bundler/lib/bundler/templates/Executable.bundler +23 -14
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +16 -2
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -5
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +18 -31
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/bundler/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -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/templates/newgem/travis.yml.tt +0 -1
- data/bundler/lib/bundler/ui.rb +3 -3
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +7 -11
- data/bundler/lib/bundler/uri_credentials_filter.rb +10 -4
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +273 -147
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +5 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +36 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +3 -3
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +39 -11
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +4 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +53 -51
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +302 -462
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +16 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +28 -13
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +3 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +7 -17
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +20 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +19 -8
- data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +63 -43
- data/bundler/lib/bundler/vendor/thor/lib/thor/command.rb +21 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +78 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +7 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +20 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +21 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/runner.rb +15 -14
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +65 -8
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +10 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +3 -3
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +18 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +88 -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 +21 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/bundler/lib/bundler/vendored_fileutils.rb +1 -6
- data/bundler/lib/bundler/vendored_molinillo.rb +1 -1
- data/bundler/lib/bundler/vendored_persistent.rb +7 -12
- data/bundler/lib/bundler/vendored_thor.rb +2 -2
- data/bundler/lib/bundler/vendored_tmpdir.rb +4 -0
- data/bundler/lib/bundler/vendored_uri.rb +4 -0
- data/bundler/lib/bundler/version.rb +1 -20
- data/bundler/lib/bundler/version_ranges.rb +51 -5
- data/bundler/lib/bundler/vlad.rb +2 -2
- data/bundler/lib/bundler/worker.rb +2 -4
- data/bundler/lib/bundler/yaml_serializer.rb +3 -4
- data/lib/rubygems.rb +198 -222
- data/lib/rubygems/available_set.rb +4 -5
- data/lib/rubygems/basic_specification.rb +32 -19
- data/lib/rubygems/bundler_version_finder.rb +19 -9
- data/lib/rubygems/command.rb +73 -21
- data/lib/rubygems/command_manager.rb +5 -12
- data/lib/rubygems/commands/build_command.rb +51 -18
- data/lib/rubygems/commands/cert_command.rb +2 -11
- data/lib/rubygems/commands/check_command.rb +0 -2
- data/lib/rubygems/commands/cleanup_command.rb +17 -13
- data/lib/rubygems/commands/contents_command.rb +7 -9
- data/lib/rubygems/commands/dependency_command.rb +9 -10
- data/lib/rubygems/commands/environment_command.rb +1 -6
- data/lib/rubygems/commands/fetch_command.rb +2 -4
- data/lib/rubygems/commands/generate_index_command.rb +3 -2
- data/lib/rubygems/commands/help_command.rb +4 -4
- data/lib/rubygems/commands/info_command.rb +9 -4
- data/lib/rubygems/commands/install_command.rb +12 -54
- data/lib/rubygems/commands/list_command.rb +8 -7
- data/lib/rubygems/commands/lock_command.rb +3 -5
- data/lib/rubygems/commands/mirror_command.rb +0 -1
- data/lib/rubygems/commands/open_command.rb +1 -4
- data/lib/rubygems/commands/outdated_command.rb +0 -1
- data/lib/rubygems/commands/owner_command.rb +10 -10
- data/lib/rubygems/commands/pristine_command.rb +13 -9
- data/lib/rubygems/commands/push_command.rb +12 -51
- data/lib/rubygems/commands/query_command.rb +14 -330
- data/lib/rubygems/commands/rdoc_command.rb +0 -1
- data/lib/rubygems/commands/search_command.rb +7 -7
- data/lib/rubygems/commands/server_command.rb +3 -1
- data/lib/rubygems/commands/setup_command.rb +143 -101
- data/lib/rubygems/commands/signin_command.rb +0 -1
- data/lib/rubygems/commands/signout_command.rb +0 -2
- data/lib/rubygems/commands/sources_command.rb +22 -6
- data/lib/rubygems/commands/specification_command.rb +8 -3
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +2 -3
- data/lib/rubygems/commands/unpack_command.rb +3 -32
- data/lib/rubygems/commands/update_command.rb +73 -28
- data/lib/rubygems/commands/which_command.rb +0 -1
- data/lib/rubygems/commands/yank_command.rb +10 -7
- data/lib/rubygems/compatibility.rb +4 -4
- data/lib/rubygems/config_file.rb +48 -27
- data/lib/rubygems/core_ext/kernel_gem.rb +7 -6
- data/lib/rubygems/core_ext/kernel_require.rb +44 -6
- data/lib/rubygems/core_ext/kernel_warn.rb +22 -13
- data/lib/rubygems/core_ext/tcpsocket_init.rb +52 -0
- data/lib/rubygems/defaults.rb +110 -23
- data/lib/rubygems/dependency.rb +28 -14
- data/lib/rubygems/dependency_installer.rb +11 -166
- data/lib/rubygems/dependency_list.rb +17 -18
- data/lib/rubygems/deprecate.rb +51 -6
- data/lib/rubygems/doctor.rb +4 -4
- data/lib/rubygems/errors.rb +5 -7
- data/lib/rubygems/exceptions.rb +2 -24
- data/lib/rubygems/ext.rb +6 -6
- data/lib/rubygems/ext/build_error.rb +2 -0
- data/lib/rubygems/ext/builder.rb +45 -82
- data/lib/rubygems/ext/cmake_builder.rb +6 -7
- data/lib/rubygems/ext/configure_builder.rb +5 -8
- data/lib/rubygems/ext/ext_conf_builder.rb +27 -23
- data/lib/rubygems/ext/rake_builder.rb +4 -6
- data/lib/rubygems/gem_runner.rb +3 -10
- data/lib/rubygems/gemcutter_utilities.rb +111 -37
- data/lib/rubygems/indexer.rb +9 -26
- data/lib/rubygems/install_update_options.rb +7 -7
- data/lib/rubygems/installer.rb +91 -98
- data/lib/rubygems/installer_test_case.rb +104 -42
- data/lib/rubygems/installer_uninstaller_utils.rb +29 -0
- data/lib/rubygems/local_remote_options.rb +1 -1
- data/lib/rubygems/mock_gem_ui.rb +1 -4
- data/lib/rubygems/name_tuple.rb +4 -7
- data/lib/rubygems/openssl.rb +7 -0
- data/lib/rubygems/package.rb +49 -32
- data/lib/rubygems/package/digest_io.rb +0 -2
- data/lib/rubygems/package/file_source.rb +0 -2
- data/lib/rubygems/package/io_source.rb +0 -2
- data/lib/rubygems/package/old.rb +1 -3
- data/lib/rubygems/package/tar_header.rb +4 -6
- data/lib/rubygems/package/tar_reader.rb +15 -12
- data/lib/rubygems/package/tar_reader/entry.rb +0 -3
- data/lib/rubygems/package/tar_test_case.rb +2 -4
- data/lib/rubygems/package/tar_writer.rb +6 -16
- data/lib/rubygems/package_task.rb +1 -7
- data/lib/rubygems/path_support.rb +2 -2
- data/lib/rubygems/platform.rb +22 -16
- data/lib/rubygems/query_utils.rb +353 -0
- data/lib/rubygems/rdoc.rb +0 -12
- data/lib/rubygems/remote_fetcher.rb +33 -59
- data/lib/rubygems/request.rb +11 -14
- data/lib/rubygems/request/connection_pools.rb +3 -7
- data/lib/rubygems/request/http_pool.rb +0 -1
- data/lib/rubygems/request_set.rb +10 -23
- data/lib/rubygems/request_set/gem_dependency_api.rb +9 -11
- data/lib/rubygems/request_set/lockfile.rb +13 -12
- data/lib/rubygems/request_set/lockfile/parser.rb +2 -2
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
- data/lib/rubygems/requirement.rb +36 -35
- data/lib/rubygems/resolver.rb +20 -16
- data/lib/rubygems/resolver/activation_request.rb +27 -51
- data/lib/rubygems/resolver/api_set.rb +31 -24
- data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
- data/lib/rubygems/resolver/api_specification.rb +24 -10
- data/lib/rubygems/resolver/best_set.rb +4 -6
- data/lib/rubygems/resolver/composed_set.rb +3 -5
- data/lib/rubygems/resolver/conflict.rb +2 -9
- data/lib/rubygems/resolver/current_set.rb +0 -2
- data/lib/rubygems/resolver/dependency_request.rb +1 -3
- data/lib/rubygems/resolver/git_set.rb +0 -2
- data/lib/rubygems/resolver/git_specification.rb +0 -2
- data/lib/rubygems/resolver/index_set.rb +1 -3
- data/lib/rubygems/resolver/index_specification.rb +32 -2
- data/lib/rubygems/resolver/installed_specification.rb +0 -2
- data/lib/rubygems/resolver/installer_set.rb +63 -16
- data/lib/rubygems/resolver/local_specification.rb +0 -2
- data/lib/rubygems/resolver/lock_set.rb +3 -5
- data/lib/rubygems/resolver/lock_specification.rb +2 -4
- data/lib/rubygems/resolver/molinillo/lib/molinillo.rb +6 -5
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +7 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +8 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +39 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb +1 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/log.rb +7 -6
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/set_payload.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/tag.rb +4 -3
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +51 -12
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +76 -8
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +2 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +12 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +3 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +510 -165
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolver.rb +3 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/state.rb +8 -4
- data/lib/rubygems/resolver/requirement_list.rb +0 -1
- data/lib/rubygems/resolver/set.rb +0 -2
- data/lib/rubygems/resolver/source_set.rb +0 -2
- data/lib/rubygems/resolver/spec_specification.rb +14 -2
- data/lib/rubygems/resolver/specification.rb +13 -2
- data/lib/rubygems/resolver/vendor_set.rb +0 -2
- data/lib/rubygems/resolver/vendor_specification.rb +0 -2
- data/lib/rubygems/s3_uri_signer.rb +15 -13
- data/lib/rubygems/safe_yaml.rb +4 -4
- data/lib/rubygems/security.rb +27 -34
- data/lib/rubygems/security/policy.rb +4 -8
- data/lib/rubygems/security/signer.rb +8 -9
- data/lib/rubygems/security/trust_dir.rb +1 -3
- data/lib/rubygems/server.rb +20 -16
- data/lib/rubygems/source.rb +30 -13
- data/lib/rubygems/source/git.rb +7 -8
- data/lib/rubygems/source/installed.rb +0 -2
- data/lib/rubygems/source/local.rb +2 -4
- data/lib/rubygems/source/lock.rb +0 -2
- data/lib/rubygems/source/specific_file.rb +0 -2
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source_list.rb +6 -6
- data/lib/rubygems/spec_fetcher.rb +22 -34
- data/lib/rubygems/specification.rb +207 -278
- data/lib/rubygems/specification_policy.rb +135 -57
- data/{bundler/lib/bundler/ssl_certs/index.rubygems.org → lib/rubygems/ssl_certs/rubygems.org}/GlobalSignRootCA.pem +0 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +4 -5
- data/lib/rubygems/test_case.rb +221 -341
- data/lib/rubygems/test_utilities.rb +22 -18
- data/lib/rubygems/text.rb +2 -3
- data/lib/rubygems/uninstaller.rb +49 -30
- data/lib/rubygems/uri_formatter.rb +2 -4
- data/lib/rubygems/uri_parser.rb +34 -0
- data/lib/rubygems/uri_parsing.rb +23 -0
- data/lib/rubygems/user_interaction.rb +3 -20
- data/lib/rubygems/util.rb +20 -44
- data/lib/rubygems/util/licenses.rb +400 -400
- data/lib/rubygems/validator.rb +9 -31
- data/lib/rubygems/version.rb +29 -21
- data/lib/rubygems/version_option.rb +6 -0
- data/rubygems-update.gemspec +4 -11
- data/setup.rb +2 -7
- 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/rubygems/commands/crash_command.rb +0 -2
- data/test/rubygems/rubygems_plugin.rb +0 -2
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +12 -0
- data/test/rubygems/test_bundled_ca.rb +42 -45
- data/test/rubygems/test_config.rb +0 -2
- data/test/rubygems/test_deprecate.rb +41 -5
- data/test/rubygems/test_gem.rb +405 -236
- data/test/rubygems/test_gem_available_set.rb +5 -6
- data/test/rubygems/test_gem_bundler_version_finder.rb +20 -2
- data/test/rubygems/test_gem_command.rb +144 -9
- data/test/rubygems/test_gem_command_manager.rb +40 -17
- data/test/rubygems/test_gem_commands_build_command.rb +386 -13
- data/test/rubygems/test_gem_commands_cert_command.rb +18 -6
- data/test/rubygems/test_gem_commands_check_command.rb +0 -2
- data/test/rubygems/test_gem_commands_cleanup_command.rb +35 -10
- data/test/rubygems/test_gem_commands_contents_command.rb +50 -19
- data/test/rubygems/test_gem_commands_dependency_command.rb +1 -3
- data/test/rubygems/test_gem_commands_environment_command.rb +21 -33
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -2
- data/test/rubygems/test_gem_commands_generate_index_command.rb +32 -2
- data/test/rubygems/test_gem_commands_help_command.rb +16 -8
- data/test/rubygems/test_gem_commands_info_command.rb +6 -7
- data/test/rubygems/test_gem_commands_install_command.rb +368 -34
- data/test/rubygems/test_gem_commands_list_command.rb +0 -2
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -2
- data/test/rubygems/test_gem_commands_mirror.rb +1 -2
- data/test/rubygems/test_gem_commands_open_command.rb +4 -6
- data/test/rubygems/test_gem_commands_outdated_command.rb +18 -1
- data/test/rubygems/test_gem_commands_owner_command.rb +62 -9
- data/test/rubygems/test_gem_commands_pristine_command.rb +148 -16
- data/test/rubygems/test_gem_commands_push_command.rb +94 -21
- data/test/rubygems/test_gem_commands_query_command.rb +35 -10
- data/test/rubygems/test_gem_commands_search_command.rb +0 -2
- data/test/rubygems/test_gem_commands_server_command.rb +6 -4
- data/test/rubygems/test_gem_commands_setup_command.rb +228 -128
- data/test/rubygems/test_gem_commands_signin_command.rb +36 -11
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -7
- data/test/rubygems/test_gem_commands_sources_command.rb +193 -9
- data/test/rubygems/test_gem_commands_specification_command.rb +46 -20
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -2
- data/test/rubygems/test_gem_commands_uninstall_command.rb +108 -52
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -2
- data/test/rubygems/test_gem_commands_update_command.rb +201 -29
- data/test/rubygems/test_gem_commands_which_command.rb +3 -5
- data/test/rubygems/test_gem_commands_yank_command.rb +86 -5
- data/test/rubygems/test_gem_config_file.rb +25 -13
- data/test/rubygems/test_gem_dependency.rb +6 -2
- data/test/rubygems/test_gem_dependency_installer.rb +169 -252
- data/test/rubygems/test_gem_dependency_list.rb +31 -26
- data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -3
- data/test/rubygems/test_gem_doctor.rb +28 -2
- data/test/rubygems/test_gem_ext_builder.rb +51 -44
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -23
- data/test/rubygems/test_gem_ext_configure_builder.rb +6 -14
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -29
- data/test/rubygems/test_gem_ext_rake_builder.rb +39 -22
- data/test/rubygems/test_gem_gem_runner.rb +47 -2
- data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -13
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -2
- data/test/rubygems/test_gem_indexer.rb +40 -55
- data/test/rubygems/test_gem_install_update_options.rb +45 -21
- data/test/rubygems/test_gem_installer.rb +661 -338
- data/test/rubygems/test_gem_local_remote_options.rb +0 -2
- data/test/rubygems/test_gem_name_tuple.rb +0 -2
- data/test/rubygems/test_gem_package.rb +132 -45
- data/test/rubygems/test_gem_package_old.rb +56 -55
- data/test/rubygems/test_gem_package_tar_header.rb +18 -1
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -2
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +6 -7
- data/test/rubygems/test_gem_package_tar_writer.rb +20 -12
- data/test/rubygems/test_gem_package_task.rb +46 -13
- data/test/rubygems/test_gem_path_support.rb +17 -13
- data/test/rubygems/test_gem_platform.rb +74 -7
- data/test/rubygems/test_gem_rdoc.rb +0 -1
- data/test/rubygems/test_gem_remote_fetcher.rb +223 -209
- data/test/rubygems/test_gem_request.rb +30 -19
- data/test/rubygems/test_gem_request_connection_pools.rb +2 -2
- data/test/rubygems/test_gem_request_set.rb +104 -29
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +4 -6
- data/test/rubygems/test_gem_request_set_lockfile.rb +4 -5
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -10
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
- data/test/rubygems/test_gem_requirement.rb +50 -4
- data/test/rubygems/test_gem_resolver.rb +73 -31
- data/test/rubygems/test_gem_resolver_activation_request.rb +3 -34
- data/test/rubygems/test_gem_resolver_api_set.rb +60 -59
- data/test/rubygems/test_gem_resolver_api_specification.rb +3 -5
- data/test/rubygems/test_gem_resolver_best_set.rb +27 -6
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_conflict.rb +1 -7
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -2
- data/test/rubygems/test_gem_resolver_git_specification.rb +1 -2
- data/test/rubygems/test_gem_resolver_index_set.rb +2 -4
- data/test/rubygems/test_gem_resolver_index_specification.rb +7 -4
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -3
- data/test/rubygems/test_gem_resolver_installer_set.rb +10 -10
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_lock_set.rb +3 -5
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -2
- data/test/rubygems/test_gem_resolver_specification.rb +0 -2
- data/test/rubygems/test_gem_resolver_vendor_set.rb +1 -3
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -2
- data/test/rubygems/test_gem_security.rb +27 -25
- data/test/rubygems/test_gem_security_policy.rb +7 -12
- data/test/rubygems/test_gem_security_signer.rb +11 -12
- data/test/rubygems/test_gem_security_trust_dir.rb +4 -6
- data/test/rubygems/test_gem_server.rb +13 -12
- data/test/rubygems/test_gem_silent_ui.rb +0 -1
- data/test/rubygems/test_gem_source.rb +32 -17
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
- data/test/rubygems/test_gem_source_git.rb +12 -18
- data/test/rubygems/test_gem_source_installed.rb +11 -13
- data/test/rubygems/test_gem_source_list.rb +1 -1
- data/test/rubygems/test_gem_source_local.rb +8 -9
- data/test/rubygems/test_gem_source_lock.rb +17 -19
- data/test/rubygems/test_gem_source_specific_file.rb +9 -10
- data/test/rubygems/test_gem_source_subpath_problem.rb +49 -0
- data/test/rubygems/test_gem_source_vendor.rb +7 -9
- data/test/rubygems/test_gem_spec_fetcher.rb +11 -4
- data/test/rubygems/test_gem_specification.rb +363 -245
- data/test/rubygems/test_gem_stream_ui.rb +3 -1
- data/test/rubygems/test_gem_stub_specification.rb +6 -7
- data/test/rubygems/test_gem_text.rb +1 -2
- data/test/rubygems/test_gem_uninstaller.rb +165 -22
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -2
- data/test/rubygems/test_gem_uri_formatter.rb +0 -2
- data/test/rubygems/test_gem_util.rb +17 -15
- data/test/rubygems/test_gem_validator.rb +4 -7
- data/test/rubygems/test_gem_version.rb +23 -10
- data/test/rubygems/test_gem_version_option.rb +1 -3
- data/test/rubygems/test_kernel.rb +25 -9
- data/test/rubygems/test_project_sanity.rb +20 -0
- data/test/rubygems/test_remote_fetch_error.rb +1 -2
- data/test/rubygems/test_require.rb +394 -56
- data/test/test_changelog_generator.rb +17 -0
- metadata +109 -155
- data/.rubocop.yml +0 -67
- data/.travis.yml +0 -38
- data/appveyor.yml +0 -43
- data/bundler/CODE_OF_CONDUCT.md +0 -42
- data/bundler/CONTRIBUTING.md +0 -17
- data/bundler/exe/bundle_ruby +0 -60
- data/bundler/lib/bundler/cli/package.rb +0 -49
- data/bundler/lib/bundler/compatibility_guard.rb +0 -14
- data/bundler/lib/bundler/gem_remote_fetcher.rb +0 -43
- data/bundler/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
- data/bundler/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/bundler/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/bundler/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -12
- data/bundler/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -129
- data/lib/rubygems/source_local.rb +0 -7
- data/lib/rubygems/source_specific_file.rb +0 -6
- data/lib/rubygems/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/lib/ubygems.rb +0 -14
- data/util/CL2notes +0 -55
- data/util/ci +0 -82
- data/util/cops/deprecations.rb +0 -52
- data/util/create_certs.rb +0 -171
- data/util/create_certs.sh +0 -27
- data/util/create_encrypted_key.rb +0 -16
- data/util/generate_spdx_license_list.rb +0 -61
- data/util/patch_with_prs.rb +0 -77
- data/util/rubocop +0 -8
- data/util/update_bundled_ca_certificates.rb +0 -139
- data/util/update_changelog.rb +0 -67
@@ -4,7 +4,6 @@ require 'rubygems/available_set'
|
|
4
4
|
require 'rubygems/security'
|
5
5
|
|
6
6
|
class TestGemAvailableSet < Gem::TestCase
|
7
|
-
|
8
7
|
def setup
|
9
8
|
super
|
10
9
|
|
@@ -37,12 +36,12 @@ class TestGemAvailableSet < Gem::TestCase
|
|
37
36
|
|
38
37
|
dep = Gem::Resolver::DependencyRequest.new dep('a'), nil
|
39
38
|
|
40
|
-
assert_equal %w[a-1], set.find_all(dep).map {
|
39
|
+
assert_equal %w[a-1], set.find_all(dep).map {|spec| spec.full_name }
|
41
40
|
|
42
41
|
dep = Gem::Resolver::DependencyRequest.new dep('a', '>= 0.a'), nil
|
43
42
|
|
44
43
|
assert_equal %w[a-1 a-1.a],
|
45
|
-
set.find_all(dep).map {
|
44
|
+
set.find_all(dep).map {|spec| spec.full_name }.sort
|
46
45
|
end
|
47
46
|
|
48
47
|
def test_match_platform
|
@@ -68,7 +67,7 @@ class TestGemAvailableSet < Gem::TestCase
|
|
68
67
|
|
69
68
|
def test_best
|
70
69
|
a1, _ = util_gem 'a', '1'
|
71
|
-
a2, _
|
70
|
+
a2, _ = util_gem 'a', '2'
|
72
71
|
|
73
72
|
set = Gem::AvailableSet.new
|
74
73
|
set.add a1, @source
|
@@ -97,7 +96,7 @@ class TestGemAvailableSet < Gem::TestCase
|
|
97
96
|
|
98
97
|
def test_sorted_normal_versions
|
99
98
|
a1, _ = util_gem 'a', '1'
|
100
|
-
a2, _
|
99
|
+
a2, _ = util_gem 'a', '2'
|
101
100
|
|
102
101
|
set = Gem::AvailableSet.new
|
103
102
|
set.add a1, @source
|
@@ -123,7 +122,7 @@ class TestGemAvailableSet < Gem::TestCase
|
|
123
122
|
set.add a2a, @source
|
124
123
|
set.add a2, @source
|
125
124
|
|
126
|
-
g = set.sorted.map {
|
125
|
+
g = set.sorted.map {|t| t.spec }
|
127
126
|
|
128
127
|
assert_equal [a3a, a2, a2a, a1, a1a], g
|
129
128
|
end
|
@@ -77,6 +77,24 @@ class TestGemBundlerVersionFinder < Gem::TestCase
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
+
def test_deleted_directory
|
81
|
+
skip "Cannot perform this test on windows" if win_platform?
|
82
|
+
skip "Cannot perform this test on Solaris" if /solaris/ =~ RUBY_PLATFORM
|
83
|
+
require "tmpdir"
|
84
|
+
|
85
|
+
orig_dir = Dir.pwd
|
86
|
+
|
87
|
+
begin
|
88
|
+
Dir.mktmpdir("some_dir") do |dir|
|
89
|
+
Dir.chdir(dir)
|
90
|
+
end
|
91
|
+
ensure
|
92
|
+
Dir.chdir(orig_dir)
|
93
|
+
end
|
94
|
+
|
95
|
+
assert_nil bvf.bundler_version_with_reason
|
96
|
+
end
|
97
|
+
|
80
98
|
def test_compatible
|
81
99
|
assert bvf.compatible?(util_spec("foo"))
|
82
100
|
assert bvf.compatible?(util_spec("bundler", 1.1))
|
@@ -101,7 +119,7 @@ class TestGemBundlerVersionFinder < Gem::TestCase
|
|
101
119
|
|
102
120
|
def test_filter
|
103
121
|
versions = %w[1 1.0 1.0.1.1 2 2.a 2.0 2.1.1 3 3.a 3.0 3.1.1]
|
104
|
-
specs = versions.map {
|
122
|
+
specs = versions.map {|v| util_spec("bundler", v) }
|
105
123
|
|
106
124
|
assert_equal %w[1 1.0 1.0.1.1 2 2.a 2.0 2.1.1 3 3.a 3.0 3.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
|
107
125
|
|
@@ -115,7 +133,7 @@ class TestGemBundlerVersionFinder < Gem::TestCase
|
|
115
133
|
assert_equal %w[1 1.0 1.0.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
|
116
134
|
end
|
117
135
|
bvf.stub(:bundler_version, v("2.a")) do
|
118
|
-
assert_equal %w[2
|
136
|
+
assert_equal %w[2.a 2 2.0 2.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
|
119
137
|
end
|
120
138
|
bvf.stub(:bundler_version, v("3")) do
|
121
139
|
assert_equal %w[3 3.a 3.0 3.1.1], util_filter_specs(specs).map(&:version).map(&:to_s)
|
@@ -7,7 +7,6 @@ class Gem::Command
|
|
7
7
|
end
|
8
8
|
|
9
9
|
class TestGemCommand < Gem::TestCase
|
10
|
-
|
11
10
|
def setup
|
12
11
|
super
|
13
12
|
|
@@ -15,7 +14,7 @@ class TestGemCommand < Gem::TestCase
|
|
15
14
|
|
16
15
|
@common_options = Gem::Command.common_options.dup
|
17
16
|
Gem::Command.common_options.clear
|
18
|
-
Gem::Command.common_options <<
|
17
|
+
Gem::Command.common_options << [
|
19
18
|
['-x', '--exe', 'Execute'], lambda do |*a|
|
20
19
|
@xopt = true
|
21
20
|
end
|
@@ -32,7 +31,7 @@ class TestGemCommand < Gem::TestCase
|
|
32
31
|
|
33
32
|
def test_self_add_specific_extra_args
|
34
33
|
added_args = %w[--all]
|
35
|
-
@cmd.add_option
|
34
|
+
@cmd.add_option('--all') {|v,o| }
|
36
35
|
|
37
36
|
Gem::Command.add_specific_extra_args @cmd_name, added_args
|
38
37
|
|
@@ -55,6 +54,27 @@ class TestGemCommand < Gem::TestCase
|
|
55
54
|
assert_equal [], h
|
56
55
|
end
|
57
56
|
|
57
|
+
def test_self_extra_args
|
58
|
+
verbose, $VERBOSE, separator = $VERBOSE, nil, $;
|
59
|
+
extra_args = Gem::Command.extra_args
|
60
|
+
|
61
|
+
Gem::Command.extra_args = %w[--all]
|
62
|
+
assert_equal %w[--all], Gem::Command.extra_args
|
63
|
+
|
64
|
+
Gem::Command.extra_args = "--file --help"
|
65
|
+
assert_equal %w[--file --help], Gem::Command.extra_args
|
66
|
+
|
67
|
+
$; = "="
|
68
|
+
|
69
|
+
Gem::Command.extra_args = "--awesome=true --verbose"
|
70
|
+
assert_equal %w[--awesome=true --verbose], Gem::Command.extra_args
|
71
|
+
|
72
|
+
ensure
|
73
|
+
Gem::Command.extra_args = extra_args
|
74
|
+
$; = separator
|
75
|
+
$VERBOSE = verbose
|
76
|
+
end
|
77
|
+
|
58
78
|
def test_basic_accessors
|
59
79
|
assert_equal "doit", @cmd.command
|
60
80
|
assert_equal "gem doit", @cmd.program_name
|
@@ -80,7 +100,7 @@ class TestGemCommand < Gem::TestCase
|
|
80
100
|
@cmd.invoke
|
81
101
|
end
|
82
102
|
|
83
|
-
assert_match %r
|
103
|
+
assert_match %r{Usage: gem doit}, @ui.output
|
84
104
|
end
|
85
105
|
|
86
106
|
def test_invoke
|
@@ -96,7 +116,7 @@ class TestGemCommand < Gem::TestCase
|
|
96
116
|
|
97
117
|
def test_invoke_with_bad_options
|
98
118
|
use_ui @ui do
|
99
|
-
@cmd.when_invoked
|
119
|
+
@cmd.when_invoked { true }
|
100
120
|
|
101
121
|
ex = assert_raises OptionParser::InvalidOption do
|
102
122
|
@cmd.invoke('-zzz')
|
@@ -107,7 +127,7 @@ class TestGemCommand < Gem::TestCase
|
|
107
127
|
end
|
108
128
|
|
109
129
|
def test_invoke_with_common_options
|
110
|
-
@cmd.when_invoked
|
130
|
+
@cmd.when_invoked { true }
|
111
131
|
|
112
132
|
use_ui @ui do
|
113
133
|
@cmd.invoke "-x"
|
@@ -166,7 +186,7 @@ class TestGemCommand < Gem::TestCase
|
|
166
186
|
@cmd.invoke '-h'
|
167
187
|
end
|
168
188
|
|
169
|
-
assert_match %r
|
189
|
+
assert_match %r{Usage: gem doit}, @ui.output
|
170
190
|
end
|
171
191
|
|
172
192
|
def test_option_recognition
|
@@ -195,6 +215,122 @@ class TestGemCommand < Gem::TestCase
|
|
195
215
|
assert_equal ['-h', 'command'], args
|
196
216
|
end
|
197
217
|
|
218
|
+
def test_deprecate_option
|
219
|
+
deprecate_msg = <<-EXPECTED
|
220
|
+
WARNING: The \"--test\" option has been deprecated and will be removed in Rubygems 3.1.
|
221
|
+
EXPECTED
|
222
|
+
|
223
|
+
testCommand = Class.new(Gem::Command) do
|
224
|
+
def initialize
|
225
|
+
super('test', 'Gem::Command instance for testing')
|
226
|
+
|
227
|
+
add_option('-t', '--test', 'Test command') do |value, options|
|
228
|
+
options[:test] = true
|
229
|
+
end
|
230
|
+
|
231
|
+
deprecate_option('--test', version: '3.1')
|
232
|
+
end
|
233
|
+
|
234
|
+
def execute
|
235
|
+
true
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
cmd = testCommand.new
|
240
|
+
|
241
|
+
use_ui @ui do
|
242
|
+
cmd.invoke("--test")
|
243
|
+
assert_equal deprecate_msg, @ui.error
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_deprecate_option_no_version
|
248
|
+
deprecate_msg = <<-EXPECTED
|
249
|
+
WARNING: The \"--test\" option has been deprecated and will be removed in future versions of Rubygems.
|
250
|
+
EXPECTED
|
251
|
+
|
252
|
+
testCommand = Class.new(Gem::Command) do
|
253
|
+
def initialize
|
254
|
+
super('test', 'Gem::Command instance for testing')
|
255
|
+
|
256
|
+
add_option('-t', '--test', 'Test command') do |value, options|
|
257
|
+
options[:test] = true
|
258
|
+
end
|
259
|
+
|
260
|
+
deprecate_option('--test')
|
261
|
+
end
|
262
|
+
|
263
|
+
def execute
|
264
|
+
true
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
cmd = testCommand.new
|
269
|
+
|
270
|
+
use_ui @ui do
|
271
|
+
cmd.invoke("--test")
|
272
|
+
assert_equal deprecate_msg, @ui.error
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
def test_deprecate_option_extra_message
|
277
|
+
deprecate_msg = <<-EXPECTED
|
278
|
+
WARNING: The \"--test\" option has been deprecated and will be removed in Rubygems 3.1. Whether you set `--test` mode or not, this dummy app always runs in test mode.
|
279
|
+
EXPECTED
|
280
|
+
|
281
|
+
testCommand = Class.new(Gem::Command) do
|
282
|
+
def initialize
|
283
|
+
super('test', 'Gem::Command instance for testing')
|
284
|
+
|
285
|
+
add_option('-t', '--test', 'Test command') do |value, options|
|
286
|
+
options[:test] = true
|
287
|
+
end
|
288
|
+
|
289
|
+
deprecate_option('--test', version: '3.1', extra_msg: 'Whether you set `--test` mode or not, this dummy app always runs in test mode.')
|
290
|
+
end
|
291
|
+
|
292
|
+
def execute
|
293
|
+
true
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
297
|
+
cmd = testCommand.new
|
298
|
+
|
299
|
+
use_ui @ui do
|
300
|
+
cmd.invoke("--test")
|
301
|
+
assert_equal deprecate_msg, @ui.error
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
def test_deprecate_option_extra_message_and_no_version
|
306
|
+
deprecate_msg = <<-EXPECTED
|
307
|
+
WARNING: The \"--test\" option has been deprecated and will be removed in future versions of Rubygems. Whether you set `--test` mode or not, this dummy app always runs in test mode.
|
308
|
+
EXPECTED
|
309
|
+
|
310
|
+
testCommand = Class.new(Gem::Command) do
|
311
|
+
def initialize
|
312
|
+
super('test', 'Gem::Command instance for testing')
|
313
|
+
|
314
|
+
add_option('-t', '--test', 'Test command') do |value, options|
|
315
|
+
options[:test] = true
|
316
|
+
end
|
317
|
+
|
318
|
+
deprecate_option('--test', extra_msg: 'Whether you set `--test` mode or not, this dummy app always runs in test mode.')
|
319
|
+
end
|
320
|
+
|
321
|
+
def execute
|
322
|
+
true
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
cmd = testCommand.new
|
327
|
+
|
328
|
+
use_ui @ui do
|
329
|
+
cmd.invoke("--test")
|
330
|
+
assert_equal deprecate_msg, @ui.error
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
198
334
|
def test_show_lookup_failure_suggestions_local
|
199
335
|
correct = "non_existent_with_hint"
|
200
336
|
misspelled = "nonexistent_with_hint"
|
@@ -239,7 +375,7 @@ ERROR: Could not find a valid gem 'other' (>= 0) in any repository
|
|
239
375
|
end
|
240
376
|
|
241
377
|
use_ui @ui do
|
242
|
-
@cmd.show_lookup_failure misspelled, Gem::Requirement.default, []
|
378
|
+
@cmd.show_lookup_failure misspelled, Gem::Requirement.default, []
|
243
379
|
end
|
244
380
|
|
245
381
|
expected = <<-EXPECTED
|
@@ -249,5 +385,4 @@ ERROR: Possible alternatives: non_existent_with_hint
|
|
249
385
|
|
250
386
|
assert_equal expected, @ui.error
|
251
387
|
end
|
252
|
-
|
253
388
|
end
|
@@ -3,6 +3,7 @@ require 'rubygems/test_case'
|
|
3
3
|
require 'rubygems/command_manager'
|
4
4
|
|
5
5
|
class TestGemCommandManager < Gem::TestCase
|
6
|
+
PROJECT_DIR = File.expand_path('../../..', __FILE__).tap(&Gem::UNTAINT)
|
6
7
|
|
7
8
|
def setup
|
8
9
|
super
|
@@ -58,7 +59,7 @@ class TestGemCommandManager < Gem::TestCase
|
|
58
59
|
|
59
60
|
def test_run_interrupt
|
60
61
|
old_load_path = $:.dup
|
61
|
-
$: << File.expand_path("test/rubygems",
|
62
|
+
$: << File.expand_path("test/rubygems", PROJECT_DIR)
|
62
63
|
Gem.load_env_plugins
|
63
64
|
|
64
65
|
@command_manager.register_command :interrupt
|
@@ -77,7 +78,7 @@ class TestGemCommandManager < Gem::TestCase
|
|
77
78
|
|
78
79
|
def test_run_crash_command
|
79
80
|
old_load_path = $:.dup
|
80
|
-
$: << File.expand_path("test/rubygems",
|
81
|
+
$: << File.expand_path("test/rubygems", PROJECT_DIR)
|
81
82
|
|
82
83
|
@command_manager.register_command :crash
|
83
84
|
use_ui @ui do
|
@@ -103,16 +104,6 @@ class TestGemCommandManager < Gem::TestCase
|
|
103
104
|
assert_match(/invalid option: --bad-arg/i, @ui.error)
|
104
105
|
end
|
105
106
|
|
106
|
-
def test_process_args_bad_no_ri
|
107
|
-
use_ui @ui do
|
108
|
-
assert_raises Gem::MockGemUi::TermError do
|
109
|
-
@command_manager.process_args %w[--no-ri]
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
assert_match(/invalid option: --no-ri. Use --no-document instead./i, @ui.error)
|
114
|
-
end
|
115
|
-
|
116
107
|
# HACK move to install command test
|
117
108
|
def test_process_args_install
|
118
109
|
#capture all install options
|
@@ -137,7 +128,7 @@ class TestGemCommandManager < Gem::TestCase
|
|
137
128
|
check_options = nil
|
138
129
|
@command_manager.process_args %w[
|
139
130
|
install --force --local --document=ri,rdoc --install-dir .
|
140
|
-
|
131
|
+
--version 3.0 --no-wrapper --bindir .
|
141
132
|
]
|
142
133
|
assert_equal %w[rdoc ri], check_options[:document].sort
|
143
134
|
assert_equal true, check_options[:force]
|
@@ -232,26 +223,34 @@ class TestGemCommandManager < Gem::TestCase
|
|
232
223
|
end
|
233
224
|
|
234
225
|
#check defaults
|
235
|
-
|
226
|
+
Gem::Deprecate.skip_during do
|
227
|
+
@command_manager.process_args %w[query]
|
228
|
+
end
|
236
229
|
assert_equal(//, check_options[:name])
|
237
230
|
assert_equal :local, check_options[:domain]
|
238
231
|
assert_equal false, check_options[:details]
|
239
232
|
|
240
233
|
#check settings
|
241
234
|
check_options = nil
|
242
|
-
|
235
|
+
Gem::Deprecate.skip_during do
|
236
|
+
@command_manager.process_args %w[query --name foobar --local --details]
|
237
|
+
end
|
243
238
|
assert_equal(/foobar/i, check_options[:name])
|
244
239
|
assert_equal :local, check_options[:domain]
|
245
240
|
assert_equal true, check_options[:details]
|
246
241
|
|
247
242
|
#remote domain
|
248
243
|
check_options = nil
|
249
|
-
|
244
|
+
Gem::Deprecate.skip_during do
|
245
|
+
@command_manager.process_args %w[query --remote]
|
246
|
+
end
|
250
247
|
assert_equal :remote, check_options[:domain]
|
251
248
|
|
252
249
|
#both (local/remote) domains
|
253
250
|
check_options = nil
|
254
|
-
|
251
|
+
Gem::Deprecate.skip_during do
|
252
|
+
@command_manager.process_args %w[query --both]
|
253
|
+
end
|
255
254
|
assert_equal :both, check_options[:domain]
|
256
255
|
end
|
257
256
|
|
@@ -276,4 +275,28 @@ class TestGemCommandManager < Gem::TestCase
|
|
276
275
|
assert_equal Dir.pwd, check_options[:install_dir]
|
277
276
|
end
|
278
277
|
|
278
|
+
def test_deprecated_command
|
279
|
+
require 'rubygems/command'
|
280
|
+
foo_command = Class.new(Gem::Command) do
|
281
|
+
extend Gem::Deprecate
|
282
|
+
|
283
|
+
rubygems_deprecate_command
|
284
|
+
|
285
|
+
def execute
|
286
|
+
say "pew pew!"
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
Gem::Commands.send(:const_set, :FooCommand, foo_command)
|
291
|
+
@command_manager.register_command(:foo, foo_command.new("foo"))
|
292
|
+
|
293
|
+
use_ui @ui do
|
294
|
+
@command_manager.process_args(%w[foo])
|
295
|
+
end
|
296
|
+
|
297
|
+
assert_equal "pew pew!\n", @ui.output
|
298
|
+
assert_match(/WARNING: foo command is deprecated. It will be removed in Rubygems [0-9]+/, @ui.error)
|
299
|
+
ensure
|
300
|
+
Gem::Commands.send(:remove_const, :FooCommand)
|
301
|
+
end
|
279
302
|
end
|
@@ -1,11 +1,9 @@
|
|
1
|
-
|
2
1
|
# frozen_string_literal: true
|
3
2
|
require 'rubygems/test_case'
|
4
3
|
require 'rubygems/commands/build_command'
|
5
4
|
require 'rubygems/package'
|
6
5
|
|
7
6
|
class TestGemCommandsBuildCommand < Gem::TestCase
|
8
|
-
|
9
7
|
CERT_FILE = cert_path 'public3072'
|
10
8
|
SIGNING_KEY = key_path 'private3072'
|
11
9
|
|
@@ -17,8 +15,13 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
17
15
|
|
18
16
|
readme_file = File.join(@tempdir, 'README.md')
|
19
17
|
|
20
|
-
|
21
|
-
|
18
|
+
begin
|
19
|
+
umask_orig = File.umask(2)
|
20
|
+
File.open readme_file, 'w' do |f|
|
21
|
+
f.write 'My awesome gem'
|
22
|
+
end
|
23
|
+
ensure
|
24
|
+
File.umask(umask_orig)
|
22
25
|
end
|
23
26
|
|
24
27
|
@gem = util_spec 'some_gem' do |s|
|
@@ -34,6 +37,8 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
34
37
|
|
35
38
|
assert @cmd.options[:force]
|
36
39
|
assert @cmd.options[:strict]
|
40
|
+
assert @cmd.handles?(%W[--platform #{Gem::Platform.local}])
|
41
|
+
assert_includes Gem.platforms, Gem::Platform.local
|
37
42
|
end
|
38
43
|
|
39
44
|
def test_options_filename
|
@@ -83,6 +88,26 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
83
88
|
util_test_build_gem @gem
|
84
89
|
end
|
85
90
|
|
91
|
+
def test_execute_platform
|
92
|
+
gemspec_file = File.join(@tempdir, @gem.spec_name)
|
93
|
+
|
94
|
+
File.open gemspec_file, 'w' do |gs|
|
95
|
+
gs.write @gem.to_ruby
|
96
|
+
end
|
97
|
+
|
98
|
+
@cmd.options[:args] = [gemspec_file]
|
99
|
+
|
100
|
+
platforms = Gem.platforms.dup
|
101
|
+
begin
|
102
|
+
Gem.platforms << Gem::Platform.new("java")
|
103
|
+
|
104
|
+
spec = util_test_build_gem @gem, suffix: "java"
|
105
|
+
ensure
|
106
|
+
Gem.platforms.replace(platforms)
|
107
|
+
end
|
108
|
+
assert_match spec.platform, "java"
|
109
|
+
end
|
110
|
+
|
86
111
|
def test_execute_bad_name
|
87
112
|
[".", "-", "_"].each do |special_char|
|
88
113
|
gem = util_spec 'some_gem_with_bad_name' do |s|
|
@@ -122,6 +147,23 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
122
147
|
util_test_build_gem @gem
|
123
148
|
end
|
124
149
|
|
150
|
+
def test_execute_rubyforge_project_warning
|
151
|
+
rubyforge_gemspec = File.expand_path File.join("specifications", "rubyforge-0.0.1.gemspec"), __dir__
|
152
|
+
|
153
|
+
@cmd.options[:args] = [rubyforge_gemspec]
|
154
|
+
|
155
|
+
use_ui @ui do
|
156
|
+
Dir.chdir @tempdir do
|
157
|
+
@cmd.execute
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
error = @ui.error.split("\n")
|
162
|
+
assert_equal "WARNING: rubyforge_project= is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.", error.shift
|
163
|
+
assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift
|
164
|
+
assert_equal [], error
|
165
|
+
end
|
166
|
+
|
125
167
|
def test_execute_strict_with_warnings
|
126
168
|
bad_gem = util_spec 'some_bad_gem' do |s|
|
127
169
|
s.files = ['README.md']
|
@@ -147,7 +189,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
147
189
|
error = @ui.error.split "\n"
|
148
190
|
assert_equal "WARNING: licenses is empty, but is recommended. Use a license identifier from", error.shift
|
149
191
|
assert_equal "http://spdx.org/licenses or 'Nonstandard' for a nonstandard license.", error.shift
|
150
|
-
assert_equal "WARNING: See
|
192
|
+
assert_equal "WARNING: See https://guides.rubygems.org/specification-reference/ for help", error.shift
|
151
193
|
assert_equal [], error
|
152
194
|
|
153
195
|
gem_file = File.join @tempdir, File.basename(@gem.cache_file)
|
@@ -189,7 +231,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
189
231
|
end
|
190
232
|
|
191
233
|
assert_equal '', @ui.output
|
192
|
-
assert_equal "ERROR:
|
234
|
+
assert_equal "ERROR: Couldn't find a gemspec file matching 'some_gem' in #{@tempdir}\n", @ui.error
|
193
235
|
end
|
194
236
|
|
195
237
|
def test_execute_outside_dir
|
@@ -230,8 +272,200 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
230
272
|
assert_equal "this is a summary", spec.summary
|
231
273
|
end
|
232
274
|
|
275
|
+
def test_execute_outside_dir_with_glob_argument
|
276
|
+
gemspec_dir = File.join @tempdir, 'build_command_gem'
|
277
|
+
gemspec_file = File.join gemspec_dir, @gem.spec_name
|
278
|
+
readme_file = File.join gemspec_dir, 'README.md'
|
279
|
+
|
280
|
+
FileUtils.mkdir_p gemspec_dir
|
281
|
+
|
282
|
+
File.open readme_file, 'w' do |f|
|
283
|
+
f.write "My awesome gem"
|
284
|
+
end
|
285
|
+
|
286
|
+
File.open gemspec_file, 'w' do |gs|
|
287
|
+
gs.write @gem.to_ruby
|
288
|
+
end
|
289
|
+
|
290
|
+
@cmd.options[:build_path] = gemspec_dir
|
291
|
+
@cmd.options[:args] = ["*.gemspec"]
|
292
|
+
|
293
|
+
use_ui @ui do
|
294
|
+
@cmd.execute
|
295
|
+
end
|
296
|
+
|
297
|
+
output = @ui.output.split "\n"
|
298
|
+
assert_equal " Successfully built RubyGem", output.shift
|
299
|
+
assert_equal " Name: some_gem", output.shift
|
300
|
+
assert_equal " Version: 2", output.shift
|
301
|
+
assert_equal " File: some_gem-2.gem", output.shift
|
302
|
+
assert_equal [], output
|
303
|
+
|
304
|
+
gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
|
305
|
+
assert File.exist?(gem_file)
|
306
|
+
|
307
|
+
spec = Gem::Package.new(gem_file).spec
|
308
|
+
|
309
|
+
assert_equal "some_gem", spec.name
|
310
|
+
assert_equal "this is a summary", spec.summary
|
311
|
+
end
|
312
|
+
|
313
|
+
def test_execute_outside_dir_no_gemspec_present
|
314
|
+
gemspec_dir = File.join @tempdir, 'build_command_gem'
|
315
|
+
gemspec_file = File.join @tempdir, @gem.spec_name
|
316
|
+
readme_file = File.join gemspec_dir, 'README.md'
|
317
|
+
|
318
|
+
FileUtils.mkdir_p gemspec_dir
|
319
|
+
|
320
|
+
File.open readme_file, 'w' do |f|
|
321
|
+
f.write "My awesome gem"
|
322
|
+
end
|
323
|
+
|
324
|
+
File.open gemspec_file, 'w' do |gs|
|
325
|
+
gs.write @gem.to_ruby
|
326
|
+
end
|
327
|
+
|
328
|
+
@cmd.options[:build_path] = gemspec_dir
|
329
|
+
@cmd.options[:args] = ["*.gemspec"]
|
330
|
+
|
331
|
+
use_ui @ui do
|
332
|
+
assert_raises Gem::MockGemUi::TermError do
|
333
|
+
@cmd.execute
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
assert_equal "", @ui.output
|
338
|
+
assert_equal "ERROR: Couldn't find a gemspec file matching '*.gemspec' in #{gemspec_dir}\n", @ui.error
|
339
|
+
|
340
|
+
gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
|
341
|
+
refute File.exist?(gem_file)
|
342
|
+
end
|
343
|
+
|
344
|
+
def test_execute_outside_dir_without_gem_name
|
345
|
+
gemspec_dir = File.join(@tempdir, 'build_command_gem')
|
346
|
+
gemspec_file = File.join(gemspec_dir, @gem.spec_name)
|
347
|
+
|
348
|
+
readme_file = File.join gemspec_dir, 'README.md'
|
349
|
+
|
350
|
+
FileUtils.mkdir_p(gemspec_dir)
|
351
|
+
|
352
|
+
File.open readme_file, 'w' do |f|
|
353
|
+
f.write "My awesome gem"
|
354
|
+
end
|
355
|
+
|
356
|
+
File.open(gemspec_file, "w") do |gs|
|
357
|
+
gs.write(@gem.to_ruby)
|
358
|
+
end
|
359
|
+
|
360
|
+
@cmd.options[:build_path] = gemspec_dir
|
361
|
+
@cmd.options[:args] = []
|
362
|
+
|
363
|
+
use_ui @ui do
|
364
|
+
Dir.chdir(gemspec_dir) do
|
365
|
+
@cmd.execute
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
output = @ui.output.split("\n")
|
370
|
+
assert_equal " Successfully built RubyGem", output.shift
|
371
|
+
assert_equal " Name: some_gem", output.shift
|
372
|
+
assert_equal " Version: 2", output.shift
|
373
|
+
assert_equal " File: some_gem-2.gem", output.shift
|
374
|
+
assert_equal [], output
|
375
|
+
|
376
|
+
gem_file = File.join gemspec_dir, File.basename(@gem.cache_file)
|
377
|
+
assert File.exist?(gem_file)
|
378
|
+
|
379
|
+
spec = Gem::Package.new(gem_file).spec
|
380
|
+
|
381
|
+
assert_equal "some_gem", spec.name
|
382
|
+
assert_equal "this is a summary", spec.summary
|
383
|
+
end
|
384
|
+
|
385
|
+
def test_execute_outside_dir_with_external_gemspec
|
386
|
+
gemspec_dir = File.join @tempdir, 'gemspec_dir'
|
387
|
+
gemspec_file = File.join gemspec_dir, @gem.spec_name
|
388
|
+
|
389
|
+
gemcode_dir = File.join @tempdir, 'build_command_gem'
|
390
|
+
readme_file = File.join gemcode_dir, 'README.md'
|
391
|
+
|
392
|
+
FileUtils.mkdir_p gemspec_dir
|
393
|
+
FileUtils.mkdir_p gemcode_dir
|
394
|
+
|
395
|
+
File.open readme_file, 'w' do |f|
|
396
|
+
f.write "My awesome gem in nested directory"
|
397
|
+
end
|
398
|
+
|
399
|
+
File.open gemspec_file, 'w' do |gs|
|
400
|
+
gs.write @gem.to_ruby
|
401
|
+
end
|
402
|
+
|
403
|
+
@cmd.options[:build_path] = gemcode_dir
|
404
|
+
@cmd.options[:args] = [gemspec_file]
|
405
|
+
|
406
|
+
use_ui @ui do
|
407
|
+
@cmd.execute
|
408
|
+
end
|
409
|
+
|
410
|
+
output = @ui.output.split "\n"
|
411
|
+
assert_equal " Successfully built RubyGem", output.shift
|
412
|
+
assert_equal " Name: some_gem", output.shift
|
413
|
+
assert_equal " Version: 2", output.shift
|
414
|
+
assert_equal " File: some_gem-2.gem", output.shift
|
415
|
+
assert_equal [], output
|
416
|
+
|
417
|
+
gem_file = File.join gemcode_dir, File.basename(@gem.cache_file)
|
418
|
+
assert File.exist?(gem_file)
|
419
|
+
|
420
|
+
spec = Gem::Package.new(gem_file).spec
|
421
|
+
|
422
|
+
assert_equal "some_gem", spec.name
|
423
|
+
assert_equal "this is a summary", spec.summary
|
424
|
+
end
|
425
|
+
|
426
|
+
def test_execute_outside_dir_with_external_relative_gemspec
|
427
|
+
gemspec_dir = File.join @tempdir, 'gemspec_dir'
|
428
|
+
gemspec_file = File.join gemspec_dir, @gem.spec_name
|
429
|
+
|
430
|
+
gemcode_dir = File.join @tempdir, 'build_command_gem'
|
431
|
+
readme_file = File.join gemcode_dir, 'README.md'
|
432
|
+
|
433
|
+
FileUtils.mkdir_p gemspec_dir
|
434
|
+
FileUtils.mkdir_p gemcode_dir
|
435
|
+
|
436
|
+
File.open readme_file, 'w' do |f|
|
437
|
+
f.write "My awesome gem in nested directory"
|
438
|
+
end
|
439
|
+
|
440
|
+
File.open gemspec_file, 'w' do |gs|
|
441
|
+
gs.write @gem.to_ruby
|
442
|
+
end
|
443
|
+
|
444
|
+
@cmd.options[:build_path] = gemcode_dir
|
445
|
+
@cmd.options[:args] = [File.join("..", "gemspec_dir", @gem.spec_name)]
|
446
|
+
|
447
|
+
use_ui @ui do
|
448
|
+
@cmd.execute
|
449
|
+
end
|
450
|
+
|
451
|
+
output = @ui.output.split "\n"
|
452
|
+
assert_equal " Successfully built RubyGem", output.shift
|
453
|
+
assert_equal " Name: some_gem", output.shift
|
454
|
+
assert_equal " Version: 2", output.shift
|
455
|
+
assert_equal " File: some_gem-2.gem", output.shift
|
456
|
+
assert_equal [], output
|
457
|
+
|
458
|
+
gem_file = File.join gemcode_dir, File.basename(@gem.cache_file)
|
459
|
+
assert File.exist?(gem_file)
|
460
|
+
|
461
|
+
spec = Gem::Package.new(gem_file).spec
|
462
|
+
|
463
|
+
assert_equal "some_gem", spec.name
|
464
|
+
assert_equal "this is a summary", spec.summary
|
465
|
+
end
|
466
|
+
|
233
467
|
def test_can_find_gemspecs_without_dot_gemspec
|
234
|
-
gemspec_file = File.join(@tempdir, @gem.
|
468
|
+
gemspec_file = File.join(@tempdir, @gem.name)
|
235
469
|
|
236
470
|
File.open gemspec_file + ".gemspec", 'w' do |gs|
|
237
471
|
gs.write @gem.to_ruby
|
@@ -242,27 +476,94 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
242
476
|
util_test_build_gem @gem
|
243
477
|
end
|
244
478
|
|
245
|
-
def
|
479
|
+
def test_execute_without_gem_name
|
480
|
+
some_gem = util_spec "some_gem"
|
481
|
+
gemspec_dir = File.join(@tempdir, "build_command_gem")
|
482
|
+
gemspec_file = File.join(gemspec_dir, some_gem.spec_name)
|
483
|
+
|
484
|
+
FileUtils.mkdir_p(gemspec_dir)
|
485
|
+
|
486
|
+
File.open(gemspec_file, "w") do |gs|
|
487
|
+
gs.write(some_gem.to_ruby)
|
488
|
+
end
|
489
|
+
|
490
|
+
@cmd.options[:args] = []
|
491
|
+
|
246
492
|
use_ui @ui do
|
247
|
-
Dir.chdir
|
493
|
+
Dir.chdir(gemspec_dir) do
|
248
494
|
@cmd.execute
|
249
495
|
end
|
250
496
|
end
|
251
497
|
|
252
|
-
output = @ui.output.split
|
498
|
+
output = @ui.output.split("\n")
|
253
499
|
assert_equal " Successfully built RubyGem", output.shift
|
254
500
|
assert_equal " Name: some_gem", output.shift
|
255
501
|
assert_equal " Version: 2", output.shift
|
256
502
|
assert_equal " File: some_gem-2.gem", output.shift
|
257
503
|
assert_equal [], output
|
258
504
|
|
259
|
-
|
505
|
+
some_gem = File.join(gemspec_dir, File.basename(some_gem.cache_file))
|
506
|
+
assert File.exist?(some_gem)
|
507
|
+
end
|
508
|
+
|
509
|
+
def test_execute_multiple_gemspec_without_gem_name
|
510
|
+
some_gem = util_spec "some_gem"
|
511
|
+
another_gem = util_spec "another_gem"
|
512
|
+
gemspec_dir = File.join(@tempdir, "build_command_gem")
|
513
|
+
gemspec_file = File.join(gemspec_dir, some_gem.spec_name)
|
514
|
+
another_gemspec_file = File.join(gemspec_dir, another_gem.spec_name)
|
515
|
+
|
516
|
+
FileUtils.mkdir_p(gemspec_dir)
|
517
|
+
|
518
|
+
File.open(gemspec_file, "w") do |gs|
|
519
|
+
gs.write(some_gem.to_ruby)
|
520
|
+
end
|
521
|
+
|
522
|
+
File.open(another_gemspec_file, "w") do |gs|
|
523
|
+
gs.write(another_gem.to_ruby)
|
524
|
+
end
|
525
|
+
|
526
|
+
@cmd.options[:args] = []
|
527
|
+
|
528
|
+
use_ui @ui do
|
529
|
+
Dir.chdir(gemspec_dir) do
|
530
|
+
assert_raises Gem::MockGemUi::TermError do
|
531
|
+
@cmd.execute
|
532
|
+
end
|
533
|
+
end
|
534
|
+
end
|
535
|
+
|
536
|
+
gemspecs = ["another_gem-2.gemspec", "some_gem-2.gemspec"]
|
537
|
+
assert_equal "", @ui.output
|
538
|
+
assert_equal @ui.error, "ERROR: Multiple gemspecs found: #{gemspecs}, please specify one\n"
|
539
|
+
|
540
|
+
expected_gem = File.join(gemspec_dir, File.basename(another_gem.cache_file))
|
541
|
+
refute File.exist?(expected_gem)
|
542
|
+
end
|
543
|
+
|
544
|
+
def util_test_build_gem(gem, suffix: nil)
|
545
|
+
use_ui @ui do
|
546
|
+
Dir.chdir @tempdir do
|
547
|
+
@cmd.execute
|
548
|
+
end
|
549
|
+
end
|
550
|
+
suffix &&= "-#{suffix}"
|
551
|
+
gem_file = "some_gem-2#{suffix}.gem"
|
552
|
+
output = @ui.output.split "\n"
|
553
|
+
assert_equal " Successfully built RubyGem", output.shift
|
554
|
+
assert_equal " Name: some_gem", output.shift
|
555
|
+
assert_equal " Version: 2", output.shift
|
556
|
+
assert_equal " File: #{gem_file}", output.shift
|
557
|
+
assert_equal [], output
|
558
|
+
|
559
|
+
gem_file = File.join(@tempdir, gem_file)
|
260
560
|
assert File.exist?(gem_file)
|
261
561
|
|
262
562
|
spec = Gem::Package.new(gem_file).spec
|
263
563
|
|
264
564
|
assert_equal "some_gem", spec.name
|
265
565
|
assert_equal "this is a summary", spec.summary
|
566
|
+
spec
|
266
567
|
end
|
267
568
|
|
268
569
|
def test_execute_force
|
@@ -281,7 +582,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
281
582
|
end
|
282
583
|
|
283
584
|
def test_build_signed_gem
|
284
|
-
skip 'openssl is missing' unless
|
585
|
+
skip 'openssl is missing' unless Gem::HAVE_OPENSSL && !java_platform?
|
285
586
|
|
286
587
|
trust_dir = Gem::Security.trust_dir
|
287
588
|
|
@@ -308,7 +609,7 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
308
609
|
end
|
309
610
|
|
310
611
|
def test_build_signed_gem_with_cert_expiration_length_days
|
311
|
-
skip 'openssl is missing' unless
|
612
|
+
skip 'openssl is missing' unless Gem::HAVE_OPENSSL && !java_platform?
|
312
613
|
|
313
614
|
gem_path = File.join Gem.user_home, ".gem"
|
314
615
|
Dir.mkdir gem_path
|
@@ -351,4 +652,76 @@ class TestGemCommandsBuildCommand < Gem::TestCase
|
|
351
652
|
assert_equal(28, cert_days_to_expire)
|
352
653
|
end
|
353
654
|
|
655
|
+
def test_build_auto_resign_cert
|
656
|
+
skip 'openssl is missing' unless Gem::HAVE_OPENSSL && !java_platform?
|
657
|
+
|
658
|
+
gem_path = File.join Gem.user_home, ".gem"
|
659
|
+
Dir.mkdir gem_path
|
660
|
+
|
661
|
+
Gem::Security.trust_dir
|
662
|
+
|
663
|
+
tmp_expired_cert_file = File.join gem_path, "gem-public_cert.pem"
|
664
|
+
File.write(tmp_expired_cert_file, File.read(EXPIRED_CERT_FILE))
|
665
|
+
|
666
|
+
tmp_private_key_file = File.join gem_path, "gem-private_key.pem"
|
667
|
+
File.write(tmp_private_key_file, File.read(PRIVATE_KEY_FILE))
|
668
|
+
|
669
|
+
spec = util_spec 'some_gem' do |s|
|
670
|
+
s.signing_key = tmp_private_key_file
|
671
|
+
s.cert_chain = [tmp_expired_cert_file]
|
672
|
+
end
|
673
|
+
|
674
|
+
gemspec_file = File.join(@tempdir, spec.spec_name)
|
675
|
+
|
676
|
+
File.open gemspec_file, 'w' do |gs|
|
677
|
+
gs.write spec.to_ruby
|
678
|
+
end
|
679
|
+
|
680
|
+
@cmd.options[:args] = [gemspec_file]
|
681
|
+
|
682
|
+
Gem.configuration.cert_expiration_length_days = 28
|
683
|
+
|
684
|
+
use_ui @ui do
|
685
|
+
Dir.chdir @tempdir do
|
686
|
+
@cmd.execute
|
687
|
+
end
|
688
|
+
end
|
689
|
+
|
690
|
+
output = @ui.output.split "\n"
|
691
|
+
assert_equal "INFO: Your certificate has expired, trying to re-sign it...", output.shift
|
692
|
+
assert_equal "INFO: Your cert: #{tmp_expired_cert_file } has been auto re-signed with the key: #{tmp_private_key_file}", output.shift
|
693
|
+
assert_match(/INFO: Your expired cert will be located at: .+\Wgem-public_cert\.pem\.expired\.[0-9]+/, output.shift)
|
694
|
+
end
|
695
|
+
|
696
|
+
def test_build_is_reproducible
|
697
|
+
epoch = ENV["SOURCE_DATE_EPOCH"]
|
698
|
+
new_epoch = Time.now.to_i.to_s
|
699
|
+
ENV["SOURCE_DATE_EPOCH"] = new_epoch
|
700
|
+
|
701
|
+
gem_file = File.basename(@gem.cache_file)
|
702
|
+
|
703
|
+
gemspec_file = File.join(@tempdir, @gem.spec_name)
|
704
|
+
File.write(gemspec_file, @gem.to_ruby)
|
705
|
+
@cmd.options[:args] = [gemspec_file]
|
706
|
+
|
707
|
+
util_test_build_gem @gem
|
708
|
+
|
709
|
+
build1_contents = File.read(gem_file)
|
710
|
+
|
711
|
+
# Guarantee the time has changed.
|
712
|
+
sleep 1 if Time.now.to_i == new_epoch
|
713
|
+
|
714
|
+
ENV["SOURCE_DATE_EPOCH"] = new_epoch
|
715
|
+
|
716
|
+
@ui = Gem::MockGemUi.new
|
717
|
+
@cmd.options[:args] = [gemspec_file]
|
718
|
+
|
719
|
+
util_test_build_gem @gem
|
720
|
+
|
721
|
+
build2_contents = File.read(gem_file)
|
722
|
+
|
723
|
+
assert_equal build1_contents, build2_contents
|
724
|
+
ensure
|
725
|
+
ENV["SOURCE_DATE_EPOCH"] = epoch
|
726
|
+
end
|
354
727
|
end
|