bundler 2.2.29 → 2.5.16
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 +1129 -4
- data/README.md +4 -8
- data/bundler.gemspec +11 -11
- data/exe/bundle +5 -26
- data/exe/bundler +1 -1
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +4 -4
- data/lib/bundler/capistrano.rb +1 -1
- data/lib/bundler/checksum.rb +254 -0
- data/lib/bundler/ci_detector.rb +75 -0
- data/lib/bundler/cli/add.rb +4 -4
- data/lib/bundler/cli/binstubs.rb +10 -6
- data/lib/bundler/cli/cache.rb +1 -1
- data/lib/bundler/cli/check.rb +3 -3
- data/lib/bundler/cli/common.rb +13 -3
- data/lib/bundler/cli/config.rb +18 -8
- data/lib/bundler/cli/console.rb +5 -4
- data/lib/bundler/cli/doctor.rb +12 -5
- data/lib/bundler/cli/exec.rb +1 -1
- data/lib/bundler/cli/fund.rb +1 -1
- data/lib/bundler/cli/gem.rb +141 -48
- data/lib/bundler/cli/info.rb +27 -17
- data/lib/bundler/cli/init.rb +6 -2
- data/lib/bundler/cli/install.rb +22 -39
- data/lib/bundler/cli/issue.rb +5 -4
- data/lib/bundler/cli/lock.rb +36 -29
- data/lib/bundler/cli/open.rb +9 -9
- data/lib/bundler/cli/outdated.rb +19 -12
- data/lib/bundler/cli/platform.rb +8 -6
- data/lib/bundler/cli/plugin.rb +9 -15
- data/lib/bundler/cli/pristine.rb +38 -30
- data/lib/bundler/cli/show.rb +3 -3
- data/lib/bundler/cli/update.rb +12 -7
- data/lib/bundler/cli/viz.rb +1 -1
- data/lib/bundler/cli.rb +266 -285
- data/lib/bundler/compact_index_client/cache.rb +53 -67
- data/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/lib/bundler/compact_index_client/parser.rb +84 -0
- data/lib/bundler/compact_index_client/updater.rb +83 -76
- data/lib/bundler/compact_index_client.rb +59 -87
- data/lib/bundler/constants.rb +9 -2
- data/lib/bundler/current_ruby.rb +12 -16
- data/lib/bundler/definition.rb +509 -319
- data/lib/bundler/dependency.rb +33 -71
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +88 -69
- data/lib/bundler/endpoint_specification.rb +32 -15
- data/lib/bundler/env.rb +5 -7
- data/lib/bundler/environment_preserver.rb +8 -22
- data/lib/bundler/errors.rb +101 -13
- data/lib/bundler/feature_flag.rb +0 -2
- data/lib/bundler/fetcher/base.rb +11 -11
- data/lib/bundler/fetcher/compact_index.rb +32 -52
- data/lib/bundler/fetcher/dependency.rb +3 -7
- data/lib/bundler/fetcher/downloader.rb +17 -16
- data/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/lib/bundler/fetcher/index.rb +2 -29
- data/lib/bundler/fetcher.rb +87 -79
- data/lib/bundler/force_platform.rb +18 -0
- data/lib/bundler/friendly_errors.rb +29 -40
- data/lib/bundler/gem_helper.rb +11 -23
- data/lib/bundler/gem_helpers.rb +30 -6
- data/lib/bundler/gem_version_promoter.rb +68 -109
- data/lib/bundler/graph.rb +9 -9
- data/lib/bundler/index.rb +71 -79
- data/lib/bundler/injector.rb +23 -11
- data/lib/bundler/inline.rb +11 -23
- data/lib/bundler/installer/gem_installer.rb +18 -11
- data/lib/bundler/installer/parallel_installer.rb +17 -65
- data/lib/bundler/installer/standalone.rb +56 -15
- data/lib/bundler/installer.rb +35 -61
- data/lib/bundler/lazy_specification.rb +92 -61
- data/lib/bundler/lockfile_generator.rb +12 -3
- data/lib/bundler/lockfile_parser.rb +137 -70
- data/lib/bundler/man/bundle-add.1 +19 -26
- data/lib/bundler/man/bundle-add.1.ronn +16 -4
- data/lib/bundler/man/bundle-binstubs.1 +4 -16
- data/lib/bundler/man/bundle-cache.1 +9 -24
- data/lib/bundler/man/bundle-cache.1.ronn +9 -2
- data/lib/bundler/man/bundle-check.1 +5 -12
- data/lib/bundler/man/bundle-check.1.ronn +3 -0
- data/lib/bundler/man/bundle-clean.1 +4 -11
- data/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/lib/bundler/man/bundle-config.1 +47 -224
- data/lib/bundler/man/bundle-config.1.ronn +40 -28
- data/lib/bundler/man/bundle-console.1 +35 -0
- data/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/lib/bundler/man/bundle-doctor.1 +4 -18
- data/lib/bundler/man/bundle-exec.1 +16 -77
- data/lib/bundler/man/bundle-exec.1.ronn +8 -9
- data/lib/bundler/man/bundle-gem.1 +45 -72
- data/lib/bundler/man/bundle-gem.1.ronn +32 -5
- data/lib/bundler/man/bundle-help.1 +9 -0
- data/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/lib/bundler/man/bundle-info.1 +5 -11
- data/lib/bundler/man/bundle-info.1.ronn +3 -3
- data/lib/bundler/man/bundle-init.1 +6 -11
- data/lib/bundler/man/bundle-init.1.ronn +2 -0
- data/lib/bundler/man/bundle-inject.1 +8 -18
- data/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/lib/bundler/man/bundle-install.1 +32 -155
- data/lib/bundler/man/bundle-install.1.ronn +11 -33
- data/lib/bundler/man/bundle-list.1 +4 -19
- data/lib/bundler/man/bundle-lock.1 +5 -29
- data/lib/bundler/man/bundle-open.1 +18 -18
- data/lib/bundler/man/bundle-open.1.ronn +9 -1
- data/lib/bundler/man/bundle-outdated.1 +17 -72
- data/lib/bundler/man/bundle-outdated.1.ronn +13 -18
- data/lib/bundler/man/bundle-platform.1 +16 -28
- data/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/lib/bundler/man/bundle-plugin.1 +58 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +63 -0
- data/lib/bundler/man/bundle-pristine.1 +5 -16
- data/lib/bundler/man/bundle-remove.1 +4 -14
- data/lib/bundler/man/bundle-show.1 +3 -10
- data/lib/bundler/man/bundle-update.1 +19 -138
- data/lib/bundler/man/bundle-update.1.ronn +2 -1
- data/lib/bundler/man/bundle-version.1 +22 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/lib/bundler/man/bundle-viz.1 +6 -15
- data/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/lib/bundler/man/bundle.1 +17 -51
- data/lib/bundler/man/bundle.1.ronn +12 -7
- data/lib/bundler/man/gemfile.5 +130 -346
- data/lib/bundler/man/gemfile.5.ronn +121 -86
- data/lib/bundler/man/index.txt +4 -0
- data/lib/bundler/match_metadata.rb +17 -0
- data/lib/bundler/match_platform.rb +1 -2
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/mirror.rb +8 -10
- data/lib/bundler/plugin/api/source.rb +9 -13
- data/lib/bundler/plugin/index.rb +13 -5
- data/lib/bundler/plugin/installer/git.rb +0 -4
- data/lib/bundler/plugin/installer/path.rb +18 -0
- data/lib/bundler/plugin/installer/rubygems.rb +0 -8
- data/lib/bundler/plugin/installer.rb +42 -19
- data/lib/bundler/plugin/source_list.rb +4 -4
- data/lib/bundler/plugin.rb +16 -7
- data/lib/bundler/process_lock.rb +1 -1
- data/lib/bundler/remote_specification.rb +11 -5
- data/lib/bundler/resolver/base.rb +111 -0
- data/lib/bundler/resolver/candidate.rb +82 -0
- data/lib/bundler/resolver/incompatibility.rb +15 -0
- data/lib/bundler/resolver/package.rb +81 -0
- data/lib/bundler/resolver/root.rb +25 -0
- data/lib/bundler/resolver/spec_group.rb +53 -66
- data/lib/bundler/resolver.rb +419 -307
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_dsl.rb +42 -7
- data/lib/bundler/ruby_version.rb +16 -22
- data/lib/bundler/rubygems_ext.rb +250 -64
- data/lib/bundler/rubygems_gem_installer.rb +90 -64
- data/lib/bundler/rubygems_integration.rb +81 -190
- data/lib/bundler/runtime.rb +8 -13
- data/lib/bundler/safe_marshal.rb +31 -0
- data/lib/bundler/self_manager.rb +206 -0
- data/lib/bundler/settings.rb +139 -57
- data/lib/bundler/setup.rb +13 -1
- data/lib/bundler/shared_helpers.rb +67 -36
- data/lib/bundler/source/git/git_proxy.rb +285 -82
- data/lib/bundler/source/git.rb +81 -41
- data/lib/bundler/source/metadata.rb +17 -16
- data/lib/bundler/source/path/installer.rb +1 -22
- data/lib/bundler/source/path.rb +13 -25
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source/rubygems.rb +164 -234
- data/lib/bundler/source/rubygems_aggregate.rb +1 -1
- data/lib/bundler/source.rb +7 -6
- data/lib/bundler/source_list.rb +40 -32
- data/lib/bundler/source_map.rb +15 -2
- data/lib/bundler/spec_set.rb +156 -46
- data/lib/bundler/stub_specification.rb +18 -5
- data/lib/bundler/templates/Executable +3 -5
- data/lib/bundler/templates/Executable.bundler +7 -12
- data/lib/bundler/templates/Executable.standalone +4 -4
- data/lib/bundler/templates/Gemfile +0 -2
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
- data/lib/bundler/templates/newgem/README.md.tt +7 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +28 -4
- data/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +13 -3
- data/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +25 -17
- data/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/lib/bundler/templates/newgem/test/minitest/{newgem_test.rb.tt → test_newgem.rb.tt} +1 -1
- data/lib/bundler/ui/rg_proxy.rb +1 -1
- data/lib/bundler/ui/shell.rb +38 -15
- data/lib/bundler/ui/silent.rb +21 -5
- data/lib/bundler/uri_credentials_filter.rb +2 -2
- data/lib/bundler/uri_normalizer.rb +23 -0
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +19 -21
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +92 -78
- data/lib/bundler/vendor/fileutils/.document +1 -0
- data/lib/bundler/vendor/fileutils/LICENSE.txt +22 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1340 -410
- data/lib/bundler/vendor/net-http-persistent/.document +1 -0
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +4 -3
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +23 -11
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +57 -57
- data/lib/bundler/vendor/pub_grub/.document +1 -0
- data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/lib/bundler/vendor/thor/.document +1 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +12 -14
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +16 -6
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -17
- data/lib/bundler/vendor/thor/lib/thor/base.rb +140 -14
- data/lib/bundler/vendor/thor/lib/thor/command.rb +13 -4
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +10 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +16 -20
- data/lib/bundler/vendor/thor/lib/thor/group.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +20 -1
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +33 -17
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +27 -8
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +63 -7
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +40 -30
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +48 -154
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -46
- data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +0 -45
- data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +134 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/util.rb +9 -8
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor.rb +155 -8
- data/lib/bundler/vendor/tsort/.document +1 -0
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
- data/lib/bundler/vendor/uri/.document +1 -0
- data/lib/bundler/vendor/uri/LICENSE.txt +22 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +316 -207
- data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +33 -13
- data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -3
- data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +2 -2
- data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -3
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -23
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +105 -47
- data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +3 -3
- data/lib/bundler/vendored_net_http.rb +23 -0
- data/lib/bundler/vendored_persistent.rb +0 -36
- data/lib/bundler/{vendored_molinillo.rb → vendored_pub_grub.rb} +1 -1
- data/lib/bundler/vendored_timeout.rb +12 -0
- data/lib/bundler/{vendored_tmpdir.rb → vendored_tsort.rb} +1 -1
- data/lib/bundler/vendored_uri.rb +18 -1
- data/lib/bundler/version.rb +5 -1
- data/lib/bundler/vlad.rb +1 -1
- data/lib/bundler/worker.rb +7 -9
- data/lib/bundler/yaml_serializer.rb +21 -12
- data/lib/bundler.rb +114 -121
- metadata +87 -41
- data/lib/bundler/dep_proxy.rb +0 -55
- data/lib/bundler/gemdeps.rb +0 -29
- data/lib/bundler/psyched_yaml.rb +0 -22
- data/lib/bundler/templates/gems.rb +0 -8
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +0 -66
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -143
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/lib/bundler/version_ranges.rb +0 -122
data/lib/bundler/dependency.rb
CHANGED
@@ -7,72 +7,25 @@ require_relative "rubygems_ext"
|
|
7
7
|
module Bundler
|
8
8
|
class Dependency < Gem::Dependency
|
9
9
|
attr_reader :autorequire
|
10
|
-
attr_reader :groups, :platforms, :gemfile, :git, :branch
|
10
|
+
attr_reader :groups, :platforms, :gemfile, :path, :git, :github, :branch, :ref, :glob
|
11
11
|
|
12
|
+
ALL_RUBY_VERSIONS = (18..27).to_a.concat((30..34).to_a).freeze
|
12
13
|
PLATFORM_MAP = {
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
|
25
|
-
|
26
|
-
:
|
27
|
-
|
28
|
-
:mri_22 => Gem::Platform::RUBY,
|
29
|
-
:mri_23 => Gem::Platform::RUBY,
|
30
|
-
:mri_24 => Gem::Platform::RUBY,
|
31
|
-
:mri_25 => Gem::Platform::RUBY,
|
32
|
-
:mri_26 => Gem::Platform::RUBY,
|
33
|
-
:rbx => Gem::Platform::RUBY,
|
34
|
-
:truffleruby => Gem::Platform::RUBY,
|
35
|
-
:jruby => Gem::Platform::JAVA,
|
36
|
-
:jruby_18 => Gem::Platform::JAVA,
|
37
|
-
:jruby_19 => Gem::Platform::JAVA,
|
38
|
-
:mswin => Gem::Platform::MSWIN,
|
39
|
-
:mswin_18 => Gem::Platform::MSWIN,
|
40
|
-
:mswin_19 => Gem::Platform::MSWIN,
|
41
|
-
:mswin_20 => Gem::Platform::MSWIN,
|
42
|
-
:mswin_21 => Gem::Platform::MSWIN,
|
43
|
-
:mswin_22 => Gem::Platform::MSWIN,
|
44
|
-
:mswin_23 => Gem::Platform::MSWIN,
|
45
|
-
:mswin_24 => Gem::Platform::MSWIN,
|
46
|
-
:mswin_25 => Gem::Platform::MSWIN,
|
47
|
-
:mswin_26 => Gem::Platform::MSWIN,
|
48
|
-
:mswin64 => Gem::Platform::MSWIN64,
|
49
|
-
:mswin64_19 => Gem::Platform::MSWIN64,
|
50
|
-
:mswin64_20 => Gem::Platform::MSWIN64,
|
51
|
-
:mswin64_21 => Gem::Platform::MSWIN64,
|
52
|
-
:mswin64_22 => Gem::Platform::MSWIN64,
|
53
|
-
:mswin64_23 => Gem::Platform::MSWIN64,
|
54
|
-
:mswin64_24 => Gem::Platform::MSWIN64,
|
55
|
-
:mswin64_25 => Gem::Platform::MSWIN64,
|
56
|
-
:mswin64_26 => Gem::Platform::MSWIN64,
|
57
|
-
:mingw => Gem::Platform::MINGW,
|
58
|
-
:mingw_18 => Gem::Platform::MINGW,
|
59
|
-
:mingw_19 => Gem::Platform::MINGW,
|
60
|
-
:mingw_20 => Gem::Platform::MINGW,
|
61
|
-
:mingw_21 => Gem::Platform::MINGW,
|
62
|
-
:mingw_22 => Gem::Platform::MINGW,
|
63
|
-
:mingw_23 => Gem::Platform::MINGW,
|
64
|
-
:mingw_24 => Gem::Platform::MINGW,
|
65
|
-
:mingw_25 => Gem::Platform::MINGW,
|
66
|
-
:mingw_26 => Gem::Platform::MINGW,
|
67
|
-
:x64_mingw => Gem::Platform::X64_MINGW,
|
68
|
-
:x64_mingw_20 => Gem::Platform::X64_MINGW,
|
69
|
-
:x64_mingw_21 => Gem::Platform::X64_MINGW,
|
70
|
-
:x64_mingw_22 => Gem::Platform::X64_MINGW,
|
71
|
-
:x64_mingw_23 => Gem::Platform::X64_MINGW,
|
72
|
-
:x64_mingw_24 => Gem::Platform::X64_MINGW,
|
73
|
-
:x64_mingw_25 => Gem::Platform::X64_MINGW,
|
74
|
-
:x64_mingw_26 => Gem::Platform::X64_MINGW,
|
75
|
-
}.freeze
|
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
|
76
29
|
|
77
30
|
def initialize(name, version, options = {}, &blk)
|
78
31
|
type = options["type"] || :runtime
|
@@ -81,36 +34,45 @@ module Bundler
|
|
81
34
|
@autorequire = nil
|
82
35
|
@groups = Array(options["group"] || :default).map(&:to_sym)
|
83
36
|
@source = options["source"]
|
37
|
+
@path = options["path"]
|
84
38
|
@git = options["git"]
|
39
|
+
@github = options["github"]
|
85
40
|
@branch = options["branch"]
|
41
|
+
@ref = options["ref"]
|
42
|
+
@glob = options["glob"]
|
86
43
|
@platforms = Array(options["platforms"])
|
87
44
|
@env = options["env"]
|
88
45
|
@should_include = options.fetch("should_include", true)
|
89
46
|
@gemfile = options["gemfile"]
|
47
|
+
@force_ruby_platform = options["force_ruby_platform"] if options.key?("force_ruby_platform")
|
90
48
|
|
91
49
|
@autorequire = Array(options["require"] || []) if options.key?("require")
|
92
50
|
end
|
93
51
|
|
52
|
+
RUBY_PLATFORM_ARRAY = [Gem::Platform::RUBY].freeze
|
53
|
+
private_constant :RUBY_PLATFORM_ARRAY
|
54
|
+
|
94
55
|
# Returns the platforms this dependency is valid for, in the same order as
|
95
56
|
# passed in the `valid_platforms` parameter
|
96
57
|
def gem_platforms(valid_platforms)
|
58
|
+
return RUBY_PLATFORM_ARRAY if force_ruby_platform
|
97
59
|
return valid_platforms if @platforms.empty?
|
98
60
|
|
99
|
-
|
100
|
-
@gem_platforms ||= expanded_platforms.compact.uniq
|
101
|
-
|
102
|
-
filtered_generic_platforms = valid_generic_platforms.values & @gem_platforms
|
103
|
-
valid_generic_platforms.select {|_, v| filtered_generic_platforms.include?(v) }.keys
|
61
|
+
valid_platforms.select {|p| expanded_platforms.include?(GemHelpers.generic(p)) }
|
104
62
|
end
|
105
63
|
|
106
64
|
def expanded_platforms
|
107
|
-
@platforms.map {|pl| PLATFORM_MAP[pl] }
|
65
|
+
@expanded_platforms ||= @platforms.map {|pl| PLATFORM_MAP[pl] }.compact.flatten.uniq
|
108
66
|
end
|
109
67
|
|
110
68
|
def should_include?
|
111
69
|
@should_include && current_env? && current_platform?
|
112
70
|
end
|
113
71
|
|
72
|
+
def gemspec_dev_dep?
|
73
|
+
type == :development
|
74
|
+
end
|
75
|
+
|
114
76
|
def current_env?
|
115
77
|
return true unless @env
|
116
78
|
if @env.is_a?(Hash)
|
@@ -132,7 +94,7 @@ module Bundler
|
|
132
94
|
def to_lock
|
133
95
|
out = super
|
134
96
|
out << "!" if source
|
135
|
-
out
|
97
|
+
out
|
136
98
|
end
|
137
99
|
|
138
100
|
def specific?
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This code was extracted from https://github.com/Solistra/ruby-digest which is under public domain
|
4
|
+
module Bundler
|
5
|
+
module Digest
|
6
|
+
# The initial constant values for the 32-bit constant words A, B, C, D, and
|
7
|
+
# E, respectively.
|
8
|
+
SHA1_WORDS = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0].freeze
|
9
|
+
|
10
|
+
# The 8-bit field used for bitwise `AND` masking. Defaults to `0xFFFFFFFF`.
|
11
|
+
SHA1_MASK = 0xFFFFFFFF
|
12
|
+
|
13
|
+
class << self
|
14
|
+
def sha1(string)
|
15
|
+
unless string.is_a?(String)
|
16
|
+
raise TypeError, "can't convert #{string.class.inspect} into String"
|
17
|
+
end
|
18
|
+
|
19
|
+
buffer = string.b
|
20
|
+
|
21
|
+
words = SHA1_WORDS.dup
|
22
|
+
generate_split_buffer(buffer) do |chunk|
|
23
|
+
w = []
|
24
|
+
chunk.each_slice(4) do |a, b, c, d|
|
25
|
+
w << (((a << 8 | b) << 8 | c) << 8 | d)
|
26
|
+
end
|
27
|
+
a, b, c, d, e = *words
|
28
|
+
(16..79).each do |i|
|
29
|
+
w[i] = SHA1_MASK & rotate((w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]), 1)
|
30
|
+
end
|
31
|
+
0.upto(79) do |i|
|
32
|
+
case i
|
33
|
+
when 0..19
|
34
|
+
f = ((b & c) | (~b & d))
|
35
|
+
k = 0x5A827999
|
36
|
+
when 20..39
|
37
|
+
f = (b ^ c ^ d)
|
38
|
+
k = 0x6ED9EBA1
|
39
|
+
when 40..59
|
40
|
+
f = ((b & c) | (b & d) | (c & d))
|
41
|
+
k = 0x8F1BBCDC
|
42
|
+
when 60..79
|
43
|
+
f = (b ^ c ^ d)
|
44
|
+
k = 0xCA62C1D6
|
45
|
+
end
|
46
|
+
t = SHA1_MASK & rotate(a, 5) + f + e + k + w[i]
|
47
|
+
a, b, c, d, e = t, a, SHA1_MASK & rotate(b, 30), c, d # rubocop:disable Style/ParallelAssignment
|
48
|
+
end
|
49
|
+
mutated = [a, b, c, d, e]
|
50
|
+
words.map!.with_index {|word, index| SHA1_MASK & (word + mutated[index]) }
|
51
|
+
end
|
52
|
+
|
53
|
+
words.pack("N*").unpack1("H*")
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def generate_split_buffer(string, &block)
|
59
|
+
size = string.bytesize * 8
|
60
|
+
buffer = string.bytes << 128
|
61
|
+
buffer << 0 while buffer.size % 64 != 56
|
62
|
+
buffer.concat([size].pack("Q>").bytes)
|
63
|
+
buffer.each_slice(64, &block)
|
64
|
+
end
|
65
|
+
|
66
|
+
def rotate(value, spaces)
|
67
|
+
value << spaces | value >> (32 - spaces)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/bundler/dsl.rb
CHANGED
@@ -16,9 +16,12 @@ module Bundler
|
|
16
16
|
VALID_PLATFORMS = Bundler::Dependency::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 type source install_if gemfile].freeze
|
19
|
+
platform platforms type source install_if gemfile 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}
|
23
|
+
|
24
|
+
attr_reader :gemspecs, :gemfile
|
22
25
|
attr_accessor :dependencies
|
23
26
|
|
24
27
|
def initialize
|
@@ -39,12 +42,12 @@ module Bundler
|
|
39
42
|
end
|
40
43
|
|
41
44
|
def eval_gemfile(gemfile, contents = nil)
|
42
|
-
expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile
|
45
|
+
expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent)
|
43
46
|
original_gemfile = @gemfile
|
44
47
|
@gemfile = expanded_gemfile_path
|
45
48
|
@gemfiles << expanded_gemfile_path
|
46
49
|
contents ||= Bundler.read_file(@gemfile.to_s)
|
47
|
-
instance_eval(contents
|
50
|
+
instance_eval(contents, @gemfile.to_s, 1)
|
48
51
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
49
52
|
message = "There was an error " \
|
50
53
|
"#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
|
@@ -65,7 +68,6 @@ module Bundler
|
|
65
68
|
|
66
69
|
gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).map {|g| Bundler.load_gemspec(g) }.compact
|
67
70
|
gemspecs.reject! {|s| s.name != name } if name
|
68
|
-
Index.sort_specs(gemspecs)
|
69
71
|
specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
|
70
72
|
|
71
73
|
case specs_by_name_and_version.size
|
@@ -75,11 +77,11 @@ module Bundler
|
|
75
77
|
|
76
78
|
@gemspecs << spec
|
77
79
|
|
78
|
-
gem spec.name, :
|
80
|
+
gem spec.name, name: spec.name, path: path, glob: glob
|
79
81
|
|
80
82
|
group(development_group) do
|
81
83
|
spec.development_dependencies.each do |dep|
|
82
|
-
gem dep.name, *(dep.requirement.as_list + [:
|
84
|
+
gem dep.name, *(dep.requirement.as_list + [type: :development])
|
83
85
|
end
|
84
86
|
end
|
85
87
|
when 0
|
@@ -101,40 +103,50 @@ module Bundler
|
|
101
103
|
|
102
104
|
# if there's already a dependency with this name we try to prefer one
|
103
105
|
if current = @dependencies.find {|d| d.name == dep.name }
|
104
|
-
|
106
|
+
if current.requirement != dep.requirement
|
107
|
+
current_requirement_open = current.requirements_list.include?(">= 0")
|
105
108
|
|
106
|
-
|
107
|
-
if
|
108
|
-
|
109
|
+
gemspec_dep = [dep, current].find(&:gemspec_dev_dep?)
|
110
|
+
if gemspec_dep
|
111
|
+
gemfile_dep = [dep, current].find(&:runtime?)
|
109
112
|
|
113
|
+
unless current_requirement_open
|
114
|
+
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" \
|
115
|
+
"This behaviour may change in the future. Please remove either of them, or make sure they both have the same requirement\n"
|
116
|
+
end
|
117
|
+
else
|
110
118
|
update_prompt = ""
|
111
119
|
|
112
120
|
if File.basename(@gemfile) == Injector::INJECTED_GEMS
|
113
|
-
if dep.requirements_list.include?(">= 0") && !
|
121
|
+
if dep.requirements_list.include?(">= 0") && !current_requirement_open
|
114
122
|
update_prompt = ". Gem already added"
|
115
123
|
else
|
116
124
|
update_prompt = ". If you want to update the gem version, run `bundle update #{current.name}`"
|
117
125
|
|
118
|
-
update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless
|
126
|
+
update_prompt += ". You may also need to change the version requirement specified in the Gemfile if it's too restrictive." unless current_requirement_open
|
119
127
|
end
|
120
128
|
end
|
121
129
|
|
122
130
|
raise GemfileError, "You cannot specify the same gem twice with different version requirements.\n" \
|
123
|
-
|
124
|
-
|
125
|
-
else
|
126
|
-
Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
|
127
|
-
"You should probably keep only one of them.\n" \
|
128
|
-
"Remove any duplicate entries and specify the gem only once.\n" \
|
129
|
-
"While it's not a problem now, it could cause errors if you change the version of one of them later."
|
131
|
+
"You specified: #{current.name} (#{current.requirement}) and #{dep.name} (#{dep.requirement})" \
|
132
|
+
"#{update_prompt}"
|
130
133
|
end
|
134
|
+
end
|
131
135
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
136
|
+
# Always prefer the dependency from the Gemfile
|
137
|
+
if current.gemspec_dev_dep?
|
138
|
+
@dependencies.delete(current)
|
139
|
+
elsif dep.gemspec_dev_dep?
|
140
|
+
return
|
141
|
+
elsif current.source != dep.source
|
142
|
+
raise GemfileError, "You cannot specify the same gem twice coming from different sources.\n" \
|
143
|
+
"You specified that #{dep.name} (#{dep.requirement}) should come from " \
|
144
|
+
"#{current.source || "an unspecified source"} and #{dep.source}\n"
|
145
|
+
else
|
146
|
+
Bundler.ui.warn "Your Gemfile lists the gem #{current.name} (#{current.requirement}) more than once.\n" \
|
147
|
+
"You should probably keep only one of them.\n" \
|
148
|
+
"Remove any duplicate entries and specify the gem only once.\n" \
|
149
|
+
"While it's not a problem now, it could cause errors if you change the version of one of them later."
|
138
150
|
end
|
139
151
|
end
|
140
152
|
|
@@ -275,30 +287,42 @@ module Bundler
|
|
275
287
|
|
276
288
|
def add_git_sources
|
277
289
|
git_source(:github) do |repo_name|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
290
|
+
if repo_name =~ GITHUB_PULL_REQUEST_URL
|
291
|
+
{
|
292
|
+
"git" => "https://github.com/#{$1}.git",
|
293
|
+
"branch" => nil,
|
294
|
+
"ref" => "refs/pull/#{$2}/head",
|
295
|
+
"tag" => nil,
|
296
|
+
}
|
297
|
+
else
|
298
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
299
|
+
"https://github.com/#{repo_name}.git"
|
300
|
+
end
|
283
301
|
end
|
284
302
|
|
285
303
|
git_source(:gist) do |repo_name|
|
286
|
-
warn_deprecated_git_source(:gist, '"https://gist.github.com/#{repo_name}.git"')
|
287
|
-
|
288
304
|
"https://gist.github.com/#{repo_name}.git"
|
289
305
|
end
|
290
306
|
|
291
307
|
git_source(:bitbucket) do |repo_name|
|
292
|
-
warn_deprecated_git_source(:bitbucket, <<-'RUBY'.strip)
|
293
|
-
user_name, repo_name = repo_name.split("/")
|
294
|
-
repo_name ||= user_name
|
295
|
-
"https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
|
296
|
-
RUBY
|
297
|
-
|
298
308
|
user_name, repo_name = repo_name.split("/")
|
299
309
|
repo_name ||= user_name
|
300
310
|
"https://#{user_name}@bitbucket.org/#{user_name}/#{repo_name}.git"
|
301
311
|
end
|
312
|
+
|
313
|
+
git_source(:gitlab) do |repo_name|
|
314
|
+
if repo_name =~ GITLAB_MERGE_REQUEST_URL
|
315
|
+
{
|
316
|
+
"git" => "https://gitlab.com/#{$1}.git",
|
317
|
+
"branch" => nil,
|
318
|
+
"ref" => "refs/merge-requests/#{$2}/head",
|
319
|
+
"tag" => nil,
|
320
|
+
}
|
321
|
+
else
|
322
|
+
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
323
|
+
"https://gitlab.com/#{repo_name}.git"
|
324
|
+
end
|
325
|
+
end
|
302
326
|
end
|
303
327
|
|
304
328
|
def with_source(source)
|
@@ -327,7 +351,7 @@ repo_name ||= user_name
|
|
327
351
|
if name.is_a?(Symbol)
|
328
352
|
raise GemfileError, %(You need to specify gem names as Strings. Use 'gem "#{name}"' instead)
|
329
353
|
end
|
330
|
-
if
|
354
|
+
if /\s/.match?(name)
|
331
355
|
raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
|
332
356
|
end
|
333
357
|
raise GemfileError, %(an empty gem name is not valid) if name.empty?
|
@@ -365,7 +389,11 @@ repo_name ||= user_name
|
|
365
389
|
|
366
390
|
git_name = (git_names & opts.keys).last
|
367
391
|
if @git_sources[git_name]
|
368
|
-
|
392
|
+
git_opts = @git_sources[git_name].call(opts[git_name])
|
393
|
+
git_opts = { "git" => git_opts } if git_opts.is_a?(String)
|
394
|
+
opts.merge!(git_opts) do |key, _gemfile_value, _git_source_value|
|
395
|
+
raise GemfileError, %(The :#{key} option can't be used with `#{git_name}: #{opts[git_name].inspect}`)
|
396
|
+
end
|
369
397
|
end
|
370
398
|
|
371
399
|
%w[git path].each do |type|
|
@@ -396,13 +424,11 @@ repo_name ||= user_name
|
|
396
424
|
end
|
397
425
|
|
398
426
|
def validate_keys(command, opts, valid_keys)
|
399
|
-
|
400
|
-
|
401
|
-
git_source = opts.keys & @git_sources.keys.map(&:to_s)
|
402
|
-
if opts["branch"] && !(opts["git"] || opts["github"] || git_source.any?)
|
427
|
+
if opts["branch"] && !(opts["git"] || opts["github"] || (opts.keys & @git_sources.keys.map(&:to_s)).any?)
|
403
428
|
raise GemfileError, %(The `branch` option for `#{command}` is not allowed. Only gems with a git source can specify a branch)
|
404
429
|
end
|
405
430
|
|
431
|
+
invalid_keys = opts.keys - valid_keys
|
406
432
|
return true unless invalid_keys.any?
|
407
433
|
|
408
434
|
message = String.new
|
@@ -421,9 +447,13 @@ repo_name ||= user_name
|
|
421
447
|
def normalize_source(source)
|
422
448
|
case source
|
423
449
|
when :gemcutter, :rubygems, :rubyforge
|
424
|
-
|
425
|
-
"
|
426
|
-
"rubygems.org' if possible, or 'http://rubygems.org' if not."
|
450
|
+
message =
|
451
|
+
"The source :#{source} is deprecated because HTTP requests are insecure.\n" \
|
452
|
+
"Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not."
|
453
|
+
removed_message =
|
454
|
+
"The source :#{source} is disallowed because HTTP requests are insecure.\n" \
|
455
|
+
"Please change your source to 'https://rubygems.org' if possible, or 'http://rubygems.org' if not."
|
456
|
+
Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
|
427
457
|
"http://rubygems.org"
|
428
458
|
when String
|
429
459
|
source
|
@@ -463,34 +493,25 @@ repo_name ||= user_name
|
|
463
493
|
|
464
494
|
def multiple_global_source_warning
|
465
495
|
if Bundler.feature_flag.bundler_3_mode?
|
466
|
-
msg = "This Gemfile contains multiple
|
496
|
+
msg = "This Gemfile contains multiple global sources. " \
|
467
497
|
"Each source after the first must include a block to indicate which gems " \
|
468
498
|
"should come from that source"
|
469
499
|
raise GemfileEvalError, msg
|
470
500
|
else
|
471
|
-
|
501
|
+
message =
|
502
|
+
"Your Gemfile contains multiple global sources. " \
|
472
503
|
"Using `source` more than once without a block is a security risk, and " \
|
473
504
|
"may result in installing unexpected gems. To resolve this warning, use " \
|
474
505
|
"a block to indicate which gems should come from the secondary source."
|
506
|
+
removed_message =
|
507
|
+
"Your Gemfile contains multiple global sources. " \
|
508
|
+
"Using `source` more than once without a block is a security risk, and " \
|
509
|
+
"may result in installing unexpected gems. To resolve this error, use " \
|
510
|
+
"a block to indicate which gems should come from the secondary source."
|
511
|
+
Bundler::SharedHelpers.major_deprecation 2, message, removed_message: removed_message
|
475
512
|
end
|
476
513
|
end
|
477
514
|
|
478
|
-
def warn_deprecated_git_source(name, replacement, additional_message = nil)
|
479
|
-
additional_message &&= " #{additional_message}"
|
480
|
-
replacement = if replacement.count("\n").zero?
|
481
|
-
"{|repo_name| #{replacement} }"
|
482
|
-
else
|
483
|
-
"do |repo_name|\n#{replacement.to_s.gsub(/^/, " ")}\n end"
|
484
|
-
end
|
485
|
-
|
486
|
-
Bundler::SharedHelpers.major_deprecation 3, <<-EOS
|
487
|
-
The :#{name} git source is deprecated, and will be removed in the future.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
|
488
|
-
|
489
|
-
git_source(:#{name}) #{replacement}
|
490
|
-
|
491
|
-
EOS
|
492
|
-
end
|
493
|
-
|
494
515
|
class DSLError < GemfileError
|
495
516
|
# @return [String] the description that should be presented to the user.
|
496
517
|
#
|
@@ -525,9 +546,7 @@ The :#{name} git source is deprecated, and will be removed in the future.#{addit
|
|
525
546
|
# be raised.
|
526
547
|
#
|
527
548
|
def contents
|
528
|
-
@contents ||=
|
529
|
-
dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
|
530
|
-
end
|
549
|
+
@contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path)
|
531
550
|
end
|
532
551
|
|
533
552
|
# The message of the exception reports the content of podspec for the
|
@@ -3,17 +3,17 @@
|
|
3
3
|
module Bundler
|
4
4
|
# used for Creating Specifications from the Gemcutter Endpoint
|
5
5
|
class EndpointSpecification < Gem::Specification
|
6
|
-
|
7
|
-
include MatchPlatform
|
6
|
+
include MatchRemoteMetadata
|
8
7
|
|
9
|
-
attr_reader :name, :version, :platform, :
|
8
|
+
attr_reader :name, :version, :platform, :checksum
|
10
9
|
attr_accessor :source, :remote, :dependencies
|
11
10
|
|
12
|
-
def initialize(name, version, platform, dependencies, metadata = nil)
|
11
|
+
def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
|
13
12
|
super()
|
14
13
|
@name = name
|
15
14
|
@version = Gem::Version.create version
|
16
|
-
@platform = platform
|
15
|
+
@platform = Gem::Platform.new(platform)
|
16
|
+
@spec_fetcher = spec_fetcher
|
17
17
|
@dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
|
18
18
|
|
19
19
|
@loaded_from = nil
|
@@ -92,9 +92,20 @@ module Bundler
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
+
# needed for `bundle fund`
|
96
|
+
def metadata
|
97
|
+
if @remote_specification
|
98
|
+
@remote_specification.metadata
|
99
|
+
elsif _local_specification
|
100
|
+
_local_specification.metadata
|
101
|
+
else
|
102
|
+
super
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
95
106
|
def _local_specification
|
96
107
|
return unless @loaded_from && File.exist?(local_specification_path)
|
97
|
-
eval(File.read(local_specification_path)).tap do |spec|
|
108
|
+
eval(File.read(local_specification_path), nil, local_specification_path).tap do |spec|
|
98
109
|
spec.loaded_from = @loaded_from
|
99
110
|
end
|
100
111
|
end
|
@@ -106,17 +117,30 @@ module Bundler
|
|
106
117
|
|
107
118
|
private
|
108
119
|
|
120
|
+
def _remote_specification
|
121
|
+
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
|
122
|
+
end
|
123
|
+
|
109
124
|
def local_specification_path
|
110
125
|
"#{base_dir}/specifications/#{full_name}.gemspec"
|
111
126
|
end
|
112
127
|
|
113
128
|
def parse_metadata(data)
|
114
|
-
|
129
|
+
unless data
|
130
|
+
@required_ruby_version = nil
|
131
|
+
@required_rubygems_version = nil
|
132
|
+
return
|
133
|
+
end
|
134
|
+
|
115
135
|
data.each do |k, v|
|
116
136
|
next unless v
|
117
137
|
case k.to_s
|
118
138
|
when "checksum"
|
119
|
-
|
139
|
+
begin
|
140
|
+
@checksum = Checksum.from_api(v.last, @spec_fetcher.uri)
|
141
|
+
rescue ArgumentError => e
|
142
|
+
raise ArgumentError, "Invalid checksum for #{full_name}: #{e.message}"
|
143
|
+
end
|
120
144
|
when "rubygems"
|
121
145
|
@required_rubygems_version = Gem::Requirement.new(v)
|
122
146
|
when "ruby"
|
@@ -129,13 +153,6 @@ module Bundler
|
|
129
153
|
|
130
154
|
def build_dependency(name, requirements)
|
131
155
|
Gem::Dependency.new(name, requirements)
|
132
|
-
rescue ArgumentError => e
|
133
|
-
raise unless e.message.include?(ILLFORMED_MESSAGE)
|
134
|
-
puts # we shouldn't print the error message on the "fetching info" status line
|
135
|
-
raise GemspecError,
|
136
|
-
"Unfortunately, the gem #{name} (#{version}) has an invalid " \
|
137
|
-
"gemspec.\nPlease ask the gem author to yank the bad version to fix " \
|
138
|
-
"this issue. For more information, see http://bit.ly/syck-defaultkey."
|
139
156
|
end
|
140
157
|
end
|
141
158
|
end
|
data/lib/bundler/env.rb
CHANGED
@@ -40,11 +40,11 @@ module Bundler
|
|
40
40
|
|
41
41
|
out << "\n## Gemfile\n"
|
42
42
|
gemfiles.each do |gemfile|
|
43
|
-
out << "\n### #{
|
43
|
+
out << "\n### #{SharedHelpers.relative_path_to(gemfile)}\n\n"
|
44
44
|
out << "```ruby\n" << read_file(gemfile).chomp << "\n```\n"
|
45
45
|
end
|
46
46
|
|
47
|
-
out << "\n### #{Bundler.default_lockfile
|
47
|
+
out << "\n### #{SharedHelpers.relative_path_to(Bundler.default_lockfile)}\n\n"
|
48
48
|
out << "```\n" << read_file(Bundler.default_lockfile).chomp << "\n```\n"
|
49
49
|
end
|
50
50
|
|
@@ -69,13 +69,11 @@ module Bundler
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def self.ruby_version
|
72
|
-
|
73
|
-
str << "p#{RUBY_PATCHLEVEL}" if defined? RUBY_PATCHLEVEL
|
74
|
-
str << " (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{RUBY_PLATFORM}]"
|
72
|
+
"#{RUBY_VERSION}p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE} revision #{RUBY_REVISION}) [#{Gem::Platform.local}]"
|
75
73
|
end
|
76
74
|
|
77
75
|
def self.git_version
|
78
|
-
Bundler::Source::Git::GitProxy.new(nil, nil
|
76
|
+
Bundler::Source::Git::GitProxy.new(nil, nil).full_version
|
79
77
|
rescue Bundler::Source::Git::GitNotInstalledError
|
80
78
|
"not installed"
|
81
79
|
end
|
@@ -122,7 +120,7 @@ module Bundler
|
|
122
120
|
specs = Bundler.rubygems.find_name(name)
|
123
121
|
out << [" #{name}", "(#{specs.map(&:version).join(",")})"] unless specs.empty?
|
124
122
|
end
|
125
|
-
if (exe =
|
123
|
+
if (exe = caller_locations.last.absolute_path)&.match? %r{(exe|bin)/bundler?\z}
|
126
124
|
shebang = File.read(exe).lines.first
|
127
125
|
shebang.sub!(/^#!\s*/, "")
|
128
126
|
unless shebang.start_with?(Gem.ruby, "/usr/bin/env ruby")
|