rubygems-update 3.5.5 → 3.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +606 -1
- data/CODE_OF_CONDUCT.md +79 -28
- data/Manifest.txt +114 -73
- data/README.md +16 -11
- data/bundler/CHANGELOG.md +506 -6
- data/bundler/README.md +2 -2
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/checksum.rb +22 -12
- data/bundler/lib/bundler/cli/add.rb +3 -1
- data/bundler/lib/bundler/cli/binstubs.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +3 -3
- data/bundler/lib/bundler/cli/console.rb +8 -10
- data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
- data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
- data/bundler/lib/bundler/cli/doctor.rb +27 -151
- data/bundler/lib/bundler/cli/exec.rb +1 -0
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +13 -17
- data/bundler/lib/bundler/cli/info.rb +6 -6
- data/bundler/lib/bundler/cli/inject.rb +3 -3
- data/bundler/lib/bundler/cli/install.rb +14 -5
- data/bundler/lib/bundler/cli/issue.rb +3 -3
- data/bundler/lib/bundler/cli/lock.rb +32 -11
- data/bundler/lib/bundler/cli/outdated.rb +22 -22
- data/bundler/lib/bundler/cli/plugin.rb +3 -2
- data/bundler/lib/bundler/cli/pristine.rb +1 -1
- data/bundler/lib/bundler/cli/show.rb +3 -3
- data/bundler/lib/bundler/cli.rb +51 -107
- data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +2 -12
- data/bundler/lib/bundler/compact_index_client.rb +51 -80
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +23 -33
- data/bundler/lib/bundler/definition.rb +485 -313
- data/bundler/lib/bundler/dependency.rb +92 -46
- data/bundler/lib/bundler/dsl.rb +135 -101
- data/bundler/lib/bundler/endpoint_specification.rb +30 -3
- data/bundler/lib/bundler/env.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +5 -23
- data/bundler/lib/bundler/errors.rb +53 -5
- data/bundler/lib/bundler/feature_flag.rb +3 -6
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/downloader.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +14 -7
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +1 -1
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_helpers.rb +36 -19
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- data/bundler/lib/bundler/injector.rb +14 -16
- data/bundler/lib/bundler/inline.rb +42 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
- data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
- data/bundler/lib/bundler/installer/standalone.rb +2 -5
- data/bundler/lib/bundler/installer.rb +17 -41
- data/bundler/lib/bundler/lazy_specification.rb +117 -46
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +18 -7
- data/bundler/lib/bundler/man/bundle-add.1 +44 -27
- data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
- data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
- data/bundler/lib/bundler/man/bundle-check.1 +7 -5
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
- data/bundler/lib/bundler/man/bundle-config.1 +11 -15
- data/bundler/lib/bundler/man/bundle-config.1.ronn +12 -15
- data/bundler/lib/bundler/man/bundle-console.1 +4 -6
- data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
- data/bundler/lib/bundler/man/bundle-doctor.1 +4 -4
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
- data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +25 -7
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +38 -6
- data/bundler/lib/bundler/man/bundle-help.1 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1 +7 -4
- data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
- data/bundler/lib/bundler/man/bundle-init.1 +5 -5
- data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
- data/bundler/lib/bundler/man/bundle-inject.1 +12 -4
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +9 -1
- data/bundler/lib/bundler/man/bundle-install.1 +19 -16
- data/bundler/lib/bundler/man/bundle-install.1.ronn +24 -20
- data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
- data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
- data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-list.1 +3 -3
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +4 -4
- data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
- data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
- data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -4
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +15 -9
- data/bundler/lib/bundler/man/bundle-update.1.ronn +14 -6
- data/bundler/lib/bundler/man/bundle-version.1 +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle.1 +3 -3
- data/bundler/lib/bundler/man/gemfile.5 +7 -5
- data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +3 -3
- data/bundler/lib/bundler/plugin/api/source.rb +5 -4
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +5 -1
- data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
- data/bundler/lib/bundler/plugin/installer.rb +37 -17
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +21 -2
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +6 -1
- data/bundler/lib/bundler/resolver/base.rb +14 -3
- data/bundler/lib/bundler/resolver/candidate.rb +18 -27
- data/bundler/lib/bundler/resolver/package.rb +20 -3
- data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
- data/bundler/lib/bundler/resolver/strategy.rb +40 -0
- data/bundler/lib/bundler/resolver.rb +114 -50
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_dsl.rb +12 -3
- data/bundler/lib/bundler/ruby_version.rb +7 -1
- data/bundler/lib/bundler/rubygems_ext.rb +282 -125
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +29 -67
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +27 -7
- data/bundler/lib/bundler/settings.rb +32 -21
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +39 -21
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +23 -6
- data/bundler/lib/bundler/source/git.rb +113 -41
- data/bundler/lib/bundler/source/metadata.rb +4 -3
- data/bundler/lib/bundler/source/path.rb +7 -18
- data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
- data/bundler/lib/bundler/source/rubygems.rb +54 -48
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/source_list.rb +53 -7
- data/bundler/lib/bundler/spec_set.rb +187 -88
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +15 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -7
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +24 -2
- data/bundler/lib/bundler/ui/silent.rb +12 -1
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +68 -30
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
- data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
- data/bundler/lib/bundler/vendored_net_http.rb +20 -5
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +7 -3
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +89 -51
- data/{CONTRIBUTING.md → doc/rubygems/CONTRIBUTING.md} +10 -14
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +81 -12
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +43 -10
- data/lib/rubygems/bundler_version_finder.rb +1 -1
- data/lib/rubygems/command.rb +1 -4
- data/lib/rubygems/command_manager.rb +5 -6
- data/lib/rubygems/commands/build_command.rb +2 -11
- data/lib/rubygems/commands/cleanup_command.rb +3 -13
- data/lib/rubygems/commands/contents_command.rb +17 -10
- data/lib/rubygems/commands/environment_command.rb +5 -0
- data/lib/rubygems/commands/exec_command.rb +18 -11
- data/lib/rubygems/commands/fetch_command.rb +14 -0
- data/lib/rubygems/commands/help_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +0 -4
- data/lib/rubygems/commands/pristine_command.rb +30 -17
- data/lib/rubygems/commands/push_command.rb +31 -6
- data/lib/rubygems/commands/rdoc_command.rb +3 -10
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/setup_command.rb +11 -16
- data/lib/rubygems/commands/sources_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +9 -4
- data/lib/rubygems/commands/unpack_command.rb +0 -6
- data/lib/rubygems/commands/update_command.rb +10 -17
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +6 -6
- data/lib/rubygems/dependency.rb +12 -16
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +79 -77
- data/lib/rubygems/errors.rb +2 -1
- data/lib/rubygems/exceptions.rb +2 -9
- data/lib/rubygems/ext/builder.rb +21 -8
- data/lib/rubygems/ext/cargo_builder.rb +12 -26
- data/lib/rubygems/ext/cmake_builder.rb +7 -2
- data/lib/rubygems/ext/configure_builder.rb +7 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
- data/lib/rubygems/ext/rake_builder.rb +7 -4
- data/lib/rubygems/gem_runner.rb +9 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +1 -1
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
- data/lib/rubygems/gemcutter_utilities.rb +52 -26
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_update_options.rb +5 -0
- data/lib/rubygems/installer.rb +31 -40
- data/lib/rubygems/local_remote_options.rb +8 -8
- data/lib/rubygems/package/tar_header.rb +31 -4
- data/lib/rubygems/package/tar_reader/entry.rb +1 -5
- data/lib/rubygems/package/tar_writer.rb +5 -4
- data/lib/rubygems/package.rb +13 -8
- data/lib/rubygems/platform.rb +7 -5
- data/lib/rubygems/psych_tree.rb +4 -0
- data/lib/rubygems/query_utils.rb +2 -2
- data/lib/rubygems/rdoc.rb +16 -3
- data/lib/rubygems/remote_fetcher.rb +3 -4
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +1 -1
- data/lib/rubygems/requirement.rb +16 -12
- data/lib/rubygems/resolver/activation_request.rb +1 -1
- data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
- data/lib/rubygems/resolver/api_set.rb +13 -8
- data/lib/rubygems/resolver/best_set.rb +0 -28
- data/lib/rubygems/resolver/composed_set.rb +3 -3
- data/lib/rubygems/resolver/git_set.rb +0 -1
- data/lib/rubygems/resolver/index_set.rb +2 -2
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +7 -7
- data/lib/rubygems/s3_uri_signer.rb +3 -3
- data/lib/rubygems/safe_marshal/reader.rb +31 -14
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
- data/lib/rubygems/safe_yaml.rb +10 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +22 -17
- data/lib/rubygems/source/installed.rb +3 -1
- data/lib/rubygems/source/local.rb +8 -4
- data/lib/rubygems/source/specific_file.rb +5 -3
- data/lib/rubygems/source.rb +10 -8
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +107 -180
- data/lib/rubygems/specification_policy.rb +33 -13
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +32 -10
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/uninstaller.rb +42 -22
- data/lib/rubygems/uri.rb +6 -6
- data/lib/rubygems/util/licenses.rb +97 -1
- data/lib/rubygems/util.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +135 -51
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
- data/lib/rubygems/vendor/optparse/COPYING +56 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +117 -49
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/.document +1 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/vendor/tsort/.document +1 -0
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- data/lib/rubygems/vendor/uri/.document +1 -0
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/lib/rubygems/vendored_molinillo.rb +3 -0
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_securerandom.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/version.rb +26 -9
- data/lib/rubygems/yaml_serializer.rb +12 -7
- data/lib/rubygems.rb +82 -47
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +131 -86
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/net-http/LICENSE.txt +0 -22
- data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
- data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo.rb +0 -3
- data/lib/rubygems/shellwords.rb +0 -3
- data/lib/rubygems/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort.rb +0 -3
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{lib/rubygems/net-http → bundler/lib/bundler/vendor/securerandom}/.document +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{bundler → doc/bundler}/UPGRADING.md +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/{net-protocol → vendor/molinillo}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
- /data/lib/rubygems/{optparse → vendor/net-http}/.document +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
- /data/lib/rubygems/{resolv → vendor/net-protocol}/.document +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
- /data/lib/rubygems/{resolver/molinillo → vendor/optparse}/.document +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/lib/rubygems/{timeout → vendor/resolv}/.document +0 -0
- /data/lib/rubygems/{tsort → vendor/securerandom}/.document +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
|
@@ -2,50 +2,92 @@
|
|
|
2
2
|
|
|
3
3
|
require "rubygems/dependency"
|
|
4
4
|
require_relative "shared_helpers"
|
|
5
|
-
require_relative "rubygems_ext"
|
|
6
5
|
|
|
7
6
|
module Bundler
|
|
8
7
|
class Dependency < Gem::Dependency
|
|
9
|
-
attr_reader :autorequire
|
|
10
|
-
attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref
|
|
11
|
-
|
|
12
|
-
ALL_RUBY_VERSIONS = (18..27).to_a.concat((30..34).to_a).freeze
|
|
13
|
-
PLATFORM_MAP = {
|
|
14
|
-
ruby: [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
|
|
15
|
-
mri: [Gem::Platform::RUBY, ALL_RUBY_VERSIONS],
|
|
16
|
-
rbx: [Gem::Platform::RUBY],
|
|
17
|
-
truffleruby: [Gem::Platform::RUBY],
|
|
18
|
-
jruby: [Gem::Platform::JAVA, [18, 19]],
|
|
19
|
-
windows: [Gem::Platform::WINDOWS, ALL_RUBY_VERSIONS],
|
|
20
|
-
# deprecated
|
|
21
|
-
mswin: [Gem::Platform::MSWIN, ALL_RUBY_VERSIONS],
|
|
22
|
-
mswin64: [Gem::Platform::MSWIN64, ALL_RUBY_VERSIONS - [18]],
|
|
23
|
-
mingw: [Gem::Platform::MINGW, ALL_RUBY_VERSIONS],
|
|
24
|
-
x64_mingw: [Gem::Platform::X64_MINGW, ALL_RUBY_VERSIONS - [18, 19]],
|
|
25
|
-
}.each_with_object({}) do |(platform, spec), hash|
|
|
26
|
-
hash[platform] = spec[0]
|
|
27
|
-
spec[1]&.each {|version| hash[:"#{platform}_#{version}"] = spec[0] }
|
|
28
|
-
end.freeze
|
|
29
|
-
|
|
30
8
|
def initialize(name, version, options = {}, &blk)
|
|
31
9
|
type = options["type"] || :runtime
|
|
32
10
|
super(name, version, type)
|
|
33
11
|
|
|
34
|
-
@
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
@
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
@
|
|
43
|
-
|
|
44
|
-
@
|
|
45
|
-
|
|
46
|
-
|
|
12
|
+
@options = options
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def groups
|
|
16
|
+
@groups ||= Array(@options["group"] || :default).map(&:to_sym)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def source
|
|
20
|
+
return @source if defined?(@source)
|
|
21
|
+
|
|
22
|
+
@source = @options["source"]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def path
|
|
26
|
+
return @path if defined?(@path)
|
|
27
|
+
|
|
28
|
+
@path = @options["path"]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def git
|
|
32
|
+
return @git if defined?(@git)
|
|
47
33
|
|
|
48
|
-
@
|
|
34
|
+
@git = @options["git"]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def github
|
|
38
|
+
return @github if defined?(@github)
|
|
39
|
+
|
|
40
|
+
@github = @options["github"]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def branch
|
|
44
|
+
return @branch if defined?(@branch)
|
|
45
|
+
|
|
46
|
+
@branch = @options["branch"]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def ref
|
|
50
|
+
return @ref if defined?(@ref)
|
|
51
|
+
|
|
52
|
+
@ref = @options["ref"]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def glob
|
|
56
|
+
return @glob if defined?(@glob)
|
|
57
|
+
|
|
58
|
+
@glob = @options["glob"]
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def platforms
|
|
62
|
+
@platforms ||= Array(@options["platforms"])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def env
|
|
66
|
+
return @env if defined?(@env)
|
|
67
|
+
|
|
68
|
+
@env = @options["env"]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def should_include
|
|
72
|
+
@should_include ||= @options.fetch("should_include", true)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def gemfile
|
|
76
|
+
return @gemfile if defined?(@gemfile)
|
|
77
|
+
|
|
78
|
+
@gemfile = @options["gemfile"]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def force_ruby_platform
|
|
82
|
+
return @force_ruby_platform if defined?(@force_ruby_platform)
|
|
83
|
+
|
|
84
|
+
@force_ruby_platform = @options["force_ruby_platform"]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def autorequire
|
|
88
|
+
return @autorequire if defined?(@autorequire)
|
|
89
|
+
|
|
90
|
+
@autorequire = Array(@options["require"] || []) if @options.key?("require")
|
|
49
91
|
end
|
|
50
92
|
|
|
51
93
|
RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze
|
|
@@ -55,37 +97,41 @@ module Bundler
|
|
|
55
97
|
# passed in the `valid_platforms` parameter
|
|
56
98
|
def gem_platforms(valid_platforms)
|
|
57
99
|
return RUBY_PLATFORM_ARRAY if force_ruby_platform
|
|
58
|
-
return valid_platforms if
|
|
100
|
+
return valid_platforms if platforms.empty?
|
|
59
101
|
|
|
60
102
|
valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
|
|
61
103
|
end
|
|
62
104
|
|
|
63
105
|
def expanded_platforms
|
|
64
|
-
@expanded_platforms ||=
|
|
106
|
+
@expanded_platforms ||= platforms.filter_map {|pl| CurrentRuby::PLATFORM_MAP[pl] }.flatten.uniq
|
|
65
107
|
end
|
|
66
108
|
|
|
67
109
|
def should_include?
|
|
68
|
-
|
|
110
|
+
should_include && current_env? && current_platform?
|
|
69
111
|
end
|
|
70
112
|
|
|
71
113
|
def gemspec_dev_dep?
|
|
72
|
-
|
|
114
|
+
@gemspec_dev_dep ||= @options.fetch("gemspec_dev_dep", false)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def gemfile_dep?
|
|
118
|
+
!gemspec_dev_dep?
|
|
73
119
|
end
|
|
74
120
|
|
|
75
121
|
def current_env?
|
|
76
|
-
return true unless
|
|
77
|
-
if
|
|
78
|
-
|
|
122
|
+
return true unless env
|
|
123
|
+
if env.is_a?(Hash)
|
|
124
|
+
env.all? do |key, val|
|
|
79
125
|
ENV[key.to_s] && (val.is_a?(String) ? ENV[key.to_s] == val : ENV[key.to_s] =~ val)
|
|
80
126
|
end
|
|
81
127
|
else
|
|
82
|
-
ENV[
|
|
128
|
+
ENV[env.to_s]
|
|
83
129
|
end
|
|
84
130
|
end
|
|
85
131
|
|
|
86
132
|
def current_platform?
|
|
87
|
-
return true if
|
|
88
|
-
|
|
133
|
+
return true if platforms.empty?
|
|
134
|
+
platforms.any? do |p|
|
|
89
135
|
Bundler.current_ruby.send("#{p}?")
|
|
90
136
|
end
|
|
91
137
|
end
|
data/bundler/lib/bundler/dsl.rb
CHANGED
|
@@ -13,12 +13,13 @@ module Bundler
|
|
|
13
13
|
builder.to_definition(lockfile, unlock)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
VALID_PLATFORMS = Bundler::
|
|
16
|
+
VALID_PLATFORMS = Bundler::CurrentRuby::PLATFORM_MAP.keys.freeze
|
|
17
17
|
|
|
18
18
|
VALID_KEYS = %w[group groups git path glob name branch ref tag require submodules
|
|
19
|
-
platform platforms
|
|
19
|
+
platform platforms source install_if force_ruby_platform].freeze
|
|
20
20
|
|
|
21
21
|
GITHUB_PULL_REQUEST_URL = %r{\Ahttps://github\.com/([A-Za-z0-9_\-\.]+/[A-Za-z0-9_\-\.]+)/pull/(\d+)\z}
|
|
22
|
+
GITLAB_MERGE_REQUEST_URL = %r{\Ahttps://gitlab\.com/([A-Za-z0-9_\-\./]+)/-/merge_requests/(\d+)\z}
|
|
22
23
|
|
|
23
24
|
attr_reader :gemspecs, :gemfile
|
|
24
25
|
attr_accessor :dependencies
|
|
@@ -41,20 +42,20 @@ module Bundler
|
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
def eval_gemfile(gemfile, contents = nil)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
45
|
+
with_gemfile(gemfile) do |current_gemfile|
|
|
46
|
+
contents ||= Bundler.read_file(current_gemfile)
|
|
47
|
+
instance_eval(contents, current_gemfile, 1)
|
|
48
|
+
rescue GemfileEvalError => e
|
|
49
|
+
message = "There was an error evaluating `#{File.basename current_gemfile}`: #{e.message}"
|
|
50
|
+
raise DSLError.new(message, current_gemfile, e.backtrace, contents)
|
|
51
|
+
rescue GemfileError, InvalidArgumentError, InvalidOption, DeprecatedError, ScriptError => e
|
|
52
|
+
message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}"
|
|
53
|
+
raise DSLError.new(message, current_gemfile, e.backtrace, contents)
|
|
54
|
+
rescue StandardError => e
|
|
55
|
+
raise unless e.backtrace_locations.first.path == current_gemfile
|
|
56
|
+
message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}"
|
|
57
|
+
raise DSLError.new(message, current_gemfile, e.backtrace, contents)
|
|
58
|
+
end
|
|
58
59
|
end
|
|
59
60
|
|
|
60
61
|
def gemspec(opts = nil)
|
|
@@ -65,7 +66,7 @@ module Bundler
|
|
|
65
66
|
development_group = opts[:development_group] || :development
|
|
66
67
|
expanded_path = gemfile_root.join(path)
|
|
67
68
|
|
|
68
|
-
gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).
|
|
69
|
+
gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).filter_map {|g| Bundler.load_gemspec(g) }
|
|
69
70
|
gemspecs.reject! {|s| s.name != name } if name
|
|
70
71
|
specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
|
|
71
72
|
|
|
@@ -76,12 +77,12 @@ module Bundler
|
|
|
76
77
|
|
|
77
78
|
@gemspecs << spec
|
|
78
79
|
|
|
79
|
-
|
|
80
|
+
path path, "glob" => glob, "name" => spec.name, "gemspec" => spec do
|
|
81
|
+
add_dependency spec.name
|
|
82
|
+
end
|
|
80
83
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
gem dep.name, *(dep.requirement.as_list + [type: :development])
|
|
84
|
-
end
|
|
84
|
+
spec.development_dependencies.each do |dep|
|
|
85
|
+
add_dependency dep.name, dep.requirement.as_list, "gemspec_dev_dep" => true, "group" => development_group
|
|
85
86
|
end
|
|
86
87
|
when 0
|
|
87
88
|
raise InvalidOption, "There are no gemspecs at #{expanded_path}"
|
|
@@ -93,63 +94,11 @@ module Bundler
|
|
|
93
94
|
|
|
94
95
|
def gem(name, *args)
|
|
95
96
|
options = args.last.is_a?(Hash) ? args.pop.dup : {}
|
|
96
|
-
options["gemfile"] = @gemfile
|
|
97
97
|
version = args || [">= 0"]
|
|
98
98
|
|
|
99
99
|
normalize_options(name, version, options)
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
# if there's already a dependency with this name we try to prefer one
|
|
104
|
-
if current = @dependencies.find {|d| d.name == dep.name }
|
|
105
|
-
if current.requirement != dep.requirement
|
|
106
|
-
current_requirement_open = current.requirements_list.include?(">= 0")
|
|
107
|
-
|
|
108
|
-
gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
|
|
109
|
-
if gemspec_dep
|
|
110
|
-
gemfile_dep = [dep, current].find(&:runtime?)
|
|
111
|
-
|
|
112
|
-
unless current_requirement_open
|
|
113
|
-
Bundler.ui.warn "A gemspec development dependency (#{gemspec_dep.name}, #{gemspec_dep.requirement}) is being overridden by a Gemfile dependency (#{gemfile_dep.name}, #{gemfile_dep.requirement}).\n" \
|
|
114
|
-
"This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
|
|
115
|
-
end
|
|
116
|
-
else
|
|
117
|
-
update_prompt = ""
|
|
118
|
-
|
|
119
|
-
if File.basename(@gemfile) == Injector::INJECTED_GEMS
|
|
120
|
-
if dep.requirements_list.include?(">= 0") && !current_requirement_open
|
|
121
|
-
update_prompt = ". Gem already added"
|
|
122
|
-
else
|
|
123
|
-
update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
|
|
124
|
-
|
|
125
|
-
update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
|
|
130
|
-
"You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
|
|
131
|
-
"#{update_prompt}"
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
# Always prefer the dependency from the Gemfile
|
|
136
|
-
if current.gemspec_dev_dep?
|
|
137
|
-
@dependencies.delete(current)
|
|
138
|
-
elsif dep.gemspec_dev_dep?
|
|
139
|
-
return
|
|
140
|
-
elsif current.source != dep.source
|
|
141
|
-
raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
|
|
142
|
-
"You specified that #{dep.name} (#{dep.requirement}) should come from " \
|
|
143
|
-
"#{current.source || "an unspecified source"} and #{dep.source}\n"
|
|
144
|
-
else
|
|
145
|
-
Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
|
|
146
|
-
"You should probably keep only one of them.\n" \
|
|
147
|
-
"Remove any duplicate entries and specify the gem only once.\n" \
|
|
148
|
-
"While it's not a problem now, it could cause errors if you change the version of one of them later."
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
|
|
152
|
-
@dependencies << dep
|
|
101
|
+
add_dependency(name, version, options)
|
|
153
102
|
end
|
|
154
103
|
|
|
155
104
|
def source(source, *args, &blk)
|
|
@@ -192,8 +141,7 @@ module Bundler
|
|
|
192
141
|
def path(path, options = {}, &blk)
|
|
193
142
|
source_options = normalize_hash(options).merge(
|
|
194
143
|
"path" => Pathname.new(path),
|
|
195
|
-
"root_path" => gemfile_root
|
|
196
|
-
"gemspec" => gemspecs.find {|g| g.name == options["name"] }
|
|
144
|
+
"root_path" => gemfile_root
|
|
197
145
|
)
|
|
198
146
|
|
|
199
147
|
source_options["global"] = true unless block_given?
|
|
@@ -218,7 +166,7 @@ module Bundler
|
|
|
218
166
|
end
|
|
219
167
|
|
|
220
168
|
def github(repo, options = {})
|
|
221
|
-
raise
|
|
169
|
+
raise InvalidArgumentError, "GitHub sources require a block" unless block_given?
|
|
222
170
|
github_uri = @git_sources["github"].call(repo)
|
|
223
171
|
git_options = normalize_hash(options).merge("uri" => github_uri)
|
|
224
172
|
git_source = @sources.add_git_source(git_options)
|
|
@@ -284,6 +232,91 @@ module Bundler
|
|
|
284
232
|
|
|
285
233
|
private
|
|
286
234
|
|
|
235
|
+
def add_dependency(name, version = nil, options = {})
|
|
236
|
+
options["gemfile"] = @gemfile
|
|
237
|
+
options["source"] ||= @source
|
|
238
|
+
options["env"] ||= @env
|
|
239
|
+
|
|
240
|
+
dep = Dependency.new(name, version, options)
|
|
241
|
+
|
|
242
|
+
# if there's already a dependency with this name we try to prefer one
|
|
243
|
+
if current = @dependencies.find {|d| d.name == dep.name }
|
|
244
|
+
if current.requirement != dep.requirement
|
|
245
|
+
current_requirement_open = current.requirements_list.include?(">= 0")
|
|
246
|
+
|
|
247
|
+
gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
|
|
248
|
+
if gemspec_dep
|
|
249
|
+
gemfile_dep = [dep, current].find(&:gemfile_dep?)
|
|
250
|
+
|
|
251
|
+
if gemfile_dep && !current_requirement_open
|
|
252
|
+
Bundler.ui.warn "A gemspec development dependency (#{gemspec_dep.name}, #{gemspec_dep.requirement}) is being overridden by a Gemfile dependency (#{gemfile_dep.name}, #{gemfile_dep.requirement}).\n" \
|
|
253
|
+
"This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
|
|
254
|
+
elsif gemfile_dep.nil?
|
|
255
|
+
require_relative "vendor/pub_grub/lib/pub_grub/version_range"
|
|
256
|
+
require_relative "vendor/pub_grub/lib/pub_grub/version_constraint"
|
|
257
|
+
require_relative "vendor/pub_grub/lib/pub_grub/version_union"
|
|
258
|
+
require_relative "vendor/pub_grub/lib/pub_grub/rubygems"
|
|
259
|
+
|
|
260
|
+
current_gemspec_range = PubGrub::RubyGems.requirement_to_range(current.requirement)
|
|
261
|
+
next_gemspec_range = PubGrub::RubyGems.requirement_to_range(dep.requirement)
|
|
262
|
+
|
|
263
|
+
if current_gemspec_range.intersects?(next_gemspec_range)
|
|
264
|
+
dep = Dependency.new(name, current.requirement.as_list + dep.requirement.as_list, options)
|
|
265
|
+
else
|
|
266
|
+
raise GemfileError, "Two gemspec development dependencies have conflicting requirements on the same gem: #{dep} and #{current}"
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
else
|
|
270
|
+
update_prompt = ""
|
|
271
|
+
|
|
272
|
+
if File.basename(@gemfile) == Injector::INJECTED_GEMS
|
|
273
|
+
if dep.requirements_list.include?(">= 0") && !current_requirement_open
|
|
274
|
+
update_prompt = ". Gem already added"
|
|
275
|
+
else
|
|
276
|
+
update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
|
|
277
|
+
|
|
278
|
+
update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
|
|
283
|
+
"You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
|
|
284
|
+
"#{update_prompt}"
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
unless current.gemspec_dev_dep? && dep.gemspec_dev_dep?
|
|
289
|
+
# Always prefer the dependency from the Gemfile
|
|
290
|
+
if current.gemspec_dev_dep?
|
|
291
|
+
@dependencies.delete(current)
|
|
292
|
+
elsif dep.gemspec_dev_dep?
|
|
293
|
+
return
|
|
294
|
+
elsif current.source != dep.source
|
|
295
|
+
raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
|
|
296
|
+
"You specified that #{dep.name} (#{dep.requirement}) should come from " \
|
|
297
|
+
"#{current.source || "an unspecified source"} and #{dep.source}\n"
|
|
298
|
+
else
|
|
299
|
+
Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
|
|
300
|
+
"You should probably keep only one of them.\n" \
|
|
301
|
+
"Remove any duplicate entries and specify the gem only once.\n" \
|
|
302
|
+
"While it's not a problem now, it could cause errors if you change the version of one of them later."
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
@dependencies << dep
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def with_gemfile(gemfile)
|
|
311
|
+
expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
|
|
312
|
+
original_gemfile = @gemfile
|
|
313
|
+
@gemfile = expanded_gemfile_path
|
|
314
|
+
@gemfiles << expanded_gemfile_path
|
|
315
|
+
yield @gemfile.to_s
|
|
316
|
+
ensure
|
|
317
|
+
@gemfile = original_gemfile
|
|
318
|
+
end
|
|
319
|
+
|
|
287
320
|
def add_git_sources
|
|
288
321
|
git_source(:github) do |repo_name|
|
|
289
322
|
if repo_name =~ GITHUB_PULL_REQUEST_URL
|
|
@@ -308,6 +341,20 @@ module Bundler
|
|
|
308
341
|
repo_name ||= user_name
|
|
309
342
|
"https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
|
|
310
343
|
end
|
|
344
|
+
|
|
345
|
+
git_source(:gitlab) do |repo_name|
|
|
346
|
+
if repo_name =~ GITLAB_MERGE_REQUEST_URL
|
|
347
|
+
{
|
|
348
|
+
"git" => "https://gitlab.com/#{$1}.git",
|
|
349
|
+
"branch" => nil,
|
|
350
|
+
"ref" => "refs/merge-requests/#{$2}/head",
|
|
351
|
+
"tag" => nil,
|
|
352
|
+
}
|
|
353
|
+
else
|
|
354
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
|
355
|
+
"https://gitlab.com/#{repo_name}.git"
|
|
356
|
+
end
|
|
357
|
+
end
|
|
311
358
|
end
|
|
312
359
|
|
|
313
360
|
def with_source(source)
|
|
@@ -392,8 +439,6 @@ module Bundler
|
|
|
392
439
|
opts["source"] = source
|
|
393
440
|
end
|
|
394
441
|
|
|
395
|
-
opts["source"] ||= @source
|
|
396
|
-
opts["env"] ||= @env
|
|
397
442
|
opts["platforms"] = platforms.dup
|
|
398
443
|
opts["group"] = groups
|
|
399
444
|
opts["should_include"] = install_if
|
|
@@ -462,18 +507,7 @@ module Bundler
|
|
|
462
507
|
end
|
|
463
508
|
|
|
464
509
|
def check_rubygems_source_safety
|
|
465
|
-
if @sources.
|
|
466
|
-
implicit_global_source_warning
|
|
467
|
-
elsif @sources.aggregate_global_source?
|
|
468
|
-
multiple_global_source_warning
|
|
469
|
-
end
|
|
470
|
-
end
|
|
471
|
-
|
|
472
|
-
def implicit_global_source_warning
|
|
473
|
-
Bundler::SharedHelpers.major_deprecation 2, "This Gemfile does not include an explicit global source. " \
|
|
474
|
-
"Not using an explicit global source may result in a different lockfile being generated depending on " \
|
|
475
|
-
"the gems you have installed locally before bundler is run. " \
|
|
476
|
-
"Instead, define a global source in your Gemfile like this: source \"https://rubygems.org\"."
|
|
510
|
+
multiple_global_source_warning if @sources.aggregate_global_source?
|
|
477
511
|
end
|
|
478
512
|
|
|
479
513
|
def multiple_global_source_warning
|
|
@@ -562,23 +596,23 @@ module Bundler
|
|
|
562
596
|
|
|
563
597
|
return m unless backtrace && dsl_path && contents
|
|
564
598
|
|
|
565
|
-
trace_line = backtrace.find {|l| l.include?(dsl_path
|
|
599
|
+
trace_line = backtrace.find {|l| l.include?(dsl_path) } || trace_line
|
|
566
600
|
return m unless trace_line
|
|
567
|
-
|
|
568
|
-
return m unless
|
|
601
|
+
line_number = trace_line.split(":")[1].to_i - 1
|
|
602
|
+
return m unless line_number
|
|
569
603
|
|
|
570
604
|
lines = contents.lines.to_a
|
|
571
605
|
indent = " # "
|
|
572
606
|
indicator = indent.tr("#", ">")
|
|
573
|
-
first_line =
|
|
574
|
-
last_line = (
|
|
607
|
+
first_line = line_number.zero?
|
|
608
|
+
last_line = (line_number == (lines.count - 1))
|
|
575
609
|
|
|
576
610
|
m << "\n"
|
|
577
611
|
m << "#{indent}from #{trace_line.gsub(/:in.*$/, "")}\n"
|
|
578
612
|
m << "#{indent}-------------------------------------------\n"
|
|
579
|
-
m << "#{indent}#{lines[
|
|
580
|
-
m << "#{indicator}#{lines[
|
|
581
|
-
m << "#{indent}#{lines[
|
|
613
|
+
m << "#{indent}#{lines[line_number - 1]}" unless first_line
|
|
614
|
+
m << "#{indicator}#{lines[line_number]}"
|
|
615
|
+
m << "#{indent}#{lines[line_number + 1]}" unless last_line
|
|
582
616
|
m << "\n" unless m.end_with?("\n")
|
|
583
617
|
m << "#{indent}-------------------------------------------\n"
|
|
584
618
|
end
|
|
@@ -588,7 +622,7 @@ module Bundler
|
|
|
588
622
|
|
|
589
623
|
def parse_line_number_from_description
|
|
590
624
|
description = self.description
|
|
591
|
-
if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path
|
|
625
|
+
if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path}):\d+)/
|
|
592
626
|
trace_line = Regexp.last_match[1]
|
|
593
627
|
description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
|
|
594
628
|
end
|
|
@@ -6,7 +6,8 @@ module Bundler
|
|
|
6
6
|
include MatchRemoteMetadata
|
|
7
7
|
|
|
8
8
|
attr_reader :name, :version, :platform, :checksum
|
|
9
|
-
|
|
9
|
+
attr_writer :dependencies
|
|
10
|
+
attr_accessor :remote, :locked_platform
|
|
10
11
|
|
|
11
12
|
def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
|
|
12
13
|
super()
|
|
@@ -14,18 +15,29 @@ module Bundler
|
|
|
14
15
|
@version = Gem::Version.create version
|
|
15
16
|
@platform = Gem::Platform.new(platform)
|
|
16
17
|
@spec_fetcher = spec_fetcher
|
|
17
|
-
@dependencies =
|
|
18
|
+
@dependencies = nil
|
|
19
|
+
@unbuilt_dependencies = dependencies
|
|
18
20
|
|
|
19
21
|
@loaded_from = nil
|
|
20
22
|
@remote_specification = nil
|
|
23
|
+
@locked_platform = nil
|
|
21
24
|
|
|
22
25
|
parse_metadata(metadata)
|
|
23
26
|
end
|
|
24
27
|
|
|
28
|
+
def insecurely_materialized?
|
|
29
|
+
@locked_platform.to_s != @platform.to_s
|
|
30
|
+
end
|
|
31
|
+
|
|
25
32
|
def fetch_platform
|
|
26
33
|
@platform
|
|
27
34
|
end
|
|
28
35
|
|
|
36
|
+
def dependencies
|
|
37
|
+
@dependencies ||= @unbuilt_dependencies.map! {|dep, reqs| build_dependency(dep, reqs) }
|
|
38
|
+
end
|
|
39
|
+
alias_method :runtime_dependencies, :dependencies
|
|
40
|
+
|
|
29
41
|
# needed for standalone, load required_paths from local gemspec
|
|
30
42
|
# after the gem is installed
|
|
31
43
|
def require_paths
|
|
@@ -92,6 +104,17 @@ module Bundler
|
|
|
92
104
|
end
|
|
93
105
|
end
|
|
94
106
|
|
|
107
|
+
# needed for `bundle fund`
|
|
108
|
+
def metadata
|
|
109
|
+
if @remote_specification
|
|
110
|
+
@remote_specification.metadata
|
|
111
|
+
elsif _local_specification
|
|
112
|
+
_local_specification.metadata
|
|
113
|
+
else
|
|
114
|
+
super
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
95
118
|
def _local_specification
|
|
96
119
|
return unless @loaded_from && File.exist?(local_specification_path)
|
|
97
120
|
eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec|
|
|
@@ -104,6 +127,10 @@ module Bundler
|
|
|
104
127
|
@remote_specification = spec
|
|
105
128
|
end
|
|
106
129
|
|
|
130
|
+
def inspect
|
|
131
|
+
"#<#{self.class} @name=\"#{name}\" (#{full_name.delete_prefix("#{name}-")})>"
|
|
132
|
+
end
|
|
133
|
+
|
|
107
134
|
private
|
|
108
135
|
|
|
109
136
|
def _remote_specification
|
|
@@ -141,7 +168,7 @@ module Bundler
|
|
|
141
168
|
end
|
|
142
169
|
|
|
143
170
|
def build_dependency(name, requirements)
|
|
144
|
-
|
|
171
|
+
Dependency.new(name, requirements)
|
|
145
172
|
end
|
|
146
173
|
end
|
|
147
174
|
end
|
data/bundler/lib/bundler/env.rb
CHANGED
|
@@ -120,7 +120,7 @@ module Bundler
|
|
|
120
120
|
specs = Bundler.rubygems.find_name(name)
|
|
121
121
|
out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
|
|
122
122
|
end
|
|
123
|
-
if (exe =
|
|
123
|
+
if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
|
|
124
124
|
shebang = File.read(exe).lines.first
|
|
125
125
|
shebang.sub!(/^#!\s*/, "")
|
|
126
126
|
unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
|
|
@@ -19,14 +19,7 @@ module Bundler
|
|
|
19
19
|
BUNDLER_PREFIX = "BUNDLER_ORIG_"
|
|
20
20
|
|
|
21
21
|
def self.from_env
|
|
22
|
-
new(
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.env_to_hash(env)
|
|
26
|
-
to_hash = env.to_hash
|
|
27
|
-
return to_hash unless Gem.win_platform?
|
|
28
|
-
|
|
29
|
-
to_hash.each_with_object({}) {|(k,v), a| a[k.upcase] = v }
|
|
22
|
+
new(ENV.to_hash, BUNDLER_KEYS)
|
|
30
23
|
end
|
|
31
24
|
|
|
32
25
|
# @param env [Hash]
|
|
@@ -39,18 +32,7 @@ module Bundler
|
|
|
39
32
|
|
|
40
33
|
# Replaces `ENV` with the bundler environment variables backed up
|
|
41
34
|
def replace_with_backup
|
|
42
|
-
|
|
43
|
-
ENV.replace(backup)
|
|
44
|
-
return
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# Fallback logic for Windows below to workaround
|
|
48
|
-
# https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
|
|
49
|
-
# supported rubies include the fix for that.
|
|
50
|
-
|
|
51
|
-
ENV.clear
|
|
52
|
-
|
|
53
|
-
backup.each {|k, v| ENV[k] = v }
|
|
35
|
+
ENV.replace(backup)
|
|
54
36
|
end
|
|
55
37
|
|
|
56
38
|
# @return [Hash]
|
|
@@ -58,9 +40,9 @@ module Bundler
|
|
|
58
40
|
env = @original.clone
|
|
59
41
|
@keys.each do |key|
|
|
60
42
|
value = env[key]
|
|
61
|
-
if !value.nil?
|
|
43
|
+
if !value.nil?
|
|
62
44
|
env[@prefix + key] ||= value
|
|
63
|
-
|
|
45
|
+
else
|
|
64
46
|
env[@prefix + key] ||= INTENTIONALLY_NIL
|
|
65
47
|
end
|
|
66
48
|
end
|
|
@@ -72,7 +54,7 @@ module Bundler
|
|
|
72
54
|
env = @original.clone
|
|
73
55
|
@keys.each do |key|
|
|
74
56
|
value_original = env[@prefix + key]
|
|
75
|
-
next if value_original.nil?
|
|
57
|
+
next if value_original.nil?
|
|
76
58
|
if value_original == INTENTIONALLY_NIL
|
|
77
59
|
env.delete(key)
|
|
78
60
|
else
|