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/runtime.rb
CHANGED
@@ -10,7 +10,7 @@ module Bundler
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def setup(*groups)
|
13
|
-
@definition.ensure_equivalent_gemfile_and_lockfile
|
13
|
+
@definition.ensure_equivalent_gemfile_and_lockfile
|
14
14
|
|
15
15
|
# Has to happen first
|
16
16
|
clean_load_path
|
@@ -28,11 +28,11 @@ module Bundler
|
|
28
28
|
spec.load_paths.reject {|path| $LOAD_PATH.include?(path) }
|
29
29
|
end.reverse.flatten
|
30
30
|
|
31
|
-
|
31
|
+
Gem.add_to_load_path(*load_paths)
|
32
32
|
|
33
33
|
setup_manpath
|
34
34
|
|
35
|
-
lock(:
|
35
|
+
lock(preserve_unknown_sections: true)
|
36
36
|
|
37
37
|
self
|
38
38
|
end
|
@@ -94,8 +94,8 @@ module Bundler
|
|
94
94
|
definition_method :requires
|
95
95
|
|
96
96
|
def lock(opts = {})
|
97
|
-
return if @definition.
|
98
|
-
@definition.lock(
|
97
|
+
return if @definition.no_resolve_needed?
|
98
|
+
@definition.lock(opts[:preserve_unknown_sections])
|
99
99
|
end
|
100
100
|
|
101
101
|
alias_method :gems, :specs
|
@@ -125,7 +125,6 @@ module Bundler
|
|
125
125
|
specs_to_cache.each do |spec|
|
126
126
|
next if spec.name == "bundler"
|
127
127
|
next if spec.source.is_a?(Source::Gemspec)
|
128
|
-
spec.source.send(:fetch_gem, spec) if Bundler.settings[:cache_all_platforms] && spec.source.respond_to?(:fetch_gem, true)
|
129
128
|
spec.source.cache(spec, custom_path) if spec.source.respond_to?(:cache)
|
130
129
|
end
|
131
130
|
|
@@ -265,7 +264,7 @@ module Bundler
|
|
265
264
|
|
266
265
|
return if manuals.empty?
|
267
266
|
Bundler::SharedHelpers.set_env "MANPATH", manuals.concat(
|
268
|
-
ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR)
|
267
|
+
ENV["MANPATH"] ? ENV["MANPATH"].to_s.split(File::PATH_SEPARATOR) : [""]
|
269
268
|
).uniq.join(File::PATH_SEPARATOR)
|
270
269
|
end
|
271
270
|
|
@@ -291,7 +290,7 @@ module Bundler
|
|
291
290
|
return unless activated_spec = Bundler.rubygems.loaded_specs(spec.name)
|
292
291
|
return if activated_spec.version == spec.version
|
293
292
|
|
294
|
-
suggestion = if
|
293
|
+
suggestion = if activated_spec.default_gem?
|
295
294
|
"Since #{spec.name} is a default gem, you can either remove your dependency on it" \
|
296
295
|
" or try updating to a newer version of bundler that supports #{spec.name} as a default gem."
|
297
296
|
else
|
@@ -301,11 +300,7 @@ module Bundler
|
|
301
300
|
e = Gem::LoadError.new "You have already activated #{activated_spec.name} #{activated_spec.version}, " \
|
302
301
|
"but your Gemfile requires #{spec.name} #{spec.version}. #{suggestion}"
|
303
302
|
e.name = spec.name
|
304
|
-
|
305
|
-
e.requirement = Gem::Requirement.new(spec.version.to_s)
|
306
|
-
else
|
307
|
-
e.version_requirement = Gem::Requirement.new(spec.version.to_s)
|
308
|
-
end
|
303
|
+
e.requirement = Gem::Requirement.new(spec.version.to_s)
|
309
304
|
raise e
|
310
305
|
end
|
311
306
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
module SafeMarshal
|
5
|
+
ALLOWED_CLASSES = [
|
6
|
+
Array,
|
7
|
+
FalseClass,
|
8
|
+
Gem::Specification,
|
9
|
+
Gem::Version,
|
10
|
+
Hash,
|
11
|
+
String,
|
12
|
+
Symbol,
|
13
|
+
Time,
|
14
|
+
TrueClass,
|
15
|
+
].freeze
|
16
|
+
|
17
|
+
ERROR = "Unexpected class %s present in marshaled data. Only %s are allowed."
|
18
|
+
|
19
|
+
PROC = proc do |object|
|
20
|
+
object.tap do
|
21
|
+
unless ALLOWED_CLASSES.include?(object.class)
|
22
|
+
raise TypeError, format(ERROR, object.class, ALLOWED_CLASSES.join(", "))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.proc
|
28
|
+
PROC
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
#
|
5
|
+
# This class handles installing and switching to the version of bundler needed
|
6
|
+
# by an application.
|
7
|
+
#
|
8
|
+
class SelfManager
|
9
|
+
def restart_with_locked_bundler_if_needed
|
10
|
+
return unless needs_switching? && installed?
|
11
|
+
|
12
|
+
restart_with(restart_version)
|
13
|
+
end
|
14
|
+
|
15
|
+
def install_locked_bundler_and_restart_with_it_if_needed
|
16
|
+
return unless needs_switching?
|
17
|
+
|
18
|
+
if restart_version == lockfile_version
|
19
|
+
Bundler.ui.info \
|
20
|
+
"Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
|
21
|
+
"Installing Bundler #{lockfile_version} and restarting using that version."
|
22
|
+
else
|
23
|
+
Bundler.ui.info \
|
24
|
+
"Bundler #{current_version} is running, but your configuration was #{restart_version}. " \
|
25
|
+
"Installing Bundler #{restart_version} and restarting using that version."
|
26
|
+
end
|
27
|
+
|
28
|
+
install_and_restart_with(restart_version)
|
29
|
+
end
|
30
|
+
|
31
|
+
def update_bundler_and_restart_with_it_if_needed(target)
|
32
|
+
return unless autoswitching_applies?
|
33
|
+
|
34
|
+
spec = resolve_update_version_from(target)
|
35
|
+
return unless spec
|
36
|
+
|
37
|
+
version = spec.version
|
38
|
+
|
39
|
+
Bundler.ui.info "Updating bundler to #{version}."
|
40
|
+
|
41
|
+
install(spec)
|
42
|
+
|
43
|
+
restart_with(version)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def install_and_restart_with(version)
|
49
|
+
requirement = Gem::Requirement.new(version)
|
50
|
+
spec = find_latest_matching_spec(requirement)
|
51
|
+
|
52
|
+
if spec.nil?
|
53
|
+
Bundler.ui.warn "Your lockfile is locked to a version of bundler (#{lockfile_version}) that doesn't exist at https://rubygems.org/. Going on using #{current_version}"
|
54
|
+
return
|
55
|
+
end
|
56
|
+
|
57
|
+
install(spec)
|
58
|
+
rescue StandardError => e
|
59
|
+
Bundler.ui.trace e
|
60
|
+
Bundler.ui.warn "There was an error installing the locked bundler version (#{lockfile_version}), rerun with the `--verbose` flag for more details. Going on using bundler #{current_version}."
|
61
|
+
else
|
62
|
+
restart_with(version)
|
63
|
+
end
|
64
|
+
|
65
|
+
def install(spec)
|
66
|
+
spec.source.install(spec)
|
67
|
+
end
|
68
|
+
|
69
|
+
def restart_with(version)
|
70
|
+
configured_gem_home = ENV["GEM_HOME"]
|
71
|
+
configured_gem_path = ENV["GEM_PATH"]
|
72
|
+
|
73
|
+
# Bundler specs need some stuff to be required before Bundler starts
|
74
|
+
# running, for example, for faking the compact index API. However, these
|
75
|
+
# flags are lost when we reexec to a different version of Bundler. In the
|
76
|
+
# future, we may be able to properly reconstruct the original Ruby
|
77
|
+
# invocation (see https://bugs.ruby-lang.org/issues/6648), but for now
|
78
|
+
# there's no way to do it, so we need to be explicit about how to re-exec.
|
79
|
+
# This may be a feature end users request at some point, but maybe by that
|
80
|
+
# time, we have builtin tools to do. So for now, we use an undocumented
|
81
|
+
# ENV variable only for our specs.
|
82
|
+
bundler_spec_original_cmd = ENV["BUNDLER_SPEC_ORIGINAL_CMD"]
|
83
|
+
if bundler_spec_original_cmd
|
84
|
+
require "shellwords"
|
85
|
+
cmd = [*Shellwords.shellsplit(bundler_spec_original_cmd), *ARGV]
|
86
|
+
else
|
87
|
+
cmd = [$PROGRAM_NAME, *ARGV]
|
88
|
+
cmd.unshift(Gem.ruby) unless File.executable?($PROGRAM_NAME)
|
89
|
+
end
|
90
|
+
|
91
|
+
Bundler.with_original_env do
|
92
|
+
Kernel.exec(
|
93
|
+
{ "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" => version.to_s },
|
94
|
+
*cmd
|
95
|
+
)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def needs_switching?
|
100
|
+
autoswitching_applies? &&
|
101
|
+
released?(lockfile_version) &&
|
102
|
+
!running?(lockfile_version) &&
|
103
|
+
!updating? &&
|
104
|
+
Bundler.settings[:version] != "system"
|
105
|
+
end
|
106
|
+
|
107
|
+
def autoswitching_applies?
|
108
|
+
ENV["BUNDLER_VERSION"].nil? &&
|
109
|
+
Bundler.rubygems.supports_bundler_trampolining? &&
|
110
|
+
ruby_can_restart_with_same_arguments? &&
|
111
|
+
SharedHelpers.in_bundle? &&
|
112
|
+
lockfile_version
|
113
|
+
end
|
114
|
+
|
115
|
+
def resolve_update_version_from(target)
|
116
|
+
requirement = Gem::Requirement.new(target)
|
117
|
+
update_candidate = find_latest_matching_spec(requirement)
|
118
|
+
|
119
|
+
if update_candidate.nil?
|
120
|
+
raise InvalidOption, "The `bundle update --bundler` target version (#{target}) does not exist"
|
121
|
+
end
|
122
|
+
|
123
|
+
resolved_version = update_candidate.version
|
124
|
+
needs_update = requirement.specific? ? !running?(resolved_version) : running_older_than?(resolved_version)
|
125
|
+
|
126
|
+
return unless needs_update
|
127
|
+
|
128
|
+
update_candidate
|
129
|
+
end
|
130
|
+
|
131
|
+
def local_specs
|
132
|
+
@local_specs ||= Bundler::Source::Rubygems.new("allow_local" => true).specs.select {|spec| spec.name == "bundler" }
|
133
|
+
end
|
134
|
+
|
135
|
+
def remote_specs
|
136
|
+
@remote_specs ||= begin
|
137
|
+
source = Bundler::Source::Rubygems.new("remotes" => "https://rubygems.org")
|
138
|
+
source.remote!
|
139
|
+
source.add_dependency_names("bundler")
|
140
|
+
source.specs.select(&:matches_current_metadata?)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def find_latest_matching_spec(requirement)
|
145
|
+
local_result = find_latest_matching_spec_from_collection(local_specs, requirement)
|
146
|
+
return local_result if local_result && requirement.specific?
|
147
|
+
|
148
|
+
remote_result = find_latest_matching_spec_from_collection(remote_specs, requirement)
|
149
|
+
return remote_result if local_result.nil?
|
150
|
+
|
151
|
+
[local_result, remote_result].max
|
152
|
+
end
|
153
|
+
|
154
|
+
def find_latest_matching_spec_from_collection(specs, requirement)
|
155
|
+
specs.sort.reverse_each.find {|spec| requirement.satisfied_by?(spec.version) }
|
156
|
+
end
|
157
|
+
|
158
|
+
def running?(version)
|
159
|
+
version == current_version
|
160
|
+
end
|
161
|
+
|
162
|
+
def running_older_than?(version)
|
163
|
+
current_version < version
|
164
|
+
end
|
165
|
+
|
166
|
+
def released?(version)
|
167
|
+
!version.to_s.end_with?(".dev")
|
168
|
+
end
|
169
|
+
|
170
|
+
def ruby_can_restart_with_same_arguments?
|
171
|
+
$PROGRAM_NAME != "-e"
|
172
|
+
end
|
173
|
+
|
174
|
+
def updating?
|
175
|
+
"update".start_with?(ARGV.first || " ") && ARGV[1..-1].any? {|a| a.start_with?("--bundler") }
|
176
|
+
end
|
177
|
+
|
178
|
+
def installed?
|
179
|
+
Bundler.configure
|
180
|
+
|
181
|
+
Bundler.rubygems.find_bundler(restart_version.to_s)
|
182
|
+
end
|
183
|
+
|
184
|
+
def current_version
|
185
|
+
@current_version ||= Gem::Version.new(Bundler::VERSION)
|
186
|
+
end
|
187
|
+
|
188
|
+
def lockfile_version
|
189
|
+
return @lockfile_version if defined?(@lockfile_version)
|
190
|
+
|
191
|
+
parsed_version = Bundler::LockfileParser.bundled_with
|
192
|
+
@lockfile_version = parsed_version ? Gem::Version.new(parsed_version) : nil
|
193
|
+
rescue ArgumentError
|
194
|
+
@lockfile_version = nil
|
195
|
+
end
|
196
|
+
|
197
|
+
def restart_version
|
198
|
+
return @restart_version if defined?(@restart_version)
|
199
|
+
# BUNDLE_VERSION=x.y.z
|
200
|
+
@restart_version = Gem::Version.new(Bundler.settings[:version])
|
201
|
+
rescue ArgumentError
|
202
|
+
# BUNDLE_VERSION=lockfile
|
203
|
+
@restart_version = lockfile_version
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
data/lib/bundler/settings.rb
CHANGED
@@ -7,7 +7,6 @@ module Bundler
|
|
7
7
|
autoload :Validator, File.expand_path("settings/validator", __dir__)
|
8
8
|
|
9
9
|
BOOL_KEYS = %w[
|
10
|
-
allow_deployment_source_credential_changes
|
11
10
|
allow_offline_install
|
12
11
|
auto_clean_without_path
|
13
12
|
auto_install
|
@@ -43,9 +42,21 @@ module Bundler
|
|
43
42
|
setup_makes_kernel_gem_public
|
44
43
|
silence_deprecations
|
45
44
|
silence_root_warning
|
46
|
-
suppress_install_using_messages
|
47
45
|
update_requires_all_flag
|
48
|
-
|
46
|
+
].freeze
|
47
|
+
|
48
|
+
REMEMBERED_KEYS = %w[
|
49
|
+
bin
|
50
|
+
cache_all
|
51
|
+
clean
|
52
|
+
deployment
|
53
|
+
frozen
|
54
|
+
no_prune
|
55
|
+
path
|
56
|
+
shebang
|
57
|
+
path.system
|
58
|
+
without
|
59
|
+
with
|
49
60
|
].freeze
|
50
61
|
|
51
62
|
NUMBER_KEYS = %w[
|
@@ -57,6 +68,7 @@ module Bundler
|
|
57
68
|
].freeze
|
58
69
|
|
59
70
|
ARRAY_KEYS = %w[
|
71
|
+
only
|
60
72
|
with
|
61
73
|
without
|
62
74
|
].freeze
|
@@ -75,6 +87,7 @@ module Bundler
|
|
75
87
|
shebang
|
76
88
|
system_bindir
|
77
89
|
trust-policy
|
90
|
+
version
|
78
91
|
].freeze
|
79
92
|
|
80
93
|
DEFAULT_CONFIG = {
|
@@ -84,25 +97,39 @@ module Bundler
|
|
84
97
|
"BUNDLE_REDIRECT" => 5,
|
85
98
|
"BUNDLE_RETRY" => 3,
|
86
99
|
"BUNDLE_TIMEOUT" => 10,
|
100
|
+
"BUNDLE_VERSION" => "lockfile",
|
87
101
|
}.freeze
|
88
102
|
|
89
103
|
def initialize(root = nil)
|
90
104
|
@root = root
|
91
105
|
@local_config = load_config(local_config_file)
|
92
|
-
@
|
106
|
+
@local_root = root || Pathname.new(".bundle").expand_path
|
107
|
+
|
108
|
+
@env_config = ENV.to_h
|
109
|
+
@env_config.select! {|key, _value| key.start_with?("BUNDLE_") }
|
110
|
+
@env_config.delete("BUNDLE_")
|
111
|
+
|
93
112
|
@global_config = load_config(global_config_file)
|
94
113
|
@temporary = {}
|
114
|
+
|
115
|
+
@key_cache = {}
|
95
116
|
end
|
96
117
|
|
97
118
|
def [](name)
|
98
119
|
key = key_for(name)
|
99
|
-
|
120
|
+
|
121
|
+
value = nil
|
122
|
+
configs.each do |_, config|
|
123
|
+
value = config[key]
|
124
|
+
next if value.nil?
|
125
|
+
break
|
126
|
+
end
|
100
127
|
|
101
128
|
converted_value(value, name)
|
102
129
|
end
|
103
130
|
|
104
131
|
def set_command_option(key, value)
|
105
|
-
if Bundler.feature_flag.forget_cli_options?
|
132
|
+
if !is_remembered(key) || Bundler.feature_flag.forget_cli_options?
|
106
133
|
temporary(key => value)
|
107
134
|
value
|
108
135
|
else
|
@@ -116,7 +143,7 @@ module Bundler
|
|
116
143
|
end
|
117
144
|
|
118
145
|
def set_local(key, value)
|
119
|
-
local_config_file
|
146
|
+
local_config_file = @local_root.join("config")
|
120
147
|
|
121
148
|
set_key(key, value, @local_config, local_config_file)
|
122
149
|
end
|
@@ -139,17 +166,22 @@ module Bundler
|
|
139
166
|
end
|
140
167
|
|
141
168
|
def all
|
142
|
-
keys = @temporary.keys
|
169
|
+
keys = @temporary.keys.union(@global_config.keys, @local_config.keys, @env_config.keys)
|
143
170
|
|
144
|
-
keys.map do |key|
|
145
|
-
key
|
146
|
-
|
171
|
+
keys.map! do |key|
|
172
|
+
key = key.delete_prefix("BUNDLE_")
|
173
|
+
key.gsub!("___", "-")
|
174
|
+
key.gsub!("__", ".")
|
175
|
+
key.downcase!
|
176
|
+
key
|
177
|
+
end.sort!
|
178
|
+
keys
|
147
179
|
end
|
148
180
|
|
149
181
|
def local_overrides
|
150
182
|
repos = {}
|
151
183
|
all.each do |k|
|
152
|
-
repos[
|
184
|
+
repos[k.delete_prefix("local.")] = self[k] if k.start_with?("local.")
|
153
185
|
end
|
154
186
|
repos
|
155
187
|
end
|
@@ -157,7 +189,7 @@ module Bundler
|
|
157
189
|
def mirror_for(uri)
|
158
190
|
if uri.is_a?(String)
|
159
191
|
require_relative "vendored_uri"
|
160
|
-
uri =
|
192
|
+
uri = Gem::URI(uri)
|
161
193
|
end
|
162
194
|
|
163
195
|
gem_mirrors.for(uri.to_s).uri
|
@@ -226,7 +258,9 @@ module Bundler
|
|
226
258
|
return Path.new(path, system_path)
|
227
259
|
end
|
228
260
|
|
229
|
-
|
261
|
+
path = "vendor/bundle" if self[:deployment]
|
262
|
+
|
263
|
+
Path.new(path, false)
|
230
264
|
end
|
231
265
|
|
232
266
|
Path = Struct.new(:explicit_path, :system_path) do
|
@@ -276,12 +310,6 @@ module Bundler
|
|
276
310
|
end
|
277
311
|
end
|
278
312
|
|
279
|
-
def allow_sudo?
|
280
|
-
key = key_for(:path)
|
281
|
-
path_configured = @temporary.key?(key) || @local_config.key?(key)
|
282
|
-
!path_configured
|
283
|
-
end
|
284
|
-
|
285
313
|
def ignore_config?
|
286
314
|
ENV["BUNDLE_IGNORE_CONFIG"]
|
287
315
|
end
|
@@ -300,18 +328,18 @@ module Bundler
|
|
300
328
|
end
|
301
329
|
|
302
330
|
def key_for(key)
|
303
|
-
self.class.key_for(key)
|
331
|
+
@key_cache[key] ||= self.class.key_for(key)
|
304
332
|
end
|
305
333
|
|
306
334
|
private
|
307
335
|
|
308
336
|
def configs
|
309
|
-
{
|
310
|
-
:
|
311
|
-
:
|
312
|
-
:
|
313
|
-
:
|
314
|
-
:
|
337
|
+
@configs ||= {
|
338
|
+
temporary: @temporary,
|
339
|
+
local: @local_config,
|
340
|
+
env: @env_config,
|
341
|
+
global: @global_config,
|
342
|
+
default: DEFAULT_CONFIG,
|
315
343
|
}
|
316
344
|
end
|
317
345
|
|
@@ -332,16 +360,20 @@ module Bundler
|
|
332
360
|
end
|
333
361
|
|
334
362
|
def is_bool(name)
|
335
|
-
|
363
|
+
name = self.class.key_to_s(name)
|
364
|
+
BOOL_KEYS.include?(name) || BOOL_KEYS.include?(parent_setting_for(name))
|
336
365
|
end
|
337
366
|
|
338
367
|
def is_string(name)
|
339
|
-
|
368
|
+
name = self.class.key_to_s(name)
|
369
|
+
STRING_KEYS.include?(name) || name.start_with?("local.") || name.start_with?("mirror.") || name.start_with?("build.")
|
340
370
|
end
|
341
371
|
|
342
372
|
def to_bool(value)
|
343
373
|
case value
|
344
|
-
when
|
374
|
+
when String
|
375
|
+
value.match?(/\A(false|f|no|n|0|)\z/i) ? false : true
|
376
|
+
when nil, false
|
345
377
|
false
|
346
378
|
else
|
347
379
|
true
|
@@ -349,11 +381,15 @@ module Bundler
|
|
349
381
|
end
|
350
382
|
|
351
383
|
def is_num(key)
|
352
|
-
NUMBER_KEYS.include?(key
|
384
|
+
NUMBER_KEYS.include?(self.class.key_to_s(key))
|
353
385
|
end
|
354
386
|
|
355
387
|
def is_array(key)
|
356
|
-
ARRAY_KEYS.include?(key
|
388
|
+
ARRAY_KEYS.include?(self.class.key_to_s(key))
|
389
|
+
end
|
390
|
+
|
391
|
+
def is_remembered(key)
|
392
|
+
REMEMBERED_KEYS.include?(self.class.key_to_s(key))
|
357
393
|
end
|
358
394
|
|
359
395
|
def is_credential(key)
|
@@ -366,7 +402,7 @@ module Bundler
|
|
366
402
|
|
367
403
|
def to_array(value)
|
368
404
|
return [] unless value
|
369
|
-
value.split(":").map(&:to_sym)
|
405
|
+
value.tr(" ", ":").split(":").map(&:to_sym)
|
370
406
|
end
|
371
407
|
|
372
408
|
def array_to_s(array)
|
@@ -376,7 +412,7 @@ module Bundler
|
|
376
412
|
end
|
377
413
|
|
378
414
|
def set_key(raw_key, value, hash, file)
|
379
|
-
raw_key = raw_key
|
415
|
+
raw_key = self.class.key_to_s(raw_key)
|
380
416
|
value = array_to_s(value) if is_array(raw_key)
|
381
417
|
|
382
418
|
key = key_for(raw_key)
|
@@ -391,12 +427,13 @@ module Bundler
|
|
391
427
|
return unless file
|
392
428
|
SharedHelpers.filesystem_access(file) do |p|
|
393
429
|
FileUtils.mkdir_p(p.dirname)
|
394
|
-
|
395
|
-
p.open("w") {|f| f.write(YAMLSerializer.dump(hash)) }
|
430
|
+
p.open("w") {|f| f.write(serializer_class.dump(hash)) }
|
396
431
|
end
|
397
432
|
end
|
398
433
|
|
399
434
|
def converted_value(value, key)
|
435
|
+
key = self.class.key_to_s(key)
|
436
|
+
|
400
437
|
if is_array(key)
|
401
438
|
to_array(value)
|
402
439
|
elsif value.nil?
|
@@ -454,41 +491,57 @@ module Bundler
|
|
454
491
|
SharedHelpers.filesystem_access(config_file, :read) do |file|
|
455
492
|
valid_file = file.exist? && !file.size.zero?
|
456
493
|
return {} unless valid_file
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
"
|
465
|
-
|
466
|
-
|
494
|
+
serializer_class.load(file.read).inject({}) do |config, (k, v)|
|
495
|
+
k = k.dup
|
496
|
+
k << "/" if /https?:/i.match?(k) && !k.end_with?("/", "__#{FALLBACK_TIMEOUT_URI_OPTION.upcase}")
|
497
|
+
k.gsub!(".", "__")
|
498
|
+
|
499
|
+
unless k.start_with?("#")
|
500
|
+
if k.include?("-")
|
501
|
+
Bundler.ui.warn "Your #{file} config includes `#{k}`, which contains the dash character (`-`).\n" \
|
502
|
+
"This is deprecated, because configuration through `ENV` should be possible, but `ENV` keys cannot include dashes.\n" \
|
503
|
+
"Please edit #{file} and replace any dashes in configuration keys with a triple underscore (`___`)."
|
504
|
+
|
505
|
+
# string hash keys are frozen
|
506
|
+
k = k.gsub("-", "___")
|
507
|
+
end
|
508
|
+
|
509
|
+
config[k] = v
|
467
510
|
end
|
468
511
|
|
469
|
-
config[new_k] = v
|
470
512
|
config
|
471
513
|
end
|
472
514
|
end
|
473
515
|
end
|
474
516
|
|
475
|
-
|
476
|
-
|
477
|
-
|
517
|
+
def serializer_class
|
518
|
+
require "rubygems/yaml_serializer"
|
519
|
+
Gem::YAMLSerializer
|
520
|
+
rescue LoadError
|
521
|
+
# TODO: Remove this when RubyGems 3.4 is EOL
|
522
|
+
require_relative "yaml_serializer"
|
523
|
+
YAMLSerializer
|
524
|
+
end
|
525
|
+
|
526
|
+
FALLBACK_TIMEOUT_URI_OPTION = "fallback_timeout"
|
478
527
|
|
479
528
|
NORMALIZE_URI_OPTIONS_PATTERN =
|
480
529
|
/
|
481
530
|
\A
|
482
531
|
(\w+\.)? # optional prefix key
|
483
532
|
(https?.*?) # URI
|
484
|
-
(\.#{
|
533
|
+
(\.#{FALLBACK_TIMEOUT_URI_OPTION})? # optional suffix key
|
485
534
|
\z
|
486
|
-
/ix
|
535
|
+
/ix
|
487
536
|
|
488
537
|
def self.key_for(key)
|
489
|
-
key =
|
490
|
-
key = key.
|
491
|
-
|
538
|
+
key = key_to_s(key)
|
539
|
+
key = normalize_uri(key) if key.start_with?("http", "mirror.http")
|
540
|
+
key = key.gsub(".", "__")
|
541
|
+
key.gsub!("-", "___")
|
542
|
+
key.upcase!
|
543
|
+
|
544
|
+
key.gsub(/\A([ #]*)/, '\1BUNDLE_')
|
492
545
|
end
|
493
546
|
|
494
547
|
# TODO: duplicates Rubygems#normalize_uri
|
@@ -500,13 +553,42 @@ module Bundler
|
|
500
553
|
uri = $2
|
501
554
|
suffix = $3
|
502
555
|
end
|
503
|
-
uri =
|
556
|
+
uri = URINormalizer.normalize_suffix(uri)
|
504
557
|
require_relative "vendored_uri"
|
505
|
-
uri =
|
558
|
+
uri = Gem::URI(uri)
|
506
559
|
unless uri.absolute?
|
507
560
|
raise ArgumentError, format("Gem sources must be absolute. You provided '%s'.", uri)
|
508
561
|
end
|
509
562
|
"#{prefix}#{uri}#{suffix}"
|
510
563
|
end
|
564
|
+
|
565
|
+
# This is a hot method, so avoid respond_to? checks on every invocation
|
566
|
+
if :read.respond_to?(:name)
|
567
|
+
def self.key_to_s(key)
|
568
|
+
case key
|
569
|
+
when String
|
570
|
+
key
|
571
|
+
when Symbol
|
572
|
+
key.name
|
573
|
+
when Gem::URI::HTTP
|
574
|
+
key.to_s
|
575
|
+
else
|
576
|
+
raise ArgumentError, "Invalid key: #{key.inspect}"
|
577
|
+
end
|
578
|
+
end
|
579
|
+
else
|
580
|
+
def self.key_to_s(key)
|
581
|
+
case key
|
582
|
+
when String
|
583
|
+
key
|
584
|
+
when Symbol
|
585
|
+
key.to_s
|
586
|
+
when Gem::URI::HTTP
|
587
|
+
key.to_s
|
588
|
+
else
|
589
|
+
raise ArgumentError, "Invalid key: #{key.inspect}"
|
590
|
+
end
|
591
|
+
end
|
592
|
+
end
|
511
593
|
end
|
512
594
|
end
|