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
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "../vendored_thor"
|
4
4
|
module Bundler
|
5
5
|
class CLI::Plugin < Thor
|
6
6
|
desc "install PLUGINS", "Install the plugin from the source"
|
7
7
|
long_desc <<-D
|
8
|
-
Install plugins either from the rubygems source provided (with --source option) or from a git source provided with
|
8
|
+
Install plugins either from the rubygems source provided (with --source option) or from a git source provided with --git (for remote repos) or --local_git (for local repos). If no sources are provided, it uses Gem.sources
|
9
9
|
D
|
10
10
|
method_option "source", :type => :string, :default => nil, :banner =>
|
11
11
|
"URL of the RubyGems source to fetch the plugin from"
|
@@ -13,6 +13,8 @@ module Bundler
|
|
13
13
|
"The version of the plugin to fetch"
|
14
14
|
method_option "git", :type => :string, :default => nil, :banner =>
|
15
15
|
"URL of the git repo to fetch from"
|
16
|
+
method_option "local_git", :type => :string, :default => nil, :banner =>
|
17
|
+
"Path of the local git repo to fetch from"
|
16
18
|
method_option "branch", :type => :string, :default => nil, :banner =>
|
17
19
|
"The git branch to checkout"
|
18
20
|
method_option "ref", :type => :string, :default => nil, :banner =>
|
@@ -20,5 +22,20 @@ module Bundler
|
|
20
22
|
def install(*plugins)
|
21
23
|
Bundler::Plugin.install(plugins, options)
|
22
24
|
end
|
25
|
+
|
26
|
+
desc "uninstall PLUGINS", "Uninstall the plugins"
|
27
|
+
long_desc <<-D
|
28
|
+
Uninstall given list of plugins. To uninstall all the plugins, use -all option.
|
29
|
+
D
|
30
|
+
method_option "all", :type => :boolean, :default => nil, :banner =>
|
31
|
+
"Uninstall all the installed plugins. If no plugin is installed, then it does nothing."
|
32
|
+
def uninstall(*plugins)
|
33
|
+
Bundler::Plugin.uninstall(plugins, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "list", "List the installed plugins and available commands"
|
37
|
+
def list
|
38
|
+
Bundler::Plugin.list
|
39
|
+
end
|
23
40
|
end
|
24
41
|
end
|
@@ -29,11 +29,16 @@ module Bundler
|
|
29
29
|
|
30
30
|
FileUtils.rm_rf spec.full_gem_path
|
31
31
|
when Source::Git
|
32
|
+
if source.local?
|
33
|
+
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
|
34
|
+
next
|
35
|
+
end
|
36
|
+
|
32
37
|
source.remote!
|
33
38
|
if extension_cache_path = source.extension_cache_path(spec)
|
34
39
|
FileUtils.rm_rf extension_cache_path
|
35
40
|
end
|
36
|
-
FileUtils.rm_rf spec.extension_dir
|
41
|
+
FileUtils.rm_rf spec.extension_dir
|
37
42
|
FileUtils.rm_rf spec.full_gem_path
|
38
43
|
else
|
39
44
|
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
|
@@ -24,7 +24,7 @@ module Bundler
|
|
24
24
|
return unless spec
|
25
25
|
path = spec.full_gem_path
|
26
26
|
unless File.directory?(path)
|
27
|
-
Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at:"
|
27
|
+
return Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at: #{path}"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
return Bundler.ui.info(path)
|
@@ -53,7 +53,7 @@ module Bundler
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
|
56
|
+
private
|
57
57
|
|
58
58
|
def fetch_latest_specs
|
59
59
|
definition = Bundler.definition(true)
|
@@ -22,7 +22,7 @@ module Bundler
|
|
22
22
|
if Bundler.feature_flag.update_requires_all_flag?
|
23
23
|
raise InvalidOption, "To update everything, pass the `--all` flag."
|
24
24
|
end
|
25
|
-
SharedHelpers.major_deprecation
|
25
|
+
SharedHelpers.major_deprecation 3, "Pass --all to `bundle update` to update everything"
|
26
26
|
elsif !full_update && options[:all]
|
27
27
|
raise InvalidOption, "Cannot specify --all along with specific options."
|
28
28
|
end
|
@@ -58,24 +58,44 @@ module Bundler
|
|
58
58
|
Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
|
59
59
|
|
60
60
|
Bundler.definition.validate_runtime!
|
61
|
+
|
62
|
+
if locked_gems = Bundler.definition.locked_gems
|
63
|
+
previous_locked_info = locked_gems.specs.reduce({}) do |h, s|
|
64
|
+
h[s.name] = { :spec => s, :version => s.version, :source => s.source.to_s }
|
65
|
+
h
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
61
69
|
installer = Installer.install Bundler.root, Bundler.definition, opts
|
62
70
|
Bundler.load.cache if Bundler.app_cache.exist?
|
63
71
|
|
64
72
|
if CLI::Common.clean_after_install?
|
65
|
-
|
73
|
+
require_relative "clean"
|
66
74
|
Bundler::CLI::Clean.new(options).run
|
67
75
|
end
|
68
76
|
|
69
|
-
if locked_gems
|
77
|
+
if locked_gems
|
70
78
|
gems.each do |name|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
Bundler.
|
78
|
-
|
79
|
+
locked_info = previous_locked_info[name]
|
80
|
+
next unless locked_info
|
81
|
+
|
82
|
+
locked_spec = locked_info[:spec]
|
83
|
+
new_spec = Bundler.definition.specs[name].first
|
84
|
+
unless new_spec
|
85
|
+
unless locked_spec.match_platform(Bundler.local_platform)
|
86
|
+
Bundler.ui.warn "Bundler attempted to update #{name} but it was not considered because it is for a different platform from the current one"
|
87
|
+
end
|
88
|
+
|
89
|
+
next
|
90
|
+
end
|
91
|
+
|
92
|
+
locked_source = locked_info[:source]
|
93
|
+
new_source = new_spec.source.to_s
|
94
|
+
next if locked_source != new_source
|
95
|
+
|
96
|
+
new_version = new_spec.version
|
97
|
+
locked_version = locked_info[:version]
|
98
|
+
if new_version < locked_version
|
79
99
|
Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
|
80
100
|
elsif new_version == locked_version
|
81
101
|
Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
|
@@ -84,8 +104,10 @@ module Bundler
|
|
84
104
|
end
|
85
105
|
|
86
106
|
Bundler.ui.confirm "Bundle updated!"
|
87
|
-
Bundler::CLI::Common.output_without_groups_message
|
107
|
+
Bundler::CLI::Common.output_without_groups_message(:update)
|
88
108
|
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
109
|
+
|
110
|
+
Bundler::CLI::Common.output_fund_metadata_summary
|
89
111
|
end
|
90
112
|
end
|
91
113
|
end
|
@@ -13,16 +13,11 @@ module Bundler
|
|
13
13
|
|
14
14
|
class Error < StandardError; end
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
require_relative "compact_index_client/cache"
|
17
|
+
require_relative "compact_index_client/updater"
|
18
18
|
|
19
19
|
attr_reader :directory
|
20
20
|
|
21
|
-
# @return [Lambda] A lambda that takes an array of inputs and a block, and
|
22
|
-
# maps the inputs with the block in parallel.
|
23
|
-
#
|
24
|
-
attr_accessor :in_parallel
|
25
|
-
|
26
21
|
def initialize(directory, fetcher)
|
27
22
|
@directory = Pathname.new(directory)
|
28
23
|
@updater = Updater.new(fetcher)
|
@@ -31,7 +26,28 @@ module Bundler
|
|
31
26
|
@info_checksums_by_name = {}
|
32
27
|
@parsed_checksums = false
|
33
28
|
@mutex = Mutex.new
|
34
|
-
|
29
|
+
end
|
30
|
+
|
31
|
+
def execution_mode=(block)
|
32
|
+
Bundler::CompactIndexClient.debug { "execution_mode=" }
|
33
|
+
@endpoints = Set.new
|
34
|
+
|
35
|
+
@execution_mode = block
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Lambda] A lambda that takes an array of inputs and a block, and
|
39
|
+
# maps the inputs with the block in parallel.
|
40
|
+
#
|
41
|
+
def execution_mode
|
42
|
+
@execution_mode || sequentially
|
43
|
+
end
|
44
|
+
|
45
|
+
def sequential_execution_mode!
|
46
|
+
self.execution_mode = sequentially
|
47
|
+
end
|
48
|
+
|
49
|
+
def sequentially
|
50
|
+
@sequentially ||= lambda do |inputs, &blk|
|
35
51
|
inputs.map(&blk)
|
36
52
|
end
|
37
53
|
end
|
@@ -51,7 +67,7 @@ module Bundler
|
|
51
67
|
|
52
68
|
def dependencies(names)
|
53
69
|
Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
|
54
|
-
|
70
|
+
execution_mode.call(names) do |name|
|
55
71
|
update_info(name)
|
56
72
|
@cache.dependencies(name).map {|d| d.unshift(name) }
|
57
73
|
end.flatten(1)
|
@@ -71,7 +87,7 @@ module Bundler
|
|
71
87
|
@parsed_checksums = true
|
72
88
|
end
|
73
89
|
|
74
|
-
|
90
|
+
private
|
75
91
|
|
76
92
|
def update(local_path, remote_path)
|
77
93
|
Bundler::CompactIndexClient.debug { "update(#{local_path}, #{remote_path})" }
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "gem_parser"
|
4
|
+
|
3
5
|
module Bundler
|
4
6
|
class CompactIndexClient
|
5
7
|
class Cache
|
@@ -83,7 +85,7 @@ module Bundler
|
|
83
85
|
gem_line ? parse_gem(gem_line) : nil
|
84
86
|
end
|
85
87
|
|
86
|
-
|
88
|
+
private
|
87
89
|
|
88
90
|
def lines(path)
|
89
91
|
return [] unless path.file?
|
@@ -92,19 +94,9 @@ module Bundler
|
|
92
94
|
header ? lines[header + 1..-1] : lines
|
93
95
|
end
|
94
96
|
|
95
|
-
def parse_gem(
|
96
|
-
|
97
|
-
|
98
|
-
dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
|
99
|
-
dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
|
100
|
-
requirements = requirements ? requirements.map {|r| parse_dependency(r) } : []
|
101
|
-
[version, platform, dependencies, requirements]
|
102
|
-
end
|
103
|
-
|
104
|
-
def parse_dependency(string)
|
105
|
-
dependency = string.split(":")
|
106
|
-
dependency[-1] = dependency[-1].split("&") if dependency.size > 1
|
107
|
-
dependency
|
97
|
+
def parse_gem(line)
|
98
|
+
@dependency_parser ||= GemParser.new
|
99
|
+
@dependency_parser.parse(line)
|
108
100
|
end
|
109
101
|
|
110
102
|
def info_roots
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CompactIndexClient
|
5
|
+
if defined?(Gem::Resolver::APISet::GemParser)
|
6
|
+
GemParser = Gem::Resolver::APISet::GemParser
|
7
|
+
else
|
8
|
+
class GemParser
|
9
|
+
def parse(line)
|
10
|
+
version_and_platform, rest = line.split(" ", 2)
|
11
|
+
version, platform = version_and_platform.split("-", 2)
|
12
|
+
dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
|
13
|
+
dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
|
14
|
+
requirements = requirements ? requirements.map {|d| parse_dependency(d) } : []
|
15
|
+
[version, platform, dependencies, requirements]
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_dependency(string)
|
21
|
+
dependency = string.split(":")
|
22
|
+
dependency[-1] = dependency[-1].split("&") if dependency.size > 1
|
23
|
+
dependency
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require "stringio"
|
5
|
-
require "zlib"
|
3
|
+
require_relative "../vendored_fileutils"
|
6
4
|
|
7
5
|
module Bundler
|
8
6
|
class CompactIndexClient
|
@@ -22,13 +20,13 @@ module Bundler
|
|
22
20
|
|
23
21
|
def initialize(fetcher)
|
24
22
|
@fetcher = fetcher
|
25
|
-
|
23
|
+
require_relative "../vendored_tmpdir"
|
26
24
|
end
|
27
25
|
|
28
26
|
def update(local_path, remote_path, retrying = nil)
|
29
27
|
headers = {}
|
30
28
|
|
31
|
-
Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
|
29
|
+
Bundler::Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
|
32
30
|
local_temp_path = Pathname.new(local_temp_dir).join(local_path.basename)
|
33
31
|
|
34
32
|
# first try to fetch any new bytes on the existing file
|
@@ -45,29 +43,23 @@ module Bundler
|
|
45
43
|
else
|
46
44
|
"bytes=#{local_temp_path.size}-"
|
47
45
|
end
|
48
|
-
else
|
49
|
-
# Fastly ignores Range when Accept-Encoding: gzip is set
|
50
|
-
headers["Accept-Encoding"] = "gzip"
|
51
46
|
end
|
52
47
|
|
53
48
|
response = @fetcher.call(remote_path, headers)
|
54
49
|
return nil if response.is_a?(Net::HTTPNotModified)
|
55
50
|
|
56
51
|
content = response.body
|
57
|
-
if response["Content-Encoding"] == "gzip"
|
58
|
-
content = Zlib::GzipReader.new(StringIO.new(content)).read
|
59
|
-
end
|
60
52
|
|
61
53
|
SharedHelpers.filesystem_access(local_temp_path) do
|
62
54
|
if response.is_a?(Net::HTTPPartialContent) && local_temp_path.size.nonzero?
|
63
55
|
local_temp_path.open("a") {|f| f << slice_body(content, 1..-1) }
|
64
56
|
else
|
65
|
-
local_temp_path.open("
|
57
|
+
local_temp_path.open("wb") {|f| f << content }
|
66
58
|
end
|
67
59
|
end
|
68
60
|
|
69
|
-
|
70
|
-
if etag_for(local_temp_path) ==
|
61
|
+
etag = (response["ETag"] || "").gsub(%r{\AW/}, "")
|
62
|
+
if etag.length.zero? || etag_for(local_temp_path) == etag
|
71
63
|
SharedHelpers.filesystem_access(local_path) do
|
72
64
|
FileUtils.mv(local_temp_path, local_path)
|
73
65
|
end
|
@@ -75,7 +67,7 @@ module Bundler
|
|
75
67
|
end
|
76
68
|
|
77
69
|
if retrying
|
78
|
-
raise MisMatchedChecksumError.new(remote_path,
|
70
|
+
raise MisMatchedChecksumError.new(remote_path, etag, etag_for(local_temp_path))
|
79
71
|
end
|
80
72
|
|
81
73
|
update(local_path, remote_path, :retrying)
|
@@ -95,11 +87,7 @@ module Bundler
|
|
95
87
|
end
|
96
88
|
|
97
89
|
def slice_body(body, range)
|
98
|
-
|
99
|
-
body.byteslice(range)
|
100
|
-
else # pre-1.9.3
|
101
|
-
body.unpack("@#{range.first}a#{range.end + 1}").first
|
102
|
-
end
|
90
|
+
body.byteslice(range)
|
103
91
|
end
|
104
92
|
|
105
93
|
def checksum_for_file(path)
|
@@ -19,6 +19,7 @@ module Bundler
|
|
19
19
|
2.4
|
20
20
|
2.5
|
21
21
|
2.6
|
22
|
+
2.7
|
22
23
|
].freeze
|
23
24
|
|
24
25
|
KNOWN_MAJOR_VERSIONS = KNOWN_MINOR_VERSIONS.map {|v| v.split(".", 2).first }.uniq.freeze
|
@@ -37,28 +38,29 @@ module Bundler
|
|
37
38
|
].freeze
|
38
39
|
|
39
40
|
def ruby?
|
40
|
-
|
41
|
-
|
41
|
+
return true if Bundler::GemHelpers.generic_local_platform == Gem::Platform::RUBY
|
42
|
+
|
43
|
+
!mswin? && (RUBY_ENGINE == "ruby" || RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev" || RUBY_ENGINE == "truffleruby")
|
42
44
|
end
|
43
45
|
|
44
46
|
def mri?
|
45
|
-
!mswin? &&
|
47
|
+
!mswin? && RUBY_ENGINE == "ruby"
|
46
48
|
end
|
47
49
|
|
48
50
|
def rbx?
|
49
|
-
ruby? &&
|
51
|
+
ruby? && RUBY_ENGINE == "rbx"
|
50
52
|
end
|
51
53
|
|
52
54
|
def jruby?
|
53
|
-
|
55
|
+
RUBY_ENGINE == "jruby"
|
54
56
|
end
|
55
57
|
|
56
58
|
def maglev?
|
57
|
-
|
59
|
+
RUBY_ENGINE == "maglev"
|
58
60
|
end
|
59
61
|
|
60
62
|
def truffleruby?
|
61
|
-
|
63
|
+
RUBY_ENGINE == "truffleruby"
|
62
64
|
end
|
63
65
|
|
64
66
|
def mswin?
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
require "set"
|
3
|
+
require_relative "lockfile_parser"
|
5
4
|
|
6
5
|
module Bundler
|
7
6
|
class Definition
|
@@ -77,6 +76,7 @@ module Bundler
|
|
77
76
|
@locked_bundler_version = nil
|
78
77
|
@locked_ruby_version = nil
|
79
78
|
@locked_specs_incomplete_for_platform = false
|
79
|
+
@new_platform = nil
|
80
80
|
|
81
81
|
if lockfile && File.exist?(lockfile)
|
82
82
|
@lockfile_contents = Bundler.read_file(lockfile)
|
@@ -106,6 +106,17 @@ module Bundler
|
|
106
106
|
@locked_platforms = []
|
107
107
|
end
|
108
108
|
|
109
|
+
@locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
110
|
+
@disable_multisource = @locked_gem_sources.all?(&:disable_multisource?)
|
111
|
+
|
112
|
+
unless @disable_multisource
|
113
|
+
msg = "Your lockfile contains a single rubygems source section with multiple remotes, which is insecure. You should run `bundle update` or generate your lockfile from scratch."
|
114
|
+
|
115
|
+
Bundler::SharedHelpers.major_deprecation 2, msg
|
116
|
+
|
117
|
+
@sources.merged_gem_lockfile_sections!
|
118
|
+
end
|
119
|
+
|
109
120
|
@unlock[:gems] ||= []
|
110
121
|
@unlock[:sources] ||= []
|
111
122
|
@unlock[:ruby] ||= if @ruby_version && locked_ruby_version_object
|
@@ -113,7 +124,7 @@ module Bundler
|
|
113
124
|
end
|
114
125
|
@unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
|
115
126
|
|
116
|
-
add_current_platform unless Bundler.frozen_bundle?
|
127
|
+
add_current_platform unless current_ruby_platform_locked? || Bundler.frozen_bundle?
|
117
128
|
|
118
129
|
converge_path_sources_to_gemspec_sources
|
119
130
|
@path_changes = converge_paths
|
@@ -145,6 +156,10 @@ module Bundler
|
|
145
156
|
end
|
146
157
|
end
|
147
158
|
|
159
|
+
def disable_multisource?
|
160
|
+
@disable_multisource
|
161
|
+
end
|
162
|
+
|
148
163
|
def resolve_with_cache!
|
149
164
|
raise "Specs already loaded" if @specs
|
150
165
|
sources.cached!
|
@@ -152,7 +167,7 @@ module Bundler
|
|
152
167
|
end
|
153
168
|
|
154
169
|
def resolve_remotely!
|
155
|
-
|
170
|
+
return if @specs
|
156
171
|
@remote = true
|
157
172
|
sources.remote!
|
158
173
|
specs
|
@@ -167,7 +182,7 @@ module Bundler
|
|
167
182
|
def specs
|
168
183
|
@specs ||= begin
|
169
184
|
begin
|
170
|
-
specs = resolve.materialize(
|
185
|
+
specs = resolve.materialize(requested_dependencies)
|
171
186
|
rescue GemNotFound => e # Handle yanked gem
|
172
187
|
gem_name, gem_version = extract_gem_info(e)
|
173
188
|
locked_gem = @locked_specs[gem_name].last
|
@@ -194,10 +209,6 @@ module Bundler
|
|
194
209
|
@locked_specs - specs
|
195
210
|
end
|
196
211
|
|
197
|
-
def new_platform?
|
198
|
-
@new_platform
|
199
|
-
end
|
200
|
-
|
201
212
|
def missing_specs
|
202
213
|
missing = []
|
203
214
|
resolve.materialize(requested_dependencies, missing)
|
@@ -227,16 +238,29 @@ module Bundler
|
|
227
238
|
end
|
228
239
|
end
|
229
240
|
|
241
|
+
def requested_dependencies
|
242
|
+
groups = requested_groups
|
243
|
+
groups.map!(&:to_sym)
|
244
|
+
dependencies_for(groups)
|
245
|
+
end
|
246
|
+
|
230
247
|
def current_dependencies
|
231
|
-
dependencies.select
|
248
|
+
dependencies.select do |d|
|
249
|
+
d.should_include? && !d.gem_platforms(@platforms).empty?
|
250
|
+
end
|
232
251
|
end
|
233
252
|
|
234
253
|
def specs_for(groups)
|
235
|
-
deps =
|
236
|
-
deps.delete_if {|d| !d.should_include? }
|
254
|
+
deps = dependencies_for(groups)
|
237
255
|
specs.for(expand_dependencies(deps))
|
238
256
|
end
|
239
257
|
|
258
|
+
def dependencies_for(groups)
|
259
|
+
current_dependencies.reject do |d|
|
260
|
+
(d.groups & groups).empty?
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
240
264
|
# Resolve all the dependencies specified in Gemfile. It ensures that
|
241
265
|
# dependencies that have been already resolved via locked file and are fresh
|
242
266
|
# are reused when resolving dependencies
|
@@ -245,22 +269,18 @@ module Bundler
|
|
245
269
|
def resolve
|
246
270
|
@resolve ||= begin
|
247
271
|
last_resolve = converge_locked_specs
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
# filter out gems that _can_ be installed on multiple platforms, but don't need
|
262
|
-
# to be
|
263
|
-
resolve.for(expand_dependencies(dependencies, true), [], false, false, false)
|
272
|
+
if Bundler.frozen_bundle?
|
273
|
+
Bundler.ui.debug "Frozen, using resolution from the lockfile"
|
274
|
+
last_resolve
|
275
|
+
elsif !unlocking? && nothing_changed?
|
276
|
+
Bundler.ui.debug("Found no changes, using resolution from the lockfile")
|
277
|
+
last_resolve
|
278
|
+
else
|
279
|
+
# Run a resolve against the locally available gems
|
280
|
+
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
281
|
+
expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote)
|
282
|
+
Resolver.resolve(expanded_dependencies, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
283
|
+
end
|
264
284
|
end
|
265
285
|
end
|
266
286
|
|
@@ -312,12 +332,8 @@ module Bundler
|
|
312
332
|
sources.rubygems_sources.any? {|s| s.remotes.any? }
|
313
333
|
end
|
314
334
|
|
315
|
-
def has_local_dependencies?
|
316
|
-
!sources.path_sources.empty? || !sources.git_sources.empty?
|
317
|
-
end
|
318
|
-
|
319
335
|
def spec_git_paths
|
320
|
-
sources.git_sources.map {|s| s.path.
|
336
|
+
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
|
321
337
|
end
|
322
338
|
|
323
339
|
def groups
|
@@ -385,7 +401,7 @@ module Bundler
|
|
385
401
|
end
|
386
402
|
|
387
403
|
def to_lock
|
388
|
-
|
404
|
+
require_relative "lockfile_generator"
|
389
405
|
LockfileGenerator.generate(self)
|
390
406
|
end
|
391
407
|
|
@@ -396,12 +412,10 @@ module Bundler
|
|
396
412
|
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
397
413
|
|
398
414
|
unless explicit_flag
|
399
|
-
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
400
|
-
"bundle config
|
415
|
+
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
416
|
+
"bundle config unset frozen"
|
401
417
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
402
|
-
"bundle config
|
403
|
-
else
|
404
|
-
"bundle install --no-deployment"
|
418
|
+
"bundle config unset deployment"
|
405
419
|
end
|
406
420
|
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
407
421
|
"freeze \nby running `#{suggested_command}`."
|
@@ -450,9 +464,9 @@ module Bundler
|
|
450
464
|
@locked_deps.each {|name, d| both_sources[name][1] = d.source }
|
451
465
|
|
452
466
|
both_sources.each do |name, (dep, lock_source)|
|
453
|
-
next
|
467
|
+
next if lock_source.nil? || (dep && lock_source.can_lock?(dep))
|
454
468
|
gemfile_source_name = (dep && dep.source) || "no specified source"
|
455
|
-
lockfile_source_name = lock_source
|
469
|
+
lockfile_source_name = lock_source
|
456
470
|
changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
|
457
471
|
end
|
458
472
|
|
@@ -497,15 +511,11 @@ module Bundler
|
|
497
511
|
end
|
498
512
|
|
499
513
|
def validate_platforms!
|
500
|
-
return if
|
501
|
-
Bundler.rubygems.platforms.any? do |local_platform|
|
502
|
-
MatchPlatform.platforms_match?(bundle_platform, local_platform)
|
503
|
-
end
|
504
|
-
end
|
514
|
+
return if current_platform_locked?
|
505
515
|
|
506
516
|
raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
|
507
|
-
"but your local
|
508
|
-
"
|
517
|
+
"but your local platform is #{Bundler.local_platform}. " \
|
518
|
+
"Add the current platform to the lockfile with `bundle lock --add-platform #{Bundler.local_platform}` and try again."
|
509
519
|
end
|
510
520
|
|
511
521
|
def add_platform(platform)
|
@@ -518,10 +528,10 @@ module Bundler
|
|
518
528
|
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
519
529
|
end
|
520
530
|
|
521
|
-
def
|
522
|
-
|
523
|
-
|
524
|
-
|
531
|
+
def most_specific_locked_platform
|
532
|
+
@platforms.min_by do |bundle_platform|
|
533
|
+
platform_specificity_match(bundle_platform, local_platform)
|
534
|
+
end
|
525
535
|
end
|
526
536
|
|
527
537
|
def find_resolved_spec(current_spec)
|
@@ -535,6 +545,9 @@ module Bundler
|
|
535
545
|
attr_reader :sources
|
536
546
|
private :sources
|
537
547
|
|
548
|
+
attr_reader :locked_gem_sources
|
549
|
+
private :locked_gem_sources
|
550
|
+
|
538
551
|
def nothing_changed?
|
539
552
|
!@source_changes && !@dependency_changes && !@new_platform && !@path_changes && !@local_changes && !@locked_specs_incomplete_for_platform
|
540
553
|
end
|
@@ -543,7 +556,23 @@ module Bundler
|
|
543
556
|
@unlocking
|
544
557
|
end
|
545
558
|
|
546
|
-
|
559
|
+
private
|
560
|
+
|
561
|
+
def current_ruby_platform_locked?
|
562
|
+
return false unless generic_local_platform == Gem::Platform::RUBY
|
563
|
+
|
564
|
+
current_platform_locked?
|
565
|
+
end
|
566
|
+
|
567
|
+
def current_platform_locked?
|
568
|
+
@platforms.any? do |bundle_platform|
|
569
|
+
MatchPlatform.platforms_match?(bundle_platform, Bundler.local_platform)
|
570
|
+
end
|
571
|
+
end
|
572
|
+
|
573
|
+
def add_current_platform
|
574
|
+
add_platform(local_platform)
|
575
|
+
end
|
547
576
|
|
548
577
|
def change_reason
|
549
578
|
if unlocking?
|
@@ -583,7 +612,7 @@ module Bundler
|
|
583
612
|
deps_for_source = @dependencies.select {|s| s.source == source }
|
584
613
|
locked_deps_for_source = @locked_deps.values.select {|dep| dep.source == locked_source }
|
585
614
|
|
586
|
-
|
615
|
+
deps_for_source.uniq.sort != locked_deps_for_source.sort
|
587
616
|
end
|
588
617
|
|
589
618
|
def specs_for_source_changed?(source)
|
@@ -643,21 +672,20 @@ module Bundler
|
|
643
672
|
end
|
644
673
|
|
645
674
|
def converge_rubygems_sources
|
646
|
-
return false if
|
675
|
+
return false if disable_multisource?
|
647
676
|
|
648
|
-
|
677
|
+
return false if locked_gem_sources.empty?
|
649
678
|
|
650
|
-
# Get the RubyGems sources from the Gemfile.lock
|
651
|
-
locked_gem_sources = @locked_sources.select {|s| s.is_a?(Source::Rubygems) }
|
652
679
|
# Get the RubyGems remotes from the Gemfile
|
653
680
|
actual_remotes = sources.rubygems_remotes
|
681
|
+
return false if actual_remotes.empty?
|
682
|
+
|
683
|
+
changes = false
|
654
684
|
|
655
685
|
# If there is a RubyGems source in both
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
660
|
-
end
|
686
|
+
locked_gem_sources.each do |locked_gem|
|
687
|
+
# Merge the remotes from the Gemfile into the Gemfile.lock
|
688
|
+
changes |= locked_gem.replace_remotes(actual_remotes, Bundler.settings[:allow_deployment_source_credential_changes])
|
661
689
|
end
|
662
690
|
|
663
691
|
changes
|
@@ -700,9 +728,6 @@ module Bundler
|
|
700
728
|
elsif dep.source
|
701
729
|
dep.source = sources.get(dep.source)
|
702
730
|
end
|
703
|
-
if dep.source.is_a?(Source::Gemspec)
|
704
|
-
dep.platforms.concat(@platforms.map {|p| Dependency::REVERSE_PLATFORM_MAP[p] }.flatten(1)).uniq!
|
705
|
-
end
|
706
731
|
end
|
707
732
|
|
708
733
|
changes = false
|
@@ -782,7 +807,7 @@ module Bundler
|
|
782
807
|
|
783
808
|
# Path sources have special logic
|
784
809
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
785
|
-
|
810
|
+
new_specs = begin
|
786
811
|
s.source.specs
|
787
812
|
rescue PathError, GitError
|
788
813
|
# if we won't need the source (according to the lockfile),
|
@@ -794,25 +819,21 @@ module Bundler
|
|
794
819
|
raise
|
795
820
|
end
|
796
821
|
|
797
|
-
|
822
|
+
new_spec = new_specs[s].first
|
798
823
|
|
799
824
|
# If the spec is no longer in the path source, unlock it. This
|
800
825
|
# commonly happens if the version changed in the gemspec
|
801
|
-
next unless
|
826
|
+
next unless new_spec
|
802
827
|
|
803
|
-
|
804
|
-
runtime_dependencies = s.dependencies.select {|d| d.type != :development }
|
805
|
-
# If the dependencies of the path source have changed, unlock it
|
806
|
-
next unless runtime_dependencies.sort == deps2.sort
|
828
|
+
s.dependencies.replace(new_spec.dependencies)
|
807
829
|
end
|
808
830
|
|
809
831
|
converged << s
|
810
832
|
end
|
811
833
|
|
812
834
|
resolve = SpecSet.new(converged)
|
813
|
-
|
814
|
-
|
815
|
-
resolve = resolve.for(expanded_deps, @unlock[:gems], false, false, false)
|
835
|
+
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(requested_dependencies & deps), @unlock[:gems], true, true)
|
836
|
+
resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
|
816
837
|
diff = nil
|
817
838
|
|
818
839
|
# Now, we unlock any sources that do not have anymore gems pinned to it
|
@@ -839,71 +860,47 @@ module Bundler
|
|
839
860
|
@locked_specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
840
861
|
end
|
841
862
|
|
842
|
-
# This list of dependencies is only used in #resolve, so it's OK to add
|
843
|
-
# the metadata dependencies here
|
844
|
-
def expanded_dependencies
|
845
|
-
@expanded_dependencies ||= begin
|
846
|
-
expand_dependencies(dependencies + metadata_dependencies, @remote)
|
847
|
-
end
|
848
|
-
end
|
849
|
-
|
850
863
|
def metadata_dependencies
|
851
864
|
@metadata_dependencies ||= begin
|
852
|
-
ruby_versions =
|
853
|
-
if ruby_versions.empty? || !@ruby_version.exact?
|
854
|
-
concat_ruby_version_requirements(RubyVersion.system)
|
855
|
-
concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
|
856
|
-
end
|
865
|
+
ruby_versions = ruby_version_requirements(@ruby_version)
|
857
866
|
[
|
858
|
-
Dependency.new("
|
859
|
-
Dependency.new("
|
867
|
+
Dependency.new("Ruby\0", ruby_versions),
|
868
|
+
Dependency.new("RubyGems\0", Gem::VERSION),
|
860
869
|
]
|
861
870
|
end
|
862
871
|
end
|
863
872
|
|
864
|
-
def
|
865
|
-
return
|
873
|
+
def ruby_version_requirements(ruby_version)
|
874
|
+
return [] unless ruby_version
|
866
875
|
if ruby_version.patchlevel
|
867
|
-
|
876
|
+
[ruby_version.to_gem_version_with_patchlevel]
|
868
877
|
else
|
869
|
-
|
878
|
+
ruby_version.versions.map do |version|
|
870
879
|
requirement = Gem::Requirement.new(version)
|
871
880
|
if requirement.exact?
|
872
881
|
"~> #{version}.0"
|
873
882
|
else
|
874
883
|
requirement
|
875
884
|
end
|
876
|
-
end
|
885
|
+
end
|
877
886
|
end
|
878
887
|
end
|
879
888
|
|
880
889
|
def expand_dependencies(dependencies, remote = false)
|
881
|
-
sorted_platforms = Resolver.sort_platforms(@platforms)
|
882
890
|
deps = []
|
883
891
|
dependencies.each do |dep|
|
884
892
|
dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
|
885
|
-
next
|
886
|
-
|
887
|
-
|
888
|
-
mapped_platforms = dep.platforms.map {|p| Dependency::PLATFORM_MAP[p] }
|
889
|
-
Bundler.ui.warn \
|
890
|
-
"The dependency #{dep} will be unused by any of the platforms Bundler is installing for. " \
|
891
|
-
"Bundler is installing for #{@platforms.join ", "} but the dependency " \
|
892
|
-
"is only for #{mapped_platforms.join ", "}. " \
|
893
|
-
"To add those platforms to the bundle, " \
|
894
|
-
"run `bundle lock --add-platform #{mapped_platforms.join " "}`."
|
895
|
-
end
|
896
|
-
platforms.each do |p|
|
897
|
-
deps << DepProxy.new(dep, p) if remote || p == generic_local_platform
|
898
|
-
end
|
893
|
+
next unless remote || dep.current_platform?
|
894
|
+
target_platforms = dep.gem_platforms(remote ? @platforms : [generic_local_platform])
|
895
|
+
deps += expand_dependency_with_platforms(dep, target_platforms)
|
899
896
|
end
|
900
897
|
deps
|
901
898
|
end
|
902
899
|
|
903
|
-
def
|
904
|
-
|
905
|
-
|
906
|
-
|
900
|
+
def expand_dependency_with_platforms(dep, platforms)
|
901
|
+
platforms.map do |p|
|
902
|
+
DepProxy.get_proxy(dep, p)
|
903
|
+
end
|
907
904
|
end
|
908
905
|
|
909
906
|
def source_requirements
|
@@ -913,29 +910,18 @@ module Bundler
|
|
913
910
|
# Record the specs available in each gem's source, so that those
|
914
911
|
# specs will be available later when the resolver knows where to
|
915
912
|
# look for that gemspec (or its dependencies)
|
916
|
-
|
917
|
-
source_requirements = { :default => default }
|
918
|
-
default = nil unless Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
919
|
-
dependencies.each do |dep|
|
920
|
-
next unless source = dep.source || default
|
921
|
-
source_requirements[dep.name] = source
|
922
|
-
end
|
913
|
+
source_requirements = { :default => sources.default_source }.merge(dependency_source_requirements)
|
923
914
|
metadata_dependencies.each do |dep|
|
924
915
|
source_requirements[dep.name] = sources.metadata_source
|
925
916
|
end
|
917
|
+
source_requirements[:global] = index unless Bundler.feature_flag.disable_multisource?
|
918
|
+
source_requirements[:default_bundler] = source_requirements["bundler"] || source_requirements[:default]
|
926
919
|
source_requirements["bundler"] = sources.metadata_source # needs to come last to override
|
927
920
|
source_requirements
|
928
921
|
end
|
929
922
|
|
930
923
|
def pinned_spec_names(skip = nil)
|
931
|
-
|
932
|
-
default = Bundler.feature_flag.lockfile_uses_separate_rubygems_sources? && sources.default_source
|
933
|
-
@dependencies.each do |dep|
|
934
|
-
next unless dep_source = dep.source || default
|
935
|
-
next if dep_source == skip
|
936
|
-
pinned_names << dep.name
|
937
|
-
end
|
938
|
-
pinned_names
|
924
|
+
dependency_source_requirements.reject {|_, source| source == skip }.keys
|
939
925
|
end
|
940
926
|
|
941
927
|
def requested_groups
|
@@ -977,9 +963,12 @@ module Bundler
|
|
977
963
|
dependencies_by_name = dependencies.inject({}) {|memo, dep| memo.update(dep.name => dep) }
|
978
964
|
@locked_gems.specs.reduce({}) do |requirements, locked_spec|
|
979
965
|
name = locked_spec.name
|
980
|
-
|
966
|
+
dependency = dependencies_by_name[name]
|
967
|
+
next requirements unless dependency
|
968
|
+
next requirements if @locked_gems.dependencies[name] != dependency
|
969
|
+
next requirements if dependency.source.is_a?(Source::Path)
|
981
970
|
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
982
|
-
requirements[name] = DepProxy.
|
971
|
+
requirements[name] = DepProxy.get_proxy(dep, locked_spec.platform)
|
983
972
|
requirements
|
984
973
|
end.values
|
985
974
|
end
|
@@ -989,5 +978,17 @@ module Bundler
|
|
989
978
|
|
990
979
|
Bundler.settings[:allow_deployment_source_credential_changes] && source.equivalent_remotes?(sources.rubygems_remotes)
|
991
980
|
end
|
981
|
+
|
982
|
+
def dependency_source_requirements
|
983
|
+
@dependency_source_requirements ||= begin
|
984
|
+
source_requirements = {}
|
985
|
+
default = sources.default_source
|
986
|
+
dependencies.each do |dep|
|
987
|
+
dep_source = dep.source || default
|
988
|
+
source_requirements[dep.name] = dep_source
|
989
|
+
end
|
990
|
+
source_requirements
|
991
|
+
end
|
992
|
+
end
|
992
993
|
end
|
993
994
|
end
|