bundler 1.11.1 → 2.2.6
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/CHANGELOG.md +2125 -840
- data/LICENSE.md +18 -19
- data/README.md +33 -11
- data/bundler.gemspec +34 -21
- data/exe/bundle +36 -6
- data/exe/bundler +2 -18
- data/lib/bundler.rb +435 -160
- data/lib/bundler/build_metadata.rb +45 -0
- data/lib/bundler/capistrano.rb +9 -3
- data/lib/bundler/cli.rb +550 -130
- data/lib/bundler/cli/add.rb +47 -0
- data/lib/bundler/cli/binstubs.rb +26 -10
- data/lib/bundler/cli/cache.rb +25 -17
- data/lib/bundler/cli/check.rb +8 -7
- data/lib/bundler/cli/clean.rb +8 -8
- data/lib/bundler/cli/common.rb +69 -9
- data/lib/bundler/cli/config.rb +170 -76
- data/lib/bundler/cli/console.rb +6 -1
- data/lib/bundler/cli/doctor.rb +140 -0
- data/lib/bundler/cli/exec.rb +63 -21
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +158 -42
- data/lib/bundler/cli/info.rb +73 -0
- data/lib/bundler/cli/init.rb +22 -7
- data/lib/bundler/cli/inject.rb +38 -10
- data/lib/bundler/cli/install.rb +139 -104
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +60 -0
- data/lib/bundler/cli/lock.rb +27 -5
- data/lib/bundler/cli/open.rb +13 -5
- data/lib/bundler/cli/outdated.rb +251 -46
- data/lib/bundler/cli/platform.rb +6 -2
- data/lib/bundler/cli/plugin.rb +41 -0
- data/lib/bundler/cli/pristine.rb +52 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +5 -4
- data/lib/bundler/cli/update.rb +67 -26
- data/lib/bundler/cli/viz.rb +11 -6
- data/lib/bundler/compact_index_client.rb +125 -0
- data/lib/bundler/compact_index_client/cache.rb +110 -0
- data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/lib/bundler/compact_index_client/updater.rb +104 -0
- data/lib/bundler/constants.rb +2 -0
- data/lib/bundler/current_ruby.rb +51 -174
- data/lib/bundler/definition.rb +533 -216
- data/lib/bundler/dep_proxy.rb +18 -8
- data/lib/bundler/dependency.rb +39 -12
- data/lib/bundler/deployment.rb +7 -0
- data/lib/bundler/deprecate.rb +31 -2
- data/lib/bundler/dsl.rb +188 -91
- data/lib/bundler/endpoint_specification.rb +51 -10
- data/lib/bundler/env.rb +116 -48
- data/lib/bundler/environment_preserver.rb +82 -0
- data/lib/bundler/errors.rb +108 -31
- data/lib/bundler/feature_flag.rb +60 -0
- data/lib/bundler/fetcher.rb +81 -52
- data/lib/bundler/fetcher/base.rb +15 -3
- data/lib/bundler/fetcher/compact_index.rb +140 -0
- data/lib/bundler/fetcher/dependency.rb +36 -42
- data/lib/bundler/fetcher/downloader.rb +39 -12
- data/lib/bundler/fetcher/index.rb +34 -9
- data/lib/bundler/friendly_errors.rb +132 -88
- data/lib/bundler/gem_helper.rb +92 -50
- data/lib/bundler/gem_helpers.rb +90 -5
- data/lib/bundler/gem_tasks.rb +3 -1
- data/lib/bundler/gem_version_promoter.rb +190 -0
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +20 -41
- data/lib/bundler/index.rb +74 -57
- data/lib/bundler/injector.rb +242 -31
- data/lib/bundler/inline.rb +49 -23
- data/lib/bundler/installer.rb +190 -74
- data/lib/bundler/installer/gem_installer.rb +33 -20
- data/lib/bundler/installer/parallel_installer.rb +201 -97
- data/lib/bundler/installer/standalone.rb +10 -6
- data/lib/bundler/lazy_specification.rb +74 -10
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +126 -74
- data/lib/bundler/{ssl_certs → man}/.document +0 -0
- data/lib/bundler/man/bundle-add.1 +66 -0
- data/lib/bundler/man/bundle-add.1.ronn +46 -0
- data/lib/bundler/man/bundle-binstubs.1 +42 -0
- data/lib/bundler/man/bundle-binstubs.1.ronn +41 -0
- data/lib/bundler/man/bundle-cache.1 +55 -0
- data/{man/bundle-package.ronn → lib/bundler/man/bundle-cache.1.ronn} +22 -16
- data/lib/bundler/man/bundle-check.1 +31 -0
- data/lib/bundler/man/bundle-check.1.ronn +26 -0
- data/lib/bundler/man/bundle-clean.1 +24 -0
- data/lib/bundler/man/bundle-clean.1.ronn +18 -0
- data/lib/bundler/man/bundle-config.1 +488 -0
- data/lib/bundler/man/bundle-config.1.ronn +388 -0
- data/lib/bundler/man/bundle-doctor.1 +44 -0
- data/lib/bundler/man/bundle-doctor.1.ronn +33 -0
- data/lib/bundler/man/bundle-exec.1 +165 -0
- data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +20 -4
- data/lib/bundler/man/bundle-gem.1 +102 -0
- data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +37 -13
- data/lib/bundler/man/bundle-info.1 +20 -0
- data/lib/bundler/man/bundle-info.1.ronn +17 -0
- data/lib/bundler/man/bundle-init.1 +25 -0
- data/lib/bundler/man/bundle-init.1.ronn +29 -0
- data/lib/bundler/man/bundle-inject.1 +33 -0
- data/lib/bundler/man/bundle-inject.1.ronn +22 -0
- data/lib/bundler/man/bundle-install.1 +338 -0
- data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +82 -76
- data/lib/bundler/man/bundle-list.1 +50 -0
- data/lib/bundler/man/bundle-list.1.ronn +33 -0
- data/lib/bundler/man/bundle-lock.1 +84 -0
- data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +47 -0
- data/lib/bundler/man/bundle-open.1 +32 -0
- data/lib/bundler/man/bundle-open.1.ronn +19 -0
- data/lib/bundler/man/bundle-outdated.1 +155 -0
- data/lib/bundler/man/bundle-outdated.1.ronn +111 -0
- data/lib/bundler/man/bundle-platform.1 +61 -0
- data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +1 -1
- data/lib/bundler/man/bundle-pristine.1 +34 -0
- data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
- data/lib/bundler/man/bundle-remove.1 +31 -0
- data/lib/bundler/man/bundle-remove.1.ronn +23 -0
- data/lib/bundler/man/bundle-show.1 +23 -0
- data/lib/bundler/man/bundle-show.1.ronn +21 -0
- data/lib/bundler/man/bundle-update.1 +394 -0
- data/lib/bundler/man/bundle-update.1.ronn +350 -0
- data/lib/bundler/man/bundle-viz.1 +39 -0
- data/lib/bundler/man/bundle-viz.1.ronn +30 -0
- data/lib/bundler/man/bundle.1 +136 -0
- data/lib/bundler/man/bundle.1.ronn +111 -0
- data/lib/bundler/man/gemfile.5 +686 -0
- data/{man → lib/bundler/man}/gemfile.5.ronn +117 -95
- data/lib/bundler/man/index.txt +25 -0
- data/lib/bundler/match_platform.rb +15 -4
- data/lib/bundler/mirror.rb +223 -0
- data/lib/bundler/plugin.rb +330 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/api/source.rb +304 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +182 -0
- data/lib/bundler/plugin/installer.rb +109 -0
- data/lib/bundler/plugin/installer/git.rb +38 -0
- data/lib/bundler/plugin/installer/rubygems.rb +27 -0
- data/lib/bundler/plugin/source_list.rb +27 -0
- data/lib/bundler/process_lock.rb +24 -0
- data/lib/bundler/psyched_yaml.rb +2 -6
- data/lib/bundler/remote_specification.rb +42 -9
- data/lib/bundler/resolver.rb +312 -225
- data/lib/bundler/resolver/spec_group.rb +122 -0
- data/lib/bundler/retry.rb +11 -5
- data/lib/bundler/ruby_dsl.rb +9 -2
- data/lib/bundler/ruby_version.rb +84 -61
- data/lib/bundler/rubygems_ext.rb +92 -53
- data/lib/bundler/rubygems_gem_installer.rb +84 -0
- data/lib/bundler/rubygems_integration.rb +320 -395
- data/lib/bundler/runtime.rb +87 -75
- data/lib/bundler/settings.rb +297 -119
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +13 -12
- data/lib/bundler/shared_helpers.rb +234 -53
- data/lib/bundler/similarity_detector.rb +5 -3
- data/lib/bundler/source.rb +63 -4
- data/lib/bundler/source/gemspec.rb +18 -0
- data/lib/bundler/source/git.rb +97 -50
- data/lib/bundler/source/git/git_proxy.rb +138 -65
- data/lib/bundler/source/metadata.rb +67 -0
- data/lib/bundler/source/path.rb +83 -47
- data/lib/bundler/source/path/installer.rb +42 -11
- data/lib/bundler/source/rubygems.rb +231 -116
- data/lib/bundler/source/rubygems/remote.rb +30 -1
- data/lib/bundler/source_list.rb +103 -21
- data/lib/bundler/spec_set.rb +96 -51
- data/lib/bundler/stub_specification.rb +87 -4
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +14 -1
- data/lib/bundler/templates/Executable.bundler +114 -0
- data/lib/bundler/templates/Executable.standalone +6 -4
- data/lib/bundler/templates/Gemfile +4 -1
- data/lib/bundler/templates/gems.rb +8 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +79 -44
- data/lib/bundler/templates/newgem/Gemfile.tt +18 -2
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +16 -10
- data/lib/bundler/templates/newgem/Rakefile.tt +22 -8
- data/lib/bundler/templates/newgem/bin/console.tt +2 -1
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +4 -4
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +3 -3
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/lib/bundler/templates/newgem/gitignore.tt +5 -1
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +9 -6
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +6 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +27 -28
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +4 -4
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -2
- data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +3 -1
- data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
- data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/lib/bundler/templates/newgem/{.travis.yml.tt → travis.yml.tt} +2 -0
- data/lib/bundler/ui.rb +5 -3
- data/lib/bundler/ui/rg_proxy.rb +3 -1
- data/lib/bundler/ui/shell.rb +54 -21
- data/lib/bundler/ui/silent.rb +26 -1
- data/lib/bundler/uri_credentials_filter.rb +43 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1764 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +11 -5
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +81 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +113 -134
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +66 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +62 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +63 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +61 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +126 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +46 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +36 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +158 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +82 -8
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +4 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +2 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +6 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +555 -150
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +6 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +19 -12
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +310 -467
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/lib/bundler/vendor/thor/lib/thor.rb +58 -25
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +50 -33
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +5 -3
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +9 -19
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +16 -8
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +79 -22
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +33 -20
- data/lib/bundler/vendor/thor/lib/thor/base.rb +110 -67
- data/lib/bundler/vendor/thor/lib/thor/command.rb +33 -24
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
- data/lib/bundler/vendor/thor/lib/thor/error.rb +81 -3
- data/lib/bundler/vendor/thor/lib/thor/group.rb +16 -16
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +6 -6
- data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +4 -7
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +18 -18
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +60 -26
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +31 -13
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +1 -0
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +42 -39
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +109 -39
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +7 -3
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +5 -5
- data/lib/bundler/vendor/thor/lib/thor/util.rb +26 -9
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +744 -0
- data/lib/bundler/vendor/uri/lib/uri/file.rb +94 -0
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +1568 -0
- data/lib/bundler/vendor/uri/lib/uri/http.rb +88 -0
- data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +21 -0
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +294 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +125 -0
- data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/bundler/vendored_fileutils.rb +4 -0
- data/lib/bundler/vendored_molinillo.rb +3 -1
- data/lib/bundler/vendored_persistent.rb +45 -9
- data/lib/bundler/vendored_thor.rb +8 -3
- data/lib/bundler/vendored_tmpdir.rb +4 -0
- data/lib/bundler/vendored_uri.rb +4 -0
- data/lib/bundler/version.rb +7 -4
- data/lib/bundler/version_ranges.rb +122 -0
- data/lib/bundler/vlad.rb +8 -2
- data/lib/bundler/worker.rb +38 -6
- data/lib/bundler/yaml_serializer.rb +89 -0
- metadata +164 -158
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.rubocop.yml +0 -105
- data/.rubocop_todo.yml +0 -120
- data/.travis.yml +0 -97
- data/CODE_OF_CONDUCT.md +0 -42
- data/CONTRIBUTING.md +0 -32
- data/DEVELOPMENT.md +0 -118
- data/ISSUES.md +0 -96
- data/Rakefile +0 -309
- data/bin/rake +0 -14
- data/bin/rspec +0 -10
- data/bin/rubocop +0 -11
- data/exe/bundle_ruby +0 -60
- data/lib/bundler/cli/package.rb +0 -45
- data/lib/bundler/environment.rb +0 -41
- data/lib/bundler/gem_path_manipulation.rb +0 -8
- data/lib/bundler/gem_remote_fetcher.rb +0 -41
- data/lib/bundler/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/bundler/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/bundler/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/bundler/ssl_certs/certificate_manager.rb +0 -64
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +0 -4
- data/lib/bundler/vendor/net/http/faster.rb +0 -26
- data/lib/bundler/vendor/net/http/persistent/ssl_reuse.rb +0 -128
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +0 -10
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +0 -98
- data/man/bundle-config.ronn +0 -187
- data/man/bundle-update.ronn +0 -188
- data/man/bundle.ronn +0 -98
- data/man/index.txt +0 -8
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class LockfileGenerator
|
5
|
+
attr_reader :definition
|
6
|
+
attr_reader :out
|
7
|
+
|
8
|
+
# @private
|
9
|
+
def initialize(definition)
|
10
|
+
@definition = definition
|
11
|
+
@out = String.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.generate(definition)
|
15
|
+
new(definition).generate!
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate!
|
19
|
+
add_sources
|
20
|
+
add_platforms
|
21
|
+
add_dependencies
|
22
|
+
add_locked_ruby_version
|
23
|
+
add_bundled_with
|
24
|
+
|
25
|
+
out
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def add_sources
|
31
|
+
definition.send(:sources).lock_sources.each_with_index do |source, idx|
|
32
|
+
out << "\n" unless idx.zero?
|
33
|
+
|
34
|
+
# Add the source header
|
35
|
+
out << source.to_lock
|
36
|
+
|
37
|
+
# Find all specs for this source
|
38
|
+
specs = definition.resolve.select {|s| source.can_lock?(s) }
|
39
|
+
add_specs(specs)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_specs(specs)
|
44
|
+
# This needs to be sorted by full name so that
|
45
|
+
# gems with the same name, but different platform
|
46
|
+
# are ordered consistently
|
47
|
+
specs.sort_by(&:full_name).each do |spec|
|
48
|
+
next if spec.name == "bundler".freeze
|
49
|
+
out << spec.to_lock
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_platforms
|
54
|
+
add_section("PLATFORMS", definition.platforms)
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_dependencies
|
58
|
+
out << "\nDEPENDENCIES\n"
|
59
|
+
|
60
|
+
handled = []
|
61
|
+
definition.dependencies.sort_by(&:to_s).each do |dep|
|
62
|
+
next if handled.include?(dep.name)
|
63
|
+
out << dep.to_lock
|
64
|
+
handled << dep.name
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_locked_ruby_version
|
69
|
+
return unless locked_ruby_version = definition.locked_ruby_version
|
70
|
+
add_section("RUBY VERSION", locked_ruby_version.to_s)
|
71
|
+
end
|
72
|
+
|
73
|
+
def add_bundled_with
|
74
|
+
add_section("BUNDLED WITH", definition.locked_bundler_version.to_s)
|
75
|
+
end
|
76
|
+
|
77
|
+
def add_section(name, value)
|
78
|
+
out << "\n#{name}\n"
|
79
|
+
case value
|
80
|
+
when Array
|
81
|
+
value.map(&:to_s).sort.each do |val|
|
82
|
+
out << " #{val}\n"
|
83
|
+
end
|
84
|
+
when Hash
|
85
|
+
value.to_a.sort_by {|k, _| k.to_s }.each do |key, val|
|
86
|
+
out << " #{key}: #{val}\n"
|
87
|
+
end
|
88
|
+
when String
|
89
|
+
out << " #{value}\n"
|
90
|
+
else
|
91
|
+
raise ArgumentError, "#{value.inspect} can't be serialized in a lockfile"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
#--
|
3
4
|
# Some versions of the Bundler 1.1 RC series introduced corrupted
|
4
5
|
# lockfiles. There were two major problems:
|
5
6
|
#
|
@@ -12,22 +13,54 @@ require "strscan"
|
|
12
13
|
|
13
14
|
module Bundler
|
14
15
|
class LockfileParser
|
15
|
-
attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version
|
16
|
-
|
17
|
-
BUNDLED = "BUNDLED WITH"
|
18
|
-
DEPENDENCIES = "DEPENDENCIES"
|
19
|
-
PLATFORMS = "PLATFORMS"
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
16
|
+
attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version, :ruby_version
|
17
|
+
|
18
|
+
BUNDLED = "BUNDLED WITH".freeze
|
19
|
+
DEPENDENCIES = "DEPENDENCIES".freeze
|
20
|
+
PLATFORMS = "PLATFORMS".freeze
|
21
|
+
RUBY = "RUBY VERSION".freeze
|
22
|
+
GIT = "GIT".freeze
|
23
|
+
GEM = "GEM".freeze
|
24
|
+
PATH = "PATH".freeze
|
25
|
+
PLUGIN = "PLUGIN SOURCE".freeze
|
26
|
+
SPECS = " specs:".freeze
|
27
|
+
OPTIONS = /^ ([a-z]+): (.*)$/i.freeze
|
28
|
+
SOURCE = [GIT, GEM, PATH, PLUGIN].freeze
|
29
|
+
|
30
|
+
SECTIONS_BY_VERSION_INTRODUCED = {
|
31
|
+
Gem::Version.create("1.0") => [DEPENDENCIES, PLATFORMS, GIT, GEM, PATH].freeze,
|
32
|
+
Gem::Version.create("1.10") => [BUNDLED].freeze,
|
33
|
+
Gem::Version.create("1.12") => [RUBY].freeze,
|
34
|
+
Gem::Version.create("1.13") => [PLUGIN].freeze,
|
35
|
+
}.freeze
|
36
|
+
|
37
|
+
KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten.freeze
|
38
|
+
|
39
|
+
ENVIRONMENT_VERSION_SECTIONS = [BUNDLED, RUBY].freeze
|
40
|
+
|
41
|
+
def self.sections_in_lockfile(lockfile_contents)
|
42
|
+
lockfile_contents.scan(/^\w[\w ]*$/).uniq
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.unknown_sections_in_lockfile(lockfile_contents)
|
46
|
+
sections_in_lockfile(lockfile_contents) - KNOWN_SECTIONS
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.sections_to_ignore(base_version = nil)
|
50
|
+
base_version &&= base_version.release
|
51
|
+
base_version ||= Gem::Version.create("1.0".dup)
|
52
|
+
attributes = []
|
53
|
+
SECTIONS_BY_VERSION_INTRODUCED.each do |version, introduced|
|
54
|
+
next if version <= base_version
|
55
|
+
attributes += introduced
|
56
|
+
end
|
57
|
+
attributes
|
58
|
+
end
|
26
59
|
|
27
60
|
def initialize(lockfile)
|
28
61
|
@platforms = []
|
29
62
|
@sources = []
|
30
|
-
@dependencies =
|
63
|
+
@dependencies = {}
|
31
64
|
@state = nil
|
32
65
|
@specs = {}
|
33
66
|
|
@@ -46,6 +79,8 @@ module Bundler
|
|
46
79
|
@state = :dependency
|
47
80
|
elsif line == PLATFORMS
|
48
81
|
@state = :platform
|
82
|
+
elsif line == RUBY
|
83
|
+
@state = :ruby
|
49
84
|
elsif line == BUNDLED
|
50
85
|
@state = :bundled_with
|
51
86
|
elsif line =~ /^[^\s]/
|
@@ -54,8 +89,8 @@ module Bundler
|
|
54
89
|
send("parse_#{@state}", line)
|
55
90
|
end
|
56
91
|
end
|
57
|
-
@sources << @rubygems_aggregate
|
58
|
-
@specs = @specs.values
|
92
|
+
@sources << @rubygems_aggregate unless Bundler.feature_flag.disable_multisource?
|
93
|
+
@specs = @specs.values.sort_by(&:identifier)
|
59
94
|
warn_for_outdated_bundler_version
|
60
95
|
rescue ArgumentError => e
|
61
96
|
Bundler.ui.debug(e)
|
@@ -67,33 +102,24 @@ module Bundler
|
|
67
102
|
return unless bundler_version
|
68
103
|
prerelease_text = bundler_version.prerelease? ? " --pre" : ""
|
69
104
|
current_version = Gem::Version.create(Bundler::VERSION)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
Bundler.ui.warn "Warning: the running version of Bundler is older " \
|
76
|
-
"than the version that created the lockfile. We suggest you " \
|
77
|
-
"upgrade to the latest version of Bundler by running `gem " \
|
78
|
-
"install bundler#{prerelease_text}`.\n"
|
79
|
-
end
|
80
|
-
end
|
105
|
+
return unless current_version < bundler_version
|
106
|
+
Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \
|
107
|
+
"than the version that created the lockfile (#{bundler_version}). We suggest you to " \
|
108
|
+
"upgrade to the version that created the lockfile by running `gem install " \
|
109
|
+
"bundler:#{bundler_version}#{prerelease_text}`.\n"
|
81
110
|
end
|
82
111
|
|
83
|
-
|
112
|
+
private
|
84
113
|
|
85
114
|
TYPES = {
|
86
|
-
GIT
|
87
|
-
GEM
|
88
|
-
PATH
|
89
|
-
|
115
|
+
GIT => Bundler::Source::Git,
|
116
|
+
GEM => Bundler::Source::Rubygems,
|
117
|
+
PATH => Bundler::Source::Path,
|
118
|
+
PLUGIN => Bundler::Plugin,
|
119
|
+
}.freeze
|
90
120
|
|
91
121
|
def parse_source(line)
|
92
122
|
case line
|
93
|
-
when GIT, GEM, PATH
|
94
|
-
@current_source = nil
|
95
|
-
@opts = {}
|
96
|
-
@type = line
|
97
123
|
when SPECS
|
98
124
|
case @type
|
99
125
|
when PATH
|
@@ -108,10 +134,19 @@ module Bundler
|
|
108
134
|
@sources << @current_source
|
109
135
|
end
|
110
136
|
when GEM
|
111
|
-
|
112
|
-
@
|
137
|
+
if Bundler.feature_flag.disable_multisource?
|
138
|
+
@opts["remotes"] = @opts.delete("remote")
|
139
|
+
@current_source = TYPES[@type].from_lock(@opts)
|
140
|
+
@sources << @current_source
|
141
|
+
else
|
142
|
+
Array(@opts["remote"]).each do |url|
|
143
|
+
@rubygems_aggregate.add_remote(url)
|
144
|
+
end
|
145
|
+
@current_source = @rubygems_aggregate
|
113
146
|
end
|
114
|
-
|
147
|
+
when PLUGIN
|
148
|
+
@current_source = Plugin.source_from_lock(@opts)
|
149
|
+
@sources << @current_source
|
115
150
|
end
|
116
151
|
when OPTIONS
|
117
152
|
value = $2
|
@@ -126,57 +161,71 @@ module Bundler
|
|
126
161
|
else
|
127
162
|
@opts[key] = value
|
128
163
|
end
|
164
|
+
when *SOURCE
|
165
|
+
@current_source = nil
|
166
|
+
@opts = {}
|
167
|
+
@type = line
|
129
168
|
else
|
130
169
|
parse_spec(line)
|
131
170
|
end
|
132
171
|
end
|
133
172
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
173
|
+
space = / /
|
174
|
+
NAME_VERSION = /
|
175
|
+
^(#{space}{2}|#{space}{4}|#{space}{6})(?!#{space}) # Exactly 2, 4, or 6 spaces at the start of the line
|
176
|
+
(.*?) # Name
|
177
|
+
(?:#{space}\(([^-]*) # Space, followed by version
|
178
|
+
(?:-(.*))?\))? # Optional platform
|
179
|
+
(!)? # Optional pinned marker
|
180
|
+
$ # Line end
|
181
|
+
/xo.freeze
|
138
182
|
|
139
183
|
def parse_dependency(line)
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
184
|
+
return unless line =~ NAME_VERSION
|
185
|
+
spaces = $1
|
186
|
+
return unless spaces.size == 2
|
187
|
+
name = $2
|
188
|
+
version = $3
|
189
|
+
pinned = $5
|
190
|
+
|
191
|
+
version = version.split(",").map(&:strip) if version
|
192
|
+
|
193
|
+
dep = Bundler::Dependency.new(name, version)
|
194
|
+
|
195
|
+
if pinned && dep.name != "bundler"
|
196
|
+
spec = @specs.find {|_, v| v.name == dep.name }
|
197
|
+
dep.source = spec.last.source if spec
|
198
|
+
|
199
|
+
# Path sources need to know what the default name / version
|
200
|
+
# to use in the case that there are no gemspecs present. A fake
|
201
|
+
# gemspec is created based on the version set on the dependency
|
202
|
+
# TODO: Use the version from the spec instead of from the dependency
|
203
|
+
if version && version.size == 1 && version.first =~ /^\s*= (.+)\s*$/ && dep.source.is_a?(Bundler::Source::Path)
|
204
|
+
dep.source.name = name
|
205
|
+
dep.source.version = $1
|
160
206
|
end
|
161
|
-
|
162
|
-
@dependencies << dep
|
163
207
|
end
|
208
|
+
|
209
|
+
@dependencies[dep.name] = dep
|
164
210
|
end
|
165
211
|
|
166
212
|
def parse_spec(line)
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
213
|
+
return unless line =~ NAME_VERSION
|
214
|
+
spaces = $1
|
215
|
+
name = $2
|
216
|
+
version = $3
|
217
|
+
platform = $4
|
218
|
+
|
219
|
+
if spaces.size == 4
|
220
|
+
version = Gem::Version.new(version)
|
221
|
+
platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
171
222
|
@current_spec = LazySpecification.new(name, version, platform)
|
172
223
|
@current_spec.source = @current_source
|
173
224
|
|
174
225
|
# Avoid introducing multiple copies of the same spec (caused by
|
175
226
|
# duplicate GIT sections)
|
176
227
|
@specs[@current_spec.identifier] ||= @current_spec
|
177
|
-
elsif
|
178
|
-
name = $1
|
179
|
-
version = $2
|
228
|
+
elsif spaces.size == 6
|
180
229
|
version = version.split(",").map(&:strip) if version
|
181
230
|
dep = Gem::Dependency.new(name, version)
|
182
231
|
@current_spec.dependencies << dep
|
@@ -189,9 +238,12 @@ module Bundler
|
|
189
238
|
|
190
239
|
def parse_bundled_with(line)
|
191
240
|
line = line.strip
|
192
|
-
|
193
|
-
|
194
|
-
|
241
|
+
return unless Gem::Version.correct?(line)
|
242
|
+
@bundler_version = Gem::Version.create(line)
|
243
|
+
end
|
244
|
+
|
245
|
+
def parse_ruby(line)
|
246
|
+
@ruby_version = line.strip
|
195
247
|
end
|
196
248
|
end
|
197
249
|
end
|
File without changes
|
@@ -0,0 +1,66 @@
|
|
1
|
+
.\" generated with Ronn/v0.7.3
|
2
|
+
.\" http://github.com/rtomayko/ronn/tree/0.7.3
|
3
|
+
.
|
4
|
+
.TH "BUNDLE\-ADD" "1" "November 2020" "" ""
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install
|
8
|
+
.
|
9
|
+
.SH "SYNOPSIS"
|
10
|
+
\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-git=GIT] [\-\-branch=BRANCH] [\-\-skip\-install] [\-\-strict] [\-\-optimistic]
|
11
|
+
.
|
12
|
+
.SH "DESCRIPTION"
|
13
|
+
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
|
+
.P
|
16
|
+
Example:
|
17
|
+
.
|
18
|
+
.P
|
19
|
+
bundle add rails
|
20
|
+
.
|
21
|
+
.P
|
22
|
+
bundle add rails \-\-version "< 3\.0, > 1\.1"
|
23
|
+
.
|
24
|
+
.P
|
25
|
+
bundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"
|
26
|
+
.
|
27
|
+
.P
|
28
|
+
bundle add rails \-\-skip\-install
|
29
|
+
.
|
30
|
+
.P
|
31
|
+
bundle add rails \-\-group "development, test"
|
32
|
+
.
|
33
|
+
.SH "OPTIONS"
|
34
|
+
.
|
35
|
+
.TP
|
36
|
+
\fB\-\-version\fR, \fB\-v\fR
|
37
|
+
Specify version requirements(s) for the added gem\.
|
38
|
+
.
|
39
|
+
.TP
|
40
|
+
\fB\-\-group\fR, \fB\-g\fR
|
41
|
+
Specify the group(s) for the added gem\. Multiple groups should be separated by commas\.
|
42
|
+
.
|
43
|
+
.TP
|
44
|
+
\fB\-\-source\fR, , \fB\-s\fR
|
45
|
+
Specify the source for the added gem\.
|
46
|
+
.
|
47
|
+
.TP
|
48
|
+
\fB\-\-git\fR
|
49
|
+
Specify the git source for the added gem\.
|
50
|
+
.
|
51
|
+
.TP
|
52
|
+
\fB\-\-branch\fR
|
53
|
+
Specify the git branch for the added gem\.
|
54
|
+
.
|
55
|
+
.TP
|
56
|
+
\fB\-\-skip\-install\fR
|
57
|
+
Adds the gem to the Gemfile but does not install it\.
|
58
|
+
.
|
59
|
+
.TP
|
60
|
+
\fB\-\-optimistic\fR
|
61
|
+
Adds optimistic declaration of version
|
62
|
+
.
|
63
|
+
.TP
|
64
|
+
\fB\-\-strict\fR
|
65
|
+
Adds strict declaration of version
|
66
|
+
|
@@ -0,0 +1,46 @@
|
|
1
|
+
bundle-add(1) -- Add gem to the Gemfile and run bundle install
|
2
|
+
================================================================
|
3
|
+
|
4
|
+
## SYNOPSIS
|
5
|
+
|
6
|
+
`bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--git=GIT] [--branch=BRANCH] [--skip-install] [--strict] [--optimistic]
|
7
|
+
|
8
|
+
## DESCRIPTION
|
9
|
+
Adds the named gem to the Gemfile and run `bundle install`. `bundle install` can be avoided by using the flag `--skip-install`.
|
10
|
+
|
11
|
+
Example:
|
12
|
+
|
13
|
+
bundle add rails
|
14
|
+
|
15
|
+
bundle add rails --version "< 3.0, > 1.1"
|
16
|
+
|
17
|
+
bundle add rails --version "~> 5.0.0" --source "https://gems.example.com" --group "development"
|
18
|
+
|
19
|
+
bundle add rails --skip-install
|
20
|
+
|
21
|
+
bundle add rails --group "development, test"
|
22
|
+
|
23
|
+
## OPTIONS
|
24
|
+
* `--version`, `-v`:
|
25
|
+
Specify version requirements(s) for the added gem.
|
26
|
+
|
27
|
+
* `--group`, `-g`:
|
28
|
+
Specify the group(s) for the added gem. Multiple groups should be separated by commas.
|
29
|
+
|
30
|
+
* `--source`, , `-s`:
|
31
|
+
Specify the source for the added gem.
|
32
|
+
|
33
|
+
* `--git`:
|
34
|
+
Specify the git source for the added gem.
|
35
|
+
|
36
|
+
* `--branch`:
|
37
|
+
Specify the git branch for the added gem.
|
38
|
+
|
39
|
+
* `--skip-install`:
|
40
|
+
Adds the gem to the Gemfile but does not install it.
|
41
|
+
|
42
|
+
* `--optimistic`:
|
43
|
+
Adds optimistic declaration of version
|
44
|
+
|
45
|
+
* `--strict`:
|
46
|
+
Adds strict declaration of version
|