rubygems-update 3.5.3 → 3.7.1
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 +1410 -686
- data/CODE_OF_CONDUCT.md +79 -28
- data/CONTRIBUTING.md +4 -226
- data/Manifest.txt +107 -83
- data/README.md +16 -11
- data/SECURITY.md +7 -0
- data/bundler/CHANGELOG.md +1525 -931
- data/bundler/README.md +9 -9
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +10 -11
- 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/common.rb +1 -1
- data/bundler/lib/bundler/cli/config.rb +2 -2
- 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 +74 -46
- 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 +19 -10
- 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 +23 -23
- 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/update.rb +3 -3
- data/bundler/lib/bundler/cli.rb +75 -145
- 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 +6 -16
- data/bundler/lib/bundler/compact_index_client.rb +52 -85
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +48 -34
- data/bundler/lib/bundler/definition.rb +501 -328
- data/bundler/lib/bundler/dependency.rb +93 -47
- data/bundler/lib/bundler/dsl.rb +147 -103
- 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 +18 -18
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
- data/bundler/lib/bundler/fetcher.rb +63 -26
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +3 -2
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- data/bundler/lib/bundler/index.rb +7 -2
- 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 +22 -45
- data/bundler/lib/bundler/lazy_specification.rb +121 -48
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +36 -9
- 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 +180 -138
- data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
- 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 +46 -7
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
- 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 +69 -28
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -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 +13 -5
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
- data/bundler/lib/bundler/man/bundle-install.1 +20 -17
- data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
- 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 +17 -11
- data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
- 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/match_platform.rb +31 -12
- 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 -52
- 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 +303 -150
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +40 -73
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +36 -26
- data/bundler/lib/bundler/settings/validator.rb +0 -23
- data/bundler/lib/bundler/settings.rb +36 -27
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +45 -25
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
- 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 +14 -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 +54 -12
- data/bundler/lib/bundler/source_map.rb +1 -1
- data/bundler/lib/bundler/spec_set.rb +227 -103
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- data/bundler/lib/bundler/templates/Executable +0 -11
- 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 +17 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +26 -4
- 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/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
- 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 +10 -2
- data/bundler/lib/bundler/worker.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +101 -61
- data/{bundler → doc/bundler}/UPGRADING.md +132 -127
- data/doc/rubygems/CONTRIBUTING.md +227 -0
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +50 -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 +29 -19
- 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 +13 -18
- 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 +13 -22
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_require.rb +15 -3
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +7 -7
- 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 +16 -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 +11 -4
- 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 +76 -90
- 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 +148 -43
- 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 +6 -7
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +4 -7
- 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 +1 -29
- 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/source_set.rb +1 -1
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +8 -8
- data/lib/rubygems/s3_uri_signer.rb +8 -6
- 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 +37 -29
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +110 -183
- 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/uri_formatter.rb +2 -1
- data/lib/rubygems/util/licenses.rb +118 -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 +149 -70
- 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 +165 -69
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- 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 +160 -53
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +124 -96
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/bundler/lib/bundler/gem_helpers.rb +0 -127
- data/bundler/lib/bundler/templates/Executable.bundler +0 -109
- data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
- data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
- data/bundler/lib/bundler/vendor/thor/.document +0 -1
- data/bundler/lib/bundler/vendor/tsort/.document +0 -1
- data/bundler/lib/bundler/vendor/uri/.document +0 -1
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/net-http/.document +0 -1
- 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/.document +0 -1
- data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/.document +0 -1
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/.document +0 -1
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- data/lib/rubygems/resolver/molinillo/.document +0 -1
- 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/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/rubygems/timeout/.document +0 -1
- data/lib/rubygems/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort/.document +0 -1
- 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/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
- /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +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/{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/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -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
|
-
valid_platforms.select {|p| expanded_platforms.include?(
|
102
|
+
valid_platforms.select {|p| expanded_platforms.include?(Gem::Platform.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,23 +66,23 @@ 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
|
|
72
73
|
case specs_by_name_and_version.size
|
73
74
|
when 1
|
74
75
|
specs = specs_by_name_and_version.values.first
|
75
|
-
spec = specs.find {|s| s.
|
76
|
+
spec = specs.find {|s| s.installable_on_platform?(Bundler.local_platform) } || specs.first
|
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
|
-
# Always prefer the dependency from the Gemfile
|
106
|
-
@dependencies.delete(current) if current.gemspec_dev_dep?
|
107
|
-
|
108
|
-
if current.requirement != dep.requirement
|
109
|
-
current_requirement_open = current.requirements_list.include?(">= 0")
|
110
|
-
|
111
|
-
gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
|
112
|
-
if gemspec_dep
|
113
|
-
gemfile_dep = [dep, current].find(&:runtime?)
|
114
|
-
|
115
|
-
unless current_requirement_open
|
116
|
-
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" \
|
117
|
-
"This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
|
118
|
-
end
|
119
|
-
|
120
|
-
return if dep.gemspec_dev_dep?
|
121
|
-
else
|
122
|
-
update_prompt = ""
|
123
|
-
|
124
|
-
if File.basename(@gemfile) == Injector::INJECTED_GEMS
|
125
|
-
if dep.requirements_list.include?(">= 0") && !current_requirement_open
|
126
|
-
update_prompt = ". Gem already added"
|
127
|
-
else
|
128
|
-
update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
|
129
|
-
|
130
|
-
update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
|
135
|
-
"You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
|
136
|
-
"#{update_prompt}"
|
137
|
-
end
|
138
|
-
elsif current.gemspec_dev_dep? || dep.gemspec_dev_dep?
|
139
|
-
return if dep.gemspec_dev_dep?
|
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,90 @@ 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 == 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
|
+
require_relative "vendor/pub_grub/lib/pub_grub/version_range"
|
250
|
+
require_relative "vendor/pub_grub/lib/pub_grub/version_constraint"
|
251
|
+
require_relative "vendor/pub_grub/lib/pub_grub/version_union"
|
252
|
+
require_relative "vendor/pub_grub/lib/pub_grub/rubygems"
|
253
|
+
|
254
|
+
current_gemspec_range = PubGrub::RubyGems.requirement_to_range(current.requirement)
|
255
|
+
next_gemspec_range = PubGrub::RubyGems.requirement_to_range(dep.requirement)
|
256
|
+
|
257
|
+
if current_gemspec_range.intersects?(next_gemspec_range)
|
258
|
+
dep = Dependency.new(name, current.requirement.as_list + dep.requirement.as_list, options)
|
259
|
+
else
|
260
|
+
gemfile_dep = [dep, current].find(&:gemfile_dep?)
|
261
|
+
|
262
|
+
if gemfile_dep
|
263
|
+
raise GemfileError, "The #{name} dependency has conflicting requirements in Gemfile (#{gemfile_dep.requirement}) and gemspec (#{gemspec_dep.requirement})"
|
264
|
+
else
|
265
|
+
raise GemfileError, "Two gemspec development dependencies have conflicting requirements on the same gem: #{dep} and #{current}"
|
266
|
+
end
|
267
|
+
end
|
268
|
+
else
|
269
|
+
update_prompt = ""
|
270
|
+
|
271
|
+
if File.basename(@gemfile) == Injector::INJECTED_GEMS
|
272
|
+
if dep.requirements_list.include?(">= 0") && !current_requirement_open
|
273
|
+
update_prompt = ". Gem already added"
|
274
|
+
else
|
275
|
+
update_prompt = ". If you want to update the gem version, run `bundle update #{name}`"
|
276
|
+
|
277
|
+
update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
|
282
|
+
"You specified: #{name} (#{current.requirement}) and #{name} (#{dep.requirement})" \
|
283
|
+
"#{update_prompt}"
|
284
|
+
end
|
285
|
+
end
|
286
|
+
|
287
|
+
unless current.gemspec_dev_dep? && dep.gemspec_dev_dep?
|
288
|
+
# Always prefer the dependency from the Gemfile
|
289
|
+
if current.gemspec_dev_dep?
|
290
|
+
@dependencies.delete(current)
|
291
|
+
elsif dep.gemspec_dev_dep?
|
292
|
+
return
|
293
|
+
elsif current.source != dep.source
|
294
|
+
raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
|
295
|
+
"You specified that #{name} (#{dep.requirement}) should come from " \
|
296
|
+
"#{current.source || "an unspecified source"} and #{dep.source}\n"
|
297
|
+
else
|
298
|
+
Bundler.ui.warn "Your Gemfile lists the gem #{name} (#{current.requirement}) more than once.\n" \
|
299
|
+
"You should probably keep only one of them.\n" \
|
300
|
+
"Remove any duplicate entries and specify the gem only once.\n" \
|
301
|
+
"While it's not a problem now, it could cause errors if you change the version of one of them later."
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
306
|
+
@dependencies << dep
|
307
|
+
end
|
308
|
+
|
309
|
+
def with_gemfile(gemfile)
|
310
|
+
expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
|
311
|
+
original_gemfile = @gemfile
|
312
|
+
@gemfile = expanded_gemfile_path
|
313
|
+
@gemfiles << expanded_gemfile_path
|
314
|
+
yield @gemfile.to_s
|
315
|
+
ensure
|
316
|
+
@gemfile = original_gemfile
|
317
|
+
end
|
318
|
+
|
287
319
|
def add_git_sources
|
288
320
|
git_source(:github) do |repo_name|
|
289
321
|
if repo_name =~ GITHUB_PULL_REQUEST_URL
|
@@ -308,6 +340,20 @@ module Bundler
|
|
308
340
|
repo_name ||= user_name
|
309
341
|
"https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
|
310
342
|
end
|
343
|
+
|
344
|
+
git_source(:gitlab) do |repo_name|
|
345
|
+
if repo_name =~ GITLAB_MERGE_REQUEST_URL
|
346
|
+
{
|
347
|
+
"git" => "https://gitlab.com/#{$1}.git",
|
348
|
+
"branch" => nil,
|
349
|
+
"ref" => "refs/merge-requests/#{$2}/head",
|
350
|
+
"tag" => nil,
|
351
|
+
}
|
352
|
+
else
|
353
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
354
|
+
"https://gitlab.com/#{repo_name}.git"
|
355
|
+
end
|
356
|
+
end
|
311
357
|
end
|
312
358
|
|
313
359
|
def with_source(source)
|
@@ -365,6 +411,7 @@ module Bundler
|
|
365
411
|
next if VALID_PLATFORMS.include?(p)
|
366
412
|
raise GemfileError, "`#{p}` is not a valid platform. The available options are: #{VALID_PLATFORMS.inspect}"
|
367
413
|
end
|
414
|
+
deprecate_legacy_windows_platforms(platforms)
|
368
415
|
|
369
416
|
# Save sources passed in a key
|
370
417
|
if opts.key?("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
|
@@ -447,6 +492,16 @@ module Bundler
|
|
447
492
|
end
|
448
493
|
end
|
449
494
|
|
495
|
+
def deprecate_legacy_windows_platforms(platforms)
|
496
|
+
windows_platforms = platforms.select {|pl| pl.to_s.match?(/mingw|mswin/) }
|
497
|
+
return if windows_platforms.empty?
|
498
|
+
|
499
|
+
windows_platforms = windows_platforms.map! {|pl| ":#{pl}" }.join(", ")
|
500
|
+
message = "Platform #{windows_platforms} is deprecated. Please use platform :windows instead."
|
501
|
+
removed_message = "Platform #{windows_platforms} has been removed. Please use platform :windows instead."
|
502
|
+
Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
|
503
|
+
end
|
504
|
+
|
450
505
|
def check_path_source_safety
|
451
506
|
return if @sources.global_path_source.nil?
|
452
507
|
|
@@ -462,22 +517,11 @@ module Bundler
|
|
462
517
|
end
|
463
518
|
|
464
519
|
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\"."
|
520
|
+
multiple_global_source_warning if @sources.aggregate_global_source?
|
477
521
|
end
|
478
522
|
|
479
523
|
def multiple_global_source_warning
|
480
|
-
if Bundler.feature_flag.
|
524
|
+
if Bundler.feature_flag.bundler_4_mode?
|
481
525
|
msg = "This Gemfile contains multiple global sources. " \
|
482
526
|
"Each source after the first must include a block to indicate which gems " \
|
483
527
|
"should come from that source"
|
@@ -562,23 +606,23 @@ module Bundler
|
|
562
606
|
|
563
607
|
return m unless backtrace && dsl_path && contents
|
564
608
|
|
565
|
-
trace_line = backtrace.find {|l| l.include?(dsl_path
|
609
|
+
trace_line = backtrace.find {|l| l.include?(dsl_path) } || trace_line
|
566
610
|
return m unless trace_line
|
567
|
-
|
568
|
-
return m unless
|
611
|
+
line_number = trace_line.split(":")[1].to_i - 1
|
612
|
+
return m unless line_number
|
569
613
|
|
570
614
|
lines = contents.lines.to_a
|
571
615
|
indent = " # "
|
572
616
|
indicator = indent.tr("#", ">")
|
573
|
-
first_line =
|
574
|
-
last_line = (
|
617
|
+
first_line = line_number.zero?
|
618
|
+
last_line = (line_number == (lines.count - 1))
|
575
619
|
|
576
620
|
m << "\n"
|
577
621
|
m << "#{indent}from #{trace_line.gsub(/:in.*$/, "")}\n"
|
578
622
|
m << "#{indent}-------------------------------------------\n"
|
579
|
-
m << "#{indent}#{lines[
|
580
|
-
m << "#{indicator}#{lines[
|
581
|
-
m << "#{indent}#{lines[
|
623
|
+
m << "#{indent}#{lines[line_number - 1]}" unless first_line
|
624
|
+
m << "#{indicator}#{lines[line_number]}"
|
625
|
+
m << "#{indent}#{lines[line_number + 1]}" unless last_line
|
582
626
|
m << "\n" unless m.end_with?("\n")
|
583
627
|
m << "#{indent}-------------------------------------------\n"
|
584
628
|
end
|
@@ -588,7 +632,7 @@ module Bundler
|
|
588
632
|
|
589
633
|
def parse_line_number_from_description
|
590
634
|
description = self.description
|
591
|
-
if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path
|
635
|
+
if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path}):\d+)/
|
592
636
|
trace_line = Regexp.last_match[1]
|
593
637
|
description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
|
594
638
|
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")
|