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
@@ -1,55 +1,88 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "
|
3
|
+
require_relative "force_platform"
|
4
4
|
|
5
5
|
module Bundler
|
6
6
|
class LazySpecification
|
7
|
+
include MatchMetadata
|
7
8
|
include MatchPlatform
|
9
|
+
include ForcePlatform
|
8
10
|
|
9
|
-
attr_reader :name, :version, :
|
10
|
-
attr_accessor :source, :remote
|
11
|
+
attr_reader :name, :version, :platform
|
12
|
+
attr_accessor :source, :remote, :force_ruby_platform, :dependencies, :required_ruby_version, :required_rubygems_version
|
13
|
+
|
14
|
+
alias_method :runtime_dependencies, :dependencies
|
15
|
+
|
16
|
+
def self.from_spec(s)
|
17
|
+
lazy_spec = new(s.name, s.version, s.platform, s.source)
|
18
|
+
lazy_spec.dependencies = s.dependencies
|
19
|
+
lazy_spec.required_ruby_version = s.required_ruby_version
|
20
|
+
lazy_spec.required_rubygems_version = s.required_rubygems_version
|
21
|
+
lazy_spec
|
22
|
+
end
|
11
23
|
|
12
24
|
def initialize(name, version, platform, source = nil)
|
13
25
|
@name = name
|
14
26
|
@version = version
|
15
27
|
@dependencies = []
|
28
|
+
@required_ruby_version = Gem::Requirement.default
|
29
|
+
@required_rubygems_version = Gem::Requirement.default
|
16
30
|
@platform = platform || Gem::Platform::RUBY
|
17
31
|
@source = source
|
18
|
-
@
|
32
|
+
@force_ruby_platform = default_force_ruby_platform
|
19
33
|
end
|
20
34
|
|
21
35
|
def full_name
|
22
|
-
if platform == Gem::Platform::RUBY
|
36
|
+
@full_name ||= if platform == Gem::Platform::RUBY
|
23
37
|
"#{@name}-#{@version}"
|
24
38
|
else
|
25
39
|
"#{@name}-#{@version}-#{platform}"
|
26
40
|
end
|
27
41
|
end
|
28
42
|
|
43
|
+
def lock_name
|
44
|
+
@lock_name ||= name_tuple.lock_name
|
45
|
+
end
|
46
|
+
|
47
|
+
def name_tuple
|
48
|
+
Gem::NameTuple.new(@name, @version, @platform)
|
49
|
+
end
|
50
|
+
|
29
51
|
def ==(other)
|
30
|
-
|
52
|
+
full_name == other.full_name
|
31
53
|
end
|
32
54
|
|
33
55
|
def eql?(other)
|
34
|
-
|
56
|
+
full_name.eql?(other.full_name)
|
35
57
|
end
|
36
58
|
|
37
59
|
def hash
|
38
|
-
|
60
|
+
full_name.hash
|
39
61
|
end
|
40
62
|
|
63
|
+
##
|
64
|
+
# Does this locked specification satisfy +dependency+?
|
65
|
+
#
|
66
|
+
# NOTE: Rubygems default requirement is ">= 0", which doesn't match
|
67
|
+
# prereleases of 0 versions, like "0.0.0.dev" or "0.0.0.SNAPSHOT". However,
|
68
|
+
# bundler users expect those to work. We need to make sure that Gemfile
|
69
|
+
# dependencies without explicit requirements (which use ">= 0" under the
|
70
|
+
# hood by default) are still valid for locked specs using this kind of
|
71
|
+
# versions. The method implements an ad-hoc fix for that. A better solution
|
72
|
+
# might be to change default rubygems requirement of dependencies to be ">=
|
73
|
+
# 0.A" but that's a major refactoring likely to break things. Hopefully we
|
74
|
+
# can attempt it in the future.
|
75
|
+
#
|
76
|
+
|
41
77
|
def satisfies?(dependency)
|
42
|
-
|
78
|
+
effective_requirement = dependency.requirement == Gem::Requirement.default ? Gem::Requirement.new(">= 0.A") : dependency.requirement
|
79
|
+
|
80
|
+
@name == dependency.name && effective_requirement.satisfied_by?(Gem::Version.new(@version))
|
43
81
|
end
|
44
82
|
|
45
83
|
def to_lock
|
46
84
|
out = String.new
|
47
|
-
|
48
|
-
if platform == Gem::Platform::RUBY || platform.nil?
|
49
|
-
out << " #{name} (#{version})\n"
|
50
|
-
else
|
51
|
-
out << " #{name} (#{version}-#{platform})\n"
|
52
|
-
end
|
85
|
+
out << " #{lock_name}\n"
|
53
86
|
|
54
87
|
dependencies.sort_by(&:to_s).uniq.each do |dep|
|
55
88
|
next if dep.type == :development
|
@@ -59,45 +92,51 @@ module Bundler
|
|
59
92
|
out
|
60
93
|
end
|
61
94
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
95
|
+
def materialize_for_installation
|
96
|
+
source.local!
|
97
|
+
|
98
|
+
matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version])
|
99
|
+
return self if matching_specs.empty?
|
100
|
+
|
101
|
+
candidates = if use_exact_resolved_specifications?
|
102
|
+
matching_specs
|
65
103
|
else
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
76
|
-
installable_candidates = same_platform_candidates.select do |spec|
|
77
|
-
!spec.is_a?(EndpointSpecification) ||
|
78
|
-
(spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
|
79
|
-
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
|
104
|
+
target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
|
105
|
+
|
106
|
+
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
107
|
+
|
108
|
+
specification = __materialize__(installable_candidates, fallback_to_non_installable: false)
|
109
|
+
return specification unless specification.nil?
|
110
|
+
|
111
|
+
if target_platform != platform
|
112
|
+
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, platform)
|
80
113
|
end
|
81
|
-
|
82
|
-
|
83
|
-
search
|
114
|
+
|
115
|
+
installable_candidates
|
84
116
|
end
|
85
|
-
end
|
86
117
|
|
87
|
-
|
88
|
-
super || @specification ? @specification.respond_to?(*args) : nil
|
118
|
+
__materialize__(candidates)
|
89
119
|
end
|
90
120
|
|
91
|
-
|
92
|
-
|
93
|
-
|
121
|
+
# If in frozen mode, we fallback to a non-installable candidate because by
|
122
|
+
# doing this we avoid re-resolving and potentially end up changing the
|
123
|
+
# lock file, which is not allowed. In that case, we will give a proper error
|
124
|
+
# about the mismatch higher up the stack, right before trying to install the
|
125
|
+
# bad gem.
|
126
|
+
def __materialize__(candidates, fallback_to_non_installable: Bundler.frozen_bundle?)
|
127
|
+
search = candidates.reverse.find do |spec|
|
128
|
+
spec.is_a?(StubSpecification) || spec.matches_current_metadata?
|
129
|
+
end
|
130
|
+
if search.nil? && fallback_to_non_installable
|
131
|
+
search = candidates.last
|
94
132
|
else
|
95
|
-
|
133
|
+
search.dependencies = dependencies if search && search.full_name == full_name && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
96
134
|
end
|
135
|
+
search
|
97
136
|
end
|
98
137
|
|
99
|
-
def
|
100
|
-
|
138
|
+
def to_s
|
139
|
+
lock_name
|
101
140
|
end
|
102
141
|
|
103
142
|
def git_version
|
@@ -105,30 +144,20 @@ module Bundler
|
|
105
144
|
" #{source.revision[0..6]}"
|
106
145
|
end
|
107
146
|
|
108
|
-
|
109
|
-
|
110
|
-
def platform_string
|
111
|
-
platform_string = platform.to_s
|
112
|
-
platform_string == Index::RUBY ? Index::NULL : platform_string
|
147
|
+
def force_ruby_platform!
|
148
|
+
@force_ruby_platform = true
|
113
149
|
end
|
114
150
|
|
115
151
|
private
|
116
152
|
|
117
|
-
def
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
def method_missing(method, *args, &blk)
|
122
|
-
raise "LazySpecification has not been materialized yet (calling :#{method} #{args.inspect})" unless @specification
|
123
|
-
|
124
|
-
return super unless respond_to?(method)
|
125
|
-
|
126
|
-
@specification.send(method, *args, &blk)
|
153
|
+
def use_exact_resolved_specifications?
|
154
|
+
@use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
|
127
155
|
end
|
128
156
|
|
129
157
|
#
|
130
158
|
# For backwards compatibility with existing lockfiles, if the most specific
|
131
|
-
# locked platform is
|
159
|
+
# locked platform is not a specific platform like x86_64-linux or
|
160
|
+
# universal-java-11, then we keep the previous behaviour of resolving the
|
132
161
|
# best platform variant at materiliazation time. For previous bundler
|
133
162
|
# versions (before 2.2.0) this was always the case (except when the lockfile
|
134
163
|
# only included non-ruby platforms), but we're also keeping this behaviour
|
@@ -136,7 +165,9 @@ module Bundler
|
|
136
165
|
# explicitly add a more specific platform.
|
137
166
|
#
|
138
167
|
def ruby_platform_materializes_to_ruby_platform?
|
139
|
-
|
168
|
+
generic_platform = generic_local_platform == Gem::Platform::JAVA ? Gem::Platform::JAVA : Gem::Platform::RUBY
|
169
|
+
|
170
|
+
!Bundler.most_specific_locked_platform?(generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
|
140
171
|
end
|
141
172
|
end
|
142
173
|
end
|
@@ -19,6 +19,7 @@ module Bundler
|
|
19
19
|
add_sources
|
20
20
|
add_platforms
|
21
21
|
add_dependencies
|
22
|
+
add_checksums
|
22
23
|
add_locked_ruby_version
|
23
24
|
add_bundled_with
|
24
25
|
|
@@ -45,7 +46,7 @@ module Bundler
|
|
45
46
|
# gems with the same name, but different platform
|
46
47
|
# are ordered consistently
|
47
48
|
specs.sort_by(&:full_name).each do |spec|
|
48
|
-
next if spec.name == "bundler"
|
49
|
+
next if spec.name == "bundler"
|
49
50
|
out << spec.to_lock
|
50
51
|
end
|
51
52
|
end
|
@@ -60,18 +61,26 @@ module Bundler
|
|
60
61
|
handled = []
|
61
62
|
definition.dependencies.sort_by(&:to_s).each do |dep|
|
62
63
|
next if handled.include?(dep.name)
|
63
|
-
out << dep.to_lock
|
64
|
+
out << dep.to_lock << "\n"
|
64
65
|
handled << dep.name
|
65
66
|
end
|
66
67
|
end
|
67
68
|
|
69
|
+
def add_checksums
|
70
|
+
return unless definition.locked_checksums
|
71
|
+
checksums = definition.resolve.map do |spec|
|
72
|
+
spec.source.checksum_store.to_lock(spec)
|
73
|
+
end
|
74
|
+
add_section("CHECKSUMS", checksums)
|
75
|
+
end
|
76
|
+
|
68
77
|
def add_locked_ruby_version
|
69
78
|
return unless locked_ruby_version = definition.locked_ruby_version
|
70
79
|
add_section("RUBY VERSION", locked_ruby_version.to_s)
|
71
80
|
end
|
72
81
|
|
73
82
|
def add_bundled_with
|
74
|
-
add_section("BUNDLED WITH", definition.
|
83
|
+
add_section("BUNDLED WITH", definition.bundler_version_to_lock.to_s)
|
75
84
|
end
|
76
85
|
|
77
86
|
def add_section(name, value)
|
@@ -2,18 +2,49 @@
|
|
2
2
|
|
3
3
|
module Bundler
|
4
4
|
class LockfileParser
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
5
|
+
class Position
|
6
|
+
attr_reader :line, :column
|
7
|
+
def initialize(line, column)
|
8
|
+
@line = line
|
9
|
+
@column = column
|
10
|
+
end
|
11
|
+
|
12
|
+
def advance!(string)
|
13
|
+
lines = string.count("\n")
|
14
|
+
if lines > 0
|
15
|
+
@line += lines
|
16
|
+
@column = string.length - string.rindex("\n")
|
17
|
+
else
|
18
|
+
@column += string.length
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_s
|
23
|
+
"#{line}:#{column}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_reader(
|
28
|
+
:sources,
|
29
|
+
:dependencies,
|
30
|
+
:specs,
|
31
|
+
:platforms,
|
32
|
+
:bundler_version,
|
33
|
+
:ruby_version,
|
34
|
+
:checksums,
|
35
|
+
)
|
36
|
+
|
37
|
+
BUNDLED = "BUNDLED WITH"
|
38
|
+
DEPENDENCIES = "DEPENDENCIES"
|
39
|
+
CHECKSUMS = "CHECKSUMS"
|
40
|
+
PLATFORMS = "PLATFORMS"
|
41
|
+
RUBY = "RUBY VERSION"
|
42
|
+
GIT = "GIT"
|
43
|
+
GEM = "GEM"
|
44
|
+
PATH = "PATH"
|
45
|
+
PLUGIN = "PLUGIN SOURCE"
|
46
|
+
SPECS = " specs:"
|
47
|
+
OPTIONS = /^ ([a-z]+): (.*)$/i
|
17
48
|
SOURCE = [GIT, GEM, PATH, PLUGIN].freeze
|
18
49
|
|
19
50
|
SECTIONS_BY_VERSION_INTRODUCED = {
|
@@ -21,14 +52,18 @@ module Bundler
|
|
21
52
|
Gem::Version.create("1.10") => [BUNDLED].freeze,
|
22
53
|
Gem::Version.create("1.12") => [RUBY].freeze,
|
23
54
|
Gem::Version.create("1.13") => [PLUGIN].freeze,
|
55
|
+
Gem::Version.create("2.5.0") => [CHECKSUMS].freeze,
|
24
56
|
}.freeze
|
25
57
|
|
26
|
-
KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten
|
58
|
+
KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten!.freeze
|
27
59
|
|
28
60
|
ENVIRONMENT_VERSION_SECTIONS = [BUNDLED, RUBY].freeze
|
61
|
+
deprecate_constant(:ENVIRONMENT_VERSION_SECTIONS)
|
29
62
|
|
30
63
|
def self.sections_in_lockfile(lockfile_contents)
|
31
|
-
lockfile_contents.scan(/^\w[\w ]*$/)
|
64
|
+
sections = lockfile_contents.scan(/^\w[\w ]*$/)
|
65
|
+
sections.uniq!
|
66
|
+
sections
|
32
67
|
end
|
33
68
|
|
34
69
|
def self.unknown_sections_in_lockfile(lockfile_contents)
|
@@ -37,7 +72,7 @@ module Bundler
|
|
37
72
|
|
38
73
|
def self.sections_to_ignore(base_version = nil)
|
39
74
|
base_version &&= base_version.release
|
40
|
-
base_version ||= Gem::Version.create("1.0"
|
75
|
+
base_version ||= Gem::Version.create("1.0")
|
41
76
|
attributes = []
|
42
77
|
SECTIONS_BY_VERSION_INTRODUCED.each do |version, introduced|
|
43
78
|
next if version <= base_version
|
@@ -46,82 +81,88 @@ module Bundler
|
|
46
81
|
attributes
|
47
82
|
end
|
48
83
|
|
84
|
+
def self.bundled_with
|
85
|
+
lockfile = Bundler.default_lockfile
|
86
|
+
return unless lockfile.file?
|
87
|
+
|
88
|
+
lockfile_contents = Bundler.read_file(lockfile)
|
89
|
+
return unless lockfile_contents.include?(BUNDLED)
|
90
|
+
|
91
|
+
lockfile_contents.split(BUNDLED).last.strip
|
92
|
+
end
|
93
|
+
|
49
94
|
def initialize(lockfile)
|
50
95
|
@platforms = []
|
51
96
|
@sources = []
|
52
97
|
@dependencies = {}
|
53
|
-
@
|
98
|
+
@parse_method = nil
|
54
99
|
@specs = {}
|
100
|
+
@lockfile_path = begin
|
101
|
+
SharedHelpers.relative_lockfile_path
|
102
|
+
rescue GemfileNotFound
|
103
|
+
"Gemfile.lock"
|
104
|
+
end
|
105
|
+
@pos = Position.new(1, 1)
|
55
106
|
|
56
|
-
if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
|
57
|
-
raise LockfileError, "Your #{
|
58
|
-
"Run `git checkout HEAD -- #{
|
107
|
+
if lockfile.match?(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/)
|
108
|
+
raise LockfileError, "Your #{@lockfile_path} contains merge conflicts.\n" \
|
109
|
+
"Run `git checkout HEAD -- #{@lockfile_path}` first to get a clean lock."
|
59
110
|
end
|
60
111
|
|
61
|
-
lockfile.split(/(?:\r?\n)
|
112
|
+
lockfile.split(/((?:\r?\n)+)/) do |line|
|
113
|
+
# split alternates between the line and the following whitespace
|
114
|
+
next @pos.advance!(line) if line.match?(/^\s*$/)
|
115
|
+
|
62
116
|
if SOURCE.include?(line)
|
63
|
-
@
|
117
|
+
@parse_method = :parse_source
|
64
118
|
parse_source(line)
|
65
119
|
elsif line == DEPENDENCIES
|
66
|
-
@
|
120
|
+
@parse_method = :parse_dependency
|
121
|
+
elsif line == CHECKSUMS
|
122
|
+
# This is a temporary solution to make this feature disabled by default
|
123
|
+
# for all gemfiles that don't already explicitly include the feature.
|
124
|
+
@checksums = true
|
125
|
+
@parse_method = :parse_checksum
|
67
126
|
elsif line == PLATFORMS
|
68
|
-
@
|
127
|
+
@parse_method = :parse_platform
|
69
128
|
elsif line == RUBY
|
70
|
-
@
|
129
|
+
@parse_method = :parse_ruby
|
71
130
|
elsif line == BUNDLED
|
72
|
-
@
|
73
|
-
elsif
|
74
|
-
@
|
75
|
-
elsif @
|
76
|
-
send(
|
131
|
+
@parse_method = :parse_bundled_with
|
132
|
+
elsif /^[^\s]/.match?(line)
|
133
|
+
@parse_method = nil
|
134
|
+
elsif @parse_method
|
135
|
+
send(@parse_method, line)
|
77
136
|
end
|
137
|
+
@pos.advance!(line)
|
78
138
|
end
|
79
|
-
@specs = @specs.values.sort_by(&:
|
80
|
-
warn_for_outdated_bundler_version
|
139
|
+
@specs = @specs.values.sort_by!(&:full_name)
|
81
140
|
rescue ArgumentError => e
|
82
141
|
Bundler.ui.debug(e)
|
83
|
-
raise LockfileError, "Your lockfile is unreadable. Run `rm #{
|
84
|
-
"and then `bundle install` to generate a new lockfile."
|
142
|
+
raise LockfileError, "Your lockfile is unreadable. Run `rm #{@lockfile_path}` " \
|
143
|
+
"and then `bundle install` to generate a new lockfile. The error occurred while " \
|
144
|
+
"evaluating #{@lockfile_path}:#{@pos}"
|
85
145
|
end
|
86
146
|
|
87
|
-
def
|
88
|
-
|
89
|
-
prerelease_text = bundler_version.prerelease? ? " --pre" : ""
|
90
|
-
current_version = Gem::Version.create(Bundler::VERSION)
|
91
|
-
return unless current_version < bundler_version
|
92
|
-
Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \
|
93
|
-
"than the version that created the lockfile (#{bundler_version}). We suggest you to " \
|
94
|
-
"upgrade to the version that created the lockfile by running `gem install " \
|
95
|
-
"bundler:#{bundler_version}#{prerelease_text}`.\n"
|
147
|
+
def may_include_redundant_platform_specific_gems?
|
148
|
+
bundler_version.nil? || bundler_version < Gem::Version.new("1.16.2")
|
96
149
|
end
|
97
150
|
|
98
151
|
private
|
99
152
|
|
100
153
|
TYPES = {
|
101
|
-
GIT
|
102
|
-
GEM
|
103
|
-
PATH
|
154
|
+
GIT => Bundler::Source::Git,
|
155
|
+
GEM => Bundler::Source::Rubygems,
|
156
|
+
PATH => Bundler::Source::Path,
|
104
157
|
PLUGIN => Bundler::Plugin,
|
105
158
|
}.freeze
|
106
159
|
|
107
160
|
def parse_source(line)
|
108
161
|
case line
|
109
162
|
when SPECS
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
@sources << @current_source
|
114
|
-
when GIT
|
115
|
-
@current_source = TYPES[@type].from_lock(@opts)
|
116
|
-
@sources << @current_source
|
117
|
-
when GEM
|
118
|
-
@opts["remotes"] = Array(@opts.delete("remote")).reverse
|
119
|
-
@current_source = TYPES[@type].from_lock(@opts)
|
120
|
-
@sources << @current_source
|
121
|
-
when PLUGIN
|
122
|
-
@current_source = Plugin.source_from_lock(@opts)
|
123
|
-
@sources << @current_source
|
124
|
-
end
|
163
|
+
return unless TYPES.key?(@type)
|
164
|
+
@current_source = TYPES[@type].from_lock(@opts)
|
165
|
+
@sources << @current_source
|
125
166
|
when OPTIONS
|
126
167
|
value = $2
|
127
168
|
value = true if value == "true"
|
@@ -151,18 +192,19 @@ module Bundler
|
|
151
192
|
(?:#{space}\(([^-]*) # Space, followed by version
|
152
193
|
(?:-(.*))?\))? # Optional platform
|
153
194
|
(!)? # Optional pinned marker
|
195
|
+
(?:#{space}([^ ]+))? # Optional checksum
|
154
196
|
$ # Line end
|
155
|
-
/xo
|
197
|
+
/xo
|
156
198
|
|
157
199
|
def parse_dependency(line)
|
158
200
|
return unless line =~ NAME_VERSION
|
159
201
|
spaces = $1
|
160
202
|
return unless spaces.size == 2
|
161
|
-
name =
|
203
|
+
name = -$2
|
162
204
|
version = $3
|
163
205
|
pinned = $5
|
164
206
|
|
165
|
-
version = version.split(",").
|
207
|
+
version = version.split(",").each(&:strip!) if version
|
166
208
|
|
167
209
|
dep = Bundler::Dependency.new(name, version)
|
168
210
|
|
@@ -183,23 +225,47 @@ module Bundler
|
|
183
225
|
@dependencies[dep.name] = dep
|
184
226
|
end
|
185
227
|
|
186
|
-
def
|
228
|
+
def parse_checksum(line)
|
187
229
|
return unless line =~ NAME_VERSION
|
230
|
+
|
188
231
|
spaces = $1
|
232
|
+
return unless spaces.size == 2
|
233
|
+
checksums = $6
|
234
|
+
return unless checksums
|
189
235
|
name = $2
|
190
236
|
version = $3
|
191
237
|
platform = $4
|
192
238
|
|
239
|
+
version = Gem::Version.new(version)
|
240
|
+
platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
241
|
+
full_name = Gem::NameTuple.new(name, version, platform).full_name
|
242
|
+
return unless spec = @specs[full_name]
|
243
|
+
|
244
|
+
checksums.split(",") do |lock_checksum|
|
245
|
+
column = line.index(lock_checksum) + 1
|
246
|
+
checksum = Checksum.from_lock(lock_checksum, "#{@lockfile_path}:#{@pos.line}:#{column}")
|
247
|
+
spec.source.checksum_store.register(spec, checksum)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
def parse_spec(line)
|
252
|
+
return unless line =~ NAME_VERSION
|
253
|
+
spaces = $1
|
254
|
+
name = -$2
|
255
|
+
version = $3
|
256
|
+
|
193
257
|
if spaces.size == 4
|
258
|
+
# only load platform for non-dependency (spec) line
|
259
|
+
platform = $4
|
260
|
+
|
194
261
|
version = Gem::Version.new(version)
|
195
262
|
platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
196
|
-
@current_spec = LazySpecification.new(name, version, platform)
|
197
|
-
@current_spec.source = @current_source
|
263
|
+
@current_spec = LazySpecification.new(name, version, platform, @current_source)
|
198
264
|
@current_source.add_dependency_names(name)
|
199
265
|
|
200
|
-
@specs[@current_spec.
|
266
|
+
@specs[@current_spec.full_name] = @current_spec
|
201
267
|
elsif spaces.size == 6
|
202
|
-
version = version.split(",").
|
268
|
+
version = version.split(",").each(&:strip!) if version
|
203
269
|
dep = Gem::Dependency.new(name, version)
|
204
270
|
@current_spec.dependencies << dep
|
205
271
|
end
|
@@ -210,13 +276,14 @@ module Bundler
|
|
210
276
|
end
|
211
277
|
|
212
278
|
def parse_bundled_with(line)
|
213
|
-
line
|
279
|
+
line.strip!
|
214
280
|
return unless Gem::Version.correct?(line)
|
215
281
|
@bundler_version = Gem::Version.create(line)
|
216
282
|
end
|
217
283
|
|
218
284
|
def parse_ruby(line)
|
219
|
-
|
285
|
+
line.strip!
|
286
|
+
@ruby_version = line
|
220
287
|
end
|
221
288
|
end
|
222
289
|
end
|
@@ -1,66 +1,59 @@
|
|
1
|
-
.\" generated with
|
2
|
-
.\"
|
3
|
-
.
|
4
|
-
.TH "BUNDLE\-ADD" "1" "June 2021" "" ""
|
5
|
-
.
|
1
|
+
.\" generated with nRonn/v0.11.1
|
2
|
+
.\" https://github.com/n-ronn/nronn/tree/0.11.1
|
3
|
+
.TH "BUNDLE\-ADD" "1" "June 2024" ""
|
6
4
|
.SH "NAME"
|
7
5
|
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
|
8
|
-
.
|
9
6
|
.SH "SYNOPSIS"
|
10
|
-
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-git=GIT] [\-\-branch=BRANCH] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
|
11
|
-
.
|
7
|
+
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-path=PATH] [\-\-git=GIT] [\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
|
12
8
|
.SH "DESCRIPTION"
|
13
9
|
Adds the named gem to the Gemfile and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\.
|
14
|
-
.
|
15
10
|
.P
|
16
11
|
Example:
|
17
|
-
.
|
18
12
|
.P
|
19
13
|
bundle add rails
|
20
|
-
.
|
21
14
|
.P
|
22
15
|
bundle add rails \-\-version "< 3\.0, > 1\.1"
|
23
|
-
.
|
24
16
|
.P
|
25
17
|
bundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"
|
26
|
-
.
|
27
18
|
.P
|
28
19
|
bundle add rails \-\-skip\-install
|
29
|
-
.
|
30
20
|
.P
|
31
21
|
bundle add rails \-\-group "development, test"
|
32
|
-
.
|
33
22
|
.SH "OPTIONS"
|
34
|
-
.
|
35
23
|
.TP
|
36
24
|
\fB\-\-version\fR, \fB\-v\fR
|
37
25
|
Specify version requirements(s) for the added gem\.
|
38
|
-
.
|
39
26
|
.TP
|
40
27
|
\fB\-\-group\fR, \fB\-g\fR
|
41
28
|
Specify the group(s) for the added gem\. Multiple groups should be separated by commas\.
|
42
|
-
.
|
43
29
|
.TP
|
44
|
-
\fB\-\-source\fR,
|
30
|
+
\fB\-\-source\fR, \fB\-s\fR
|
45
31
|
Specify the source for the added gem\.
|
46
|
-
.
|
32
|
+
.TP
|
33
|
+
\fB\-\-require\fR, \fB\-r\fR
|
34
|
+
Adds require path to gem\. Provide false, or a path as a string\.
|
35
|
+
.TP
|
36
|
+
\fB\-\-path\fR
|
37
|
+
Specify the file system path for the added gem\.
|
47
38
|
.TP
|
48
39
|
\fB\-\-git\fR
|
49
40
|
Specify the git source for the added gem\.
|
50
|
-
.
|
41
|
+
.TP
|
42
|
+
\fB\-\-github\fR
|
43
|
+
Specify the github source for the added gem\.
|
51
44
|
.TP
|
52
45
|
\fB\-\-branch\fR
|
53
46
|
Specify the git branch for the added gem\.
|
54
|
-
.
|
47
|
+
.TP
|
48
|
+
\fB\-\-ref\fR
|
49
|
+
Specify the git ref for the added gem\.
|
55
50
|
.TP
|
56
51
|
\fB\-\-skip\-install\fR
|
57
52
|
Adds the gem to the Gemfile but does not install it\.
|
58
|
-
.
|
59
53
|
.TP
|
60
54
|
\fB\-\-optimistic\fR
|
61
|
-
Adds optimistic declaration of version
|
62
|
-
.
|
55
|
+
Adds optimistic declaration of version\.
|
63
56
|
.TP
|
64
57
|
\fB\-\-strict\fR
|
65
|
-
Adds strict declaration of version
|
58
|
+
Adds strict declaration of version\.
|
66
59
|
|