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
@@ -7,12 +7,10 @@ module Bundler
|
|
7
7
|
class Rubygems < Source
|
8
8
|
autoload :Remote, File.expand_path("rubygems/remote", __dir__)
|
9
9
|
|
10
|
-
# Use the API when installing less than X gems
|
11
|
-
API_REQUEST_LIMIT = 500
|
12
10
|
# Ask for X gems per API request
|
13
11
|
API_REQUEST_SIZE = 50
|
14
12
|
|
15
|
-
|
13
|
+
attr_accessor :remotes
|
16
14
|
|
17
15
|
def initialize(options = {})
|
18
16
|
@options = options
|
@@ -21,9 +19,15 @@ module Bundler
|
|
21
19
|
@allow_remote = false
|
22
20
|
@allow_cached = false
|
23
21
|
@allow_local = options["allow_local"] || false
|
24
|
-
@
|
22
|
+
@checksum_store = Checksum::Store.new
|
25
23
|
|
26
24
|
Array(options["remotes"]).reverse_each {|r| add_remote(r) }
|
25
|
+
|
26
|
+
@lockfile_remotes = @remotes if options["from_lockfile"]
|
27
|
+
end
|
28
|
+
|
29
|
+
def caches
|
30
|
+
@caches ||= [cache_path, *Bundler.rubygems.gem_cache]
|
27
31
|
end
|
28
32
|
|
29
33
|
def local_only!
|
@@ -48,10 +52,11 @@ module Bundler
|
|
48
52
|
end
|
49
53
|
|
50
54
|
def cached!
|
55
|
+
return unless File.exist?(cache_path)
|
56
|
+
|
51
57
|
return if @allow_cached
|
52
58
|
|
53
59
|
@specs = nil
|
54
|
-
@allow_local = true
|
55
60
|
@allow_cached = true
|
56
61
|
end
|
57
62
|
|
@@ -87,158 +92,128 @@ module Bundler
|
|
87
92
|
end
|
88
93
|
|
89
94
|
def self.from_lock(options)
|
90
|
-
|
95
|
+
options["remotes"] = Array(options.delete("remote")).reverse
|
96
|
+
new(options.merge("from_lockfile" => true))
|
91
97
|
end
|
92
98
|
|
93
99
|
def to_lock
|
94
100
|
out = String.new("GEM\n")
|
95
|
-
|
96
|
-
out << " remote: #{
|
101
|
+
lockfile_remotes.reverse_each do |remote|
|
102
|
+
out << " remote: #{remote}\n"
|
97
103
|
end
|
98
104
|
out << " specs:\n"
|
99
105
|
end
|
100
106
|
|
101
|
-
def
|
107
|
+
def to_s
|
102
108
|
if remotes.empty?
|
103
109
|
"locally installed gems"
|
104
|
-
elsif @allow_remote
|
110
|
+
elsif @allow_remote && @allow_cached && @allow_local
|
111
|
+
"rubygems repository #{remote_names}, cached gems or installed locally"
|
112
|
+
elsif @allow_remote && @allow_local
|
105
113
|
"rubygems repository #{remote_names} or installed locally"
|
106
|
-
elsif @
|
107
|
-
"
|
114
|
+
elsif @allow_remote
|
115
|
+
"rubygems repository #{remote_names}"
|
116
|
+
elsif @allow_cached && @allow_local
|
117
|
+
"cached gems or installed locally"
|
108
118
|
else
|
109
119
|
"locally installed gems"
|
110
120
|
end
|
111
121
|
end
|
112
122
|
|
113
|
-
def
|
123
|
+
def identifier
|
114
124
|
if remotes.empty?
|
115
125
|
"locally installed gems"
|
116
126
|
else
|
117
|
-
"rubygems repository #{remote_names}
|
127
|
+
"rubygems repository #{remote_names}"
|
118
128
|
end
|
119
129
|
end
|
120
|
-
alias_method :name, :
|
130
|
+
alias_method :name, :identifier
|
131
|
+
alias_method :to_gemfile, :identifier
|
121
132
|
|
122
133
|
def specs
|
123
134
|
@specs ||= begin
|
124
135
|
# remote_specs usually generates a way larger Index than the other
|
125
|
-
# sources, and large_idx.
|
126
|
-
# small_idx.
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
idx
|
131
|
-
end
|
132
|
-
end
|
136
|
+
# sources, and large_idx.merge! small_idx is way faster than
|
137
|
+
# small_idx.merge! large_idx.
|
138
|
+
index = @allow_remote ? remote_specs.dup : Index.new
|
139
|
+
index.merge!(cached_specs) if @allow_cached
|
140
|
+
index.merge!(installed_specs) if @allow_local
|
133
141
|
|
134
|
-
|
135
|
-
|
136
|
-
|
142
|
+
# complete with default specs, only if not already available in the
|
143
|
+
# index through remote, cached, or installed specs
|
144
|
+
index.use(default_specs) if @allow_local
|
137
145
|
|
138
|
-
|
139
|
-
if !cached_path(spec)
|
140
|
-
cached_built_in_gem(spec) unless spec.remote
|
141
|
-
force = true
|
142
|
-
else
|
143
|
-
spec.loaded_from = loaded_from(spec)
|
144
|
-
end
|
146
|
+
index
|
145
147
|
end
|
148
|
+
end
|
146
149
|
|
147
|
-
|
148
|
-
|
150
|
+
def install(spec, options = {})
|
151
|
+
if (spec.default_gem? && !cached_built_in_gem(spec)) || (installed?(spec) && !options[:force])
|
152
|
+
print_using_message "Using #{version_message(spec, options[:previous_spec])}"
|
149
153
|
return nil # no post-install message
|
150
154
|
end
|
151
155
|
|
152
|
-
# Download the gem to get the spec, because some specs that are returned
|
153
|
-
# by rubygems.org are broken and wrong.
|
154
156
|
if spec.remote
|
155
157
|
# Check for this spec from other sources
|
156
|
-
uris = [spec.remote.anonymized_uri
|
157
|
-
uris += remotes_for_spec(spec).map(&:anonymized_uri)
|
158
|
-
uris.uniq!
|
158
|
+
uris = [spec.remote, *remotes_for_spec(spec)].map(&:anonymized_uri).uniq
|
159
159
|
Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1
|
160
|
+
end
|
161
|
+
|
162
|
+
path = fetch_gem_if_possible(spec, options[:previous_spec])
|
163
|
+
raise GemNotFound, "Could not find #{spec.file_name} for installation" unless path
|
160
164
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
165
|
+
return if Bundler.settings[:no_install]
|
166
|
+
|
167
|
+
install_path = rubygems_dir
|
168
|
+
bin_path = Bundler.system_bindir
|
169
|
+
|
170
|
+
require_relative "../rubygems_gem_installer"
|
171
|
+
|
172
|
+
installer = Bundler::RubyGemsGemInstaller.at(
|
173
|
+
path,
|
174
|
+
security_policy: Bundler.rubygems.security_policies[Bundler.settings["trust-policy"]],
|
175
|
+
install_dir: install_path.to_s,
|
176
|
+
bin_dir: bin_path.to_s,
|
177
|
+
ignore_dependencies: true,
|
178
|
+
wrappers: true,
|
179
|
+
env_shebang: true,
|
180
|
+
build_args: options[:build_args],
|
181
|
+
bundler_extension_cache_path: extension_cache_path(spec)
|
182
|
+
)
|
183
|
+
|
184
|
+
if spec.remote
|
185
|
+
s = begin
|
186
|
+
installer.spec
|
187
|
+
rescue Gem::Package::FormatError
|
166
188
|
Bundler.rm_rf(path)
|
167
189
|
raise
|
190
|
+
rescue Gem::Security::Exception => e
|
191
|
+
raise SecurityError,
|
192
|
+
"The gem #{File.basename(path, ".gem")} can't be installed because " \
|
193
|
+
"the security policy didn't allow it, with the message: #{e.message}"
|
168
194
|
end
|
195
|
+
|
196
|
+
spec.__swap__(s)
|
169
197
|
end
|
170
198
|
|
171
|
-
|
172
|
-
message = "Installing #{version_message(spec)}"
|
173
|
-
message += " with native extensions" if spec.extensions.any?
|
174
|
-
Bundler.ui.confirm message
|
199
|
+
spec.source.checksum_store.register(spec, installer.gem_checksum)
|
175
200
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
bin_path = install_path.join("bin")
|
180
|
-
else
|
181
|
-
install_path = rubygems_dir
|
182
|
-
bin_path = Bundler.system_bindir
|
183
|
-
end
|
201
|
+
message = "Installing #{version_message(spec, options[:previous_spec])}"
|
202
|
+
message += " with native extensions" if spec.extensions.any?
|
203
|
+
Bundler.ui.confirm message
|
184
204
|
|
185
|
-
|
186
|
-
|
187
|
-
require_relative "../rubygems_gem_installer"
|
188
|
-
|
189
|
-
installed_spec = Bundler::RubyGemsGemInstaller.at(
|
190
|
-
path,
|
191
|
-
:install_dir => install_path.to_s,
|
192
|
-
:bin_dir => bin_path.to_s,
|
193
|
-
:ignore_dependencies => true,
|
194
|
-
:wrappers => true,
|
195
|
-
:env_shebang => true,
|
196
|
-
:build_args => opts[:build_args],
|
197
|
-
:bundler_expected_checksum => spec.respond_to?(:checksum) && spec.checksum,
|
198
|
-
:bundler_extension_cache_path => extension_cache_path(spec)
|
199
|
-
).install
|
200
|
-
spec.full_gem_path = installed_spec.full_gem_path
|
201
|
-
|
202
|
-
# SUDO HAX
|
203
|
-
if requires_sudo?
|
204
|
-
Bundler.rubygems.repository_subdirectories.each do |name|
|
205
|
-
src = File.join(install_path, name, "*")
|
206
|
-
dst = File.join(rubygems_dir, name)
|
207
|
-
if name == "extensions" && Dir.glob(src).any?
|
208
|
-
src = File.join(src, "*/*")
|
209
|
-
ext_src = Dir.glob(src).first
|
210
|
-
ext_src.gsub!(src[0..-6], "")
|
211
|
-
dst = File.dirname(File.join(dst, ext_src))
|
212
|
-
end
|
213
|
-
SharedHelpers.filesystem_access(dst) do |p|
|
214
|
-
Bundler.mkdir_p(p)
|
215
|
-
end
|
216
|
-
Bundler.sudo "cp -R #{src} #{dst}" if Dir[src].any?
|
217
|
-
end
|
205
|
+
installed_spec = installer.install
|
218
206
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
end
|
223
|
-
Bundler.sudo "cp -R #{install_path}/bin/#{exe} #{Bundler.system_bindir}/"
|
224
|
-
end
|
225
|
-
end
|
226
|
-
installed_spec.loaded_from = loaded_from(spec)
|
227
|
-
end
|
228
|
-
spec.loaded_from = loaded_from(spec)
|
207
|
+
spec.full_gem_path = installed_spec.full_gem_path
|
208
|
+
spec.loaded_from = installed_spec.loaded_from
|
209
|
+
spec.base_dir = installed_spec.base_dir
|
229
210
|
|
230
211
|
spec.post_install_message
|
231
|
-
ensure
|
232
|
-
Bundler.rm_rf(install_path) if requires_sudo?
|
233
212
|
end
|
234
213
|
|
235
214
|
def cache(spec, custom_path = nil)
|
236
|
-
|
237
|
-
|
238
|
-
else
|
239
|
-
cached_path = cached_gem(spec)
|
240
|
-
end
|
241
|
-
raise GemNotFound, "Missing gem file '#{spec.full_name}.gem'." unless cached_path
|
215
|
+
cached_path = Bundler.settings[:cache_all_platforms] ? fetch_gem_if_possible(spec) : cached_gem(spec)
|
216
|
+
raise GemNotFound, "Missing gem file '#{spec.file_name}'." unless cached_path
|
242
217
|
return if File.dirname(cached_path) == Bundler.app_cache.to_s
|
243
218
|
Bundler.ui.info " * #{File.basename(cached_path)}"
|
244
219
|
FileUtils.cp(cached_path, Bundler.app_cache(custom_path))
|
@@ -265,12 +240,8 @@ module Bundler
|
|
265
240
|
@remotes.unshift(uri) unless @remotes.include?(uri)
|
266
241
|
end
|
267
242
|
|
268
|
-
def equivalent_remotes?(other_remotes)
|
269
|
-
other_remotes.map(&method(:remove_auth)) == @remotes.map(&method(:remove_auth))
|
270
|
-
end
|
271
|
-
|
272
243
|
def spec_names
|
273
|
-
if
|
244
|
+
if dependency_api_available?
|
274
245
|
remote_specs.spec_names
|
275
246
|
else
|
276
247
|
[]
|
@@ -278,22 +249,25 @@ module Bundler
|
|
278
249
|
end
|
279
250
|
|
280
251
|
def unmet_deps
|
281
|
-
if
|
252
|
+
if dependency_api_available?
|
282
253
|
remote_specs.unmet_dependency_names
|
283
254
|
else
|
284
255
|
[]
|
285
256
|
end
|
286
257
|
end
|
287
258
|
|
288
|
-
def
|
289
|
-
@
|
259
|
+
def remote_fetchers
|
260
|
+
@remote_fetchers ||= remotes.to_h do |uri|
|
290
261
|
remote = Source::Rubygems::Remote.new(uri)
|
291
|
-
Bundler::Fetcher.new(remote)
|
292
|
-
end
|
262
|
+
[remote, Bundler::Fetcher.new(remote)]
|
263
|
+
end.freeze
|
264
|
+
end
|
265
|
+
|
266
|
+
def fetchers
|
267
|
+
@fetchers ||= remote_fetchers.values.freeze
|
293
268
|
end
|
294
269
|
|
295
270
|
def double_check_for(unmet_dependency_names)
|
296
|
-
return unless @allow_remote
|
297
271
|
return unless dependency_api_available?
|
298
272
|
|
299
273
|
unmet_dependency_names = unmet_dependency_names.call
|
@@ -308,7 +282,9 @@ module Bundler
|
|
308
282
|
|
309
283
|
Bundler.ui.debug "Double checking for #{unmet_dependency_names || "all specs (due to the size of the request)"} in #{self}"
|
310
284
|
|
311
|
-
fetch_names(api_fetchers, unmet_dependency_names,
|
285
|
+
fetch_names(api_fetchers, unmet_dependency_names, remote_specs)
|
286
|
+
|
287
|
+
specs.use remote_specs
|
312
288
|
end
|
313
289
|
|
314
290
|
def dependency_names_to_double_check
|
@@ -327,7 +303,7 @@ module Bundler
|
|
327
303
|
end
|
328
304
|
|
329
305
|
def dependency_api_available?
|
330
|
-
api_fetchers.any?
|
306
|
+
@allow_remote && api_fetchers.any?
|
331
307
|
end
|
332
308
|
|
333
309
|
protected
|
@@ -337,7 +313,7 @@ module Bundler
|
|
337
313
|
end
|
338
314
|
|
339
315
|
def credless_remotes
|
340
|
-
remotes.map(&method(:
|
316
|
+
remotes.map(&method(:remove_auth))
|
341
317
|
end
|
342
318
|
|
343
319
|
def remotes_for_spec(spec)
|
@@ -347,42 +323,35 @@ module Bundler
|
|
347
323
|
end
|
348
324
|
end
|
349
325
|
|
350
|
-
def loaded_from(spec)
|
351
|
-
"#{rubygems_dir}/specifications/#{spec.full_name}.gemspec"
|
352
|
-
end
|
353
|
-
|
354
326
|
def cached_gem(spec)
|
355
|
-
|
356
|
-
|
357
|
-
|
327
|
+
if spec.default_gem?
|
328
|
+
cached_built_in_gem(spec)
|
329
|
+
else
|
330
|
+
cached_path(spec)
|
358
331
|
end
|
359
|
-
cached_gem
|
360
332
|
end
|
361
333
|
|
362
334
|
def cached_path(spec)
|
363
|
-
|
335
|
+
global_cache_path = download_cache_path(spec)
|
336
|
+
caches << global_cache_path if global_cache_path
|
337
|
+
|
338
|
+
possibilities = caches.map {|p| package_path(p, spec) }
|
364
339
|
possibilities.find {|p| File.exist?(p) }
|
365
340
|
end
|
366
341
|
|
342
|
+
def package_path(cache_path, spec)
|
343
|
+
"#{cache_path}/#{spec.file_name}"
|
344
|
+
end
|
345
|
+
|
367
346
|
def normalize_uri(uri)
|
368
|
-
uri = uri.to_s
|
369
|
-
uri = "#{uri}/" unless uri =~ %r{/$}
|
347
|
+
uri = URINormalizer.normalize_suffix(uri.to_s)
|
370
348
|
require_relative "../vendored_uri"
|
371
|
-
uri =
|
349
|
+
uri = Gem::URI(uri)
|
372
350
|
raise ArgumentError, "The source must be an absolute URI. For example:\n" \
|
373
|
-
"source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(
|
351
|
+
"source 'https://rubygems.org'" if !uri.absolute? || (uri.is_a?(Gem::URI::HTTP) && uri.host.nil?)
|
374
352
|
uri
|
375
353
|
end
|
376
354
|
|
377
|
-
def suppress_configured_credentials(remote)
|
378
|
-
remote_nouser = remove_auth(remote)
|
379
|
-
if remote.userinfo && remote.userinfo == Bundler.settings[remote_nouser]
|
380
|
-
remote_nouser
|
381
|
-
else
|
382
|
-
remote
|
383
|
-
end
|
384
|
-
end
|
385
|
-
|
386
355
|
def remove_auth(remote)
|
387
356
|
if remote.user || remote.password
|
388
357
|
remote.dup.tap {|uri| uri.user = uri.password = nil }.to_s
|
@@ -393,7 +362,7 @@ module Bundler
|
|
393
362
|
|
394
363
|
def installed_specs
|
395
364
|
@installed_specs ||= Index.build do |idx|
|
396
|
-
Bundler.rubygems.
|
365
|
+
Bundler.rubygems.installed_specs.reverse_each do |spec|
|
397
366
|
spec.source = self
|
398
367
|
if Bundler.rubygems.spec_missing_extensions?(spec, false)
|
399
368
|
Bundler.ui.debug "Source #{self} is ignoring #{spec} because it is missing extensions"
|
@@ -404,12 +373,20 @@ module Bundler
|
|
404
373
|
end
|
405
374
|
end
|
406
375
|
|
376
|
+
def default_specs
|
377
|
+
@default_specs ||= Index.build do |idx|
|
378
|
+
Bundler.rubygems.default_specs.each do |spec|
|
379
|
+
spec.source = self
|
380
|
+
idx << spec
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
407
385
|
def cached_specs
|
408
386
|
@cached_specs ||= begin
|
409
|
-
idx =
|
387
|
+
idx = Index.new
|
410
388
|
|
411
389
|
Dir["#{cache_path}/*.gem"].each do |gemfile|
|
412
|
-
next if gemfile =~ /^bundler\-[\d\.]+?\.gem/
|
413
390
|
s ||= Bundler.rubygems.spec_from_gem(gemfile)
|
414
391
|
s.source = self
|
415
392
|
idx << s
|
@@ -420,83 +397,67 @@ module Bundler
|
|
420
397
|
end
|
421
398
|
|
422
399
|
def api_fetchers
|
423
|
-
fetchers.select
|
400
|
+
fetchers.select(&:api_fetcher?)
|
424
401
|
end
|
425
402
|
|
426
403
|
def remote_specs
|
427
404
|
@remote_specs ||= Index.build do |idx|
|
428
405
|
index_fetchers = fetchers - api_fetchers
|
429
406
|
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
# about 500 gems, we treat all sites as non-api for speed.
|
436
|
-
allow_api = idx.size < API_REQUEST_LIMIT && dependency_names.size < API_REQUEST_LIMIT
|
437
|
-
Bundler.ui.debug "Need to query more than #{API_REQUEST_LIMIT} gems." \
|
438
|
-
" Downloading full index instead..." unless allow_api
|
439
|
-
|
440
|
-
fetch_names(api_fetchers, allow_api && dependency_names, idx, false)
|
407
|
+
if index_fetchers.empty?
|
408
|
+
fetch_names(api_fetchers, dependency_names, idx)
|
409
|
+
else
|
410
|
+
fetch_names(fetchers, nil, idx)
|
411
|
+
end
|
441
412
|
end
|
442
413
|
end
|
443
414
|
|
444
|
-
def fetch_names(fetchers, dependency_names, index
|
415
|
+
def fetch_names(fetchers, dependency_names, index)
|
445
416
|
fetchers.each do |f|
|
446
417
|
if dependency_names
|
447
418
|
Bundler.ui.info "Fetching gem metadata from #{URICredentialsFilter.credential_filtered_uri(f.uri)}", Bundler.ui.debug?
|
448
|
-
index.use f.specs_with_retry(dependency_names, self)
|
419
|
+
index.use f.specs_with_retry(dependency_names, self)
|
449
420
|
Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
|
450
421
|
else
|
451
422
|
Bundler.ui.info "Fetching source index from #{URICredentialsFilter.credential_filtered_uri(f.uri)}"
|
452
|
-
index.use f.specs_with_retry(nil, self)
|
423
|
+
index.use f.specs_with_retry(nil, self)
|
453
424
|
end
|
454
425
|
end
|
455
426
|
end
|
456
427
|
|
457
|
-
def
|
458
|
-
|
428
|
+
def fetch_gem_if_possible(spec, previous_spec = nil)
|
429
|
+
if spec.remote
|
430
|
+
fetch_gem(spec, previous_spec)
|
431
|
+
else
|
432
|
+
cached_gem(spec)
|
433
|
+
end
|
434
|
+
end
|
459
435
|
|
436
|
+
def fetch_gem(spec, previous_spec = nil)
|
460
437
|
spec.fetch_platform
|
461
438
|
|
462
|
-
|
463
|
-
gem_path =
|
439
|
+
cache_path = download_cache_path(spec) || default_cache_path_for(rubygems_dir)
|
440
|
+
gem_path = package_path(cache_path, spec)
|
441
|
+
return gem_path if File.exist?(gem_path)
|
464
442
|
|
465
|
-
SharedHelpers.filesystem_access(
|
443
|
+
SharedHelpers.filesystem_access(cache_path) do |p|
|
466
444
|
FileUtils.mkdir_p(p)
|
467
445
|
end
|
468
|
-
download_gem(spec,
|
469
|
-
|
470
|
-
if requires_sudo?
|
471
|
-
SharedHelpers.filesystem_access("#{rubygems_dir}/cache") do |p|
|
472
|
-
Bundler.mkdir_p(p)
|
473
|
-
end
|
474
|
-
Bundler.sudo "mv #{download_path}/cache/#{spec.full_name}.gem #{gem_path}"
|
475
|
-
end
|
446
|
+
download_gem(spec, cache_path, previous_spec)
|
476
447
|
|
477
448
|
gem_path
|
478
|
-
ensure
|
479
|
-
Bundler.rm_rf(download_path) if requires_sudo?
|
480
|
-
end
|
481
|
-
|
482
|
-
def builtin_gem?(spec)
|
483
|
-
# Ruby 2.1, where all included gems have this summary
|
484
|
-
return true if spec.summary =~ /is bundled with Ruby/
|
485
|
-
|
486
|
-
# Ruby 2.0, where gemspecs are stored in specifications/default/
|
487
|
-
spec.loaded_from && spec.loaded_from.include?("specifications/default/")
|
488
449
|
end
|
489
450
|
|
490
451
|
def installed?(spec)
|
491
|
-
installed_specs[spec].any?
|
452
|
+
installed_specs[spec].any? && !spec.deleted_gem?
|
492
453
|
end
|
493
454
|
|
494
|
-
def
|
495
|
-
Bundler.
|
455
|
+
def rubygems_dir
|
456
|
+
Bundler.bundle_path
|
496
457
|
end
|
497
458
|
|
498
|
-
def
|
499
|
-
|
459
|
+
def default_cache_path_for(dir)
|
460
|
+
"#{dir}/cache"
|
500
461
|
end
|
501
462
|
|
502
463
|
def cache_path
|
@@ -505,58 +466,27 @@ module Bundler
|
|
505
466
|
|
506
467
|
private
|
507
468
|
|
469
|
+
def lockfile_remotes
|
470
|
+
@lockfile_remotes || credless_remotes
|
471
|
+
end
|
472
|
+
|
508
473
|
# Checks if the requested spec exists in the global cache. If it does,
|
509
474
|
# we copy it to the download path, and if it does not, we download it.
|
510
475
|
#
|
511
476
|
# @param [Specification] spec
|
512
477
|
# the spec we want to download or retrieve from the cache.
|
513
478
|
#
|
514
|
-
# @param [String]
|
479
|
+
# @param [String] download_cache_path
|
515
480
|
# the local directory the .gem will end up in.
|
516
481
|
#
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
if (cache_path = download_cache_path(spec)) && cache_path.file?
|
521
|
-
SharedHelpers.filesystem_access(local_path) do
|
522
|
-
FileUtils.cp(cache_path, local_path)
|
523
|
-
end
|
524
|
-
else
|
525
|
-
uri = spec.remote.uri
|
526
|
-
Bundler.ui.confirm("Fetching #{version_message(spec)}")
|
527
|
-
rubygems_local_path = Bundler.rubygems.download_gem(spec, uri, download_path)
|
528
|
-
|
529
|
-
# older rubygems return varying file:// variants depending on version
|
530
|
-
rubygems_local_path = rubygems_local_path.gsub(/\Afile:/, "") unless Bundler.rubygems.provides?(">= 3.2.0.rc.2")
|
531
|
-
rubygems_local_path = rubygems_local_path.gsub(%r{\A//}, "") if Bundler.rubygems.provides?("< 3.1.0")
|
532
|
-
|
533
|
-
if rubygems_local_path != local_path
|
534
|
-
SharedHelpers.filesystem_access(local_path) do
|
535
|
-
FileUtils.mv(rubygems_local_path, local_path)
|
536
|
-
end
|
537
|
-
end
|
538
|
-
cache_globally(spec, local_path)
|
539
|
-
end
|
540
|
-
end
|
541
|
-
|
542
|
-
# Checks if the requested spec exists in the global cache. If it does
|
543
|
-
# not, we create the relevant global cache subdirectory if it does not
|
544
|
-
# exist and copy the spec from the local cache to the global cache.
|
545
|
-
#
|
546
|
-
# @param [Specification] spec
|
547
|
-
# the spec we want to copy to the global cache.
|
548
|
-
#
|
549
|
-
# @param [String] local_cache_path
|
550
|
-
# the local directory from which we want to copy the .gem.
|
482
|
+
# @param [Specification] previous_spec
|
483
|
+
# the spec previously locked
|
551
484
|
#
|
552
|
-
def
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
SharedHelpers.filesystem_access(cache_path) do
|
558
|
-
FileUtils.cp(local_cache_path, cache_path)
|
559
|
-
end
|
485
|
+
def download_gem(spec, download_cache_path, previous_spec = nil)
|
486
|
+
uri = spec.remote.uri
|
487
|
+
Bundler.ui.confirm("Fetching #{version_message(spec, previous_spec)}")
|
488
|
+
gem_remote_fetcher = remote_fetchers.fetch(spec.remote).gem_remote_fetcher
|
489
|
+
Bundler.rubygems.download_gem(spec, uri, download_cache_path, gem_remote_fetcher)
|
560
490
|
end
|
561
491
|
|
562
492
|
# Returns the global cache path of the calling Rubygems::Source object.
|
@@ -575,7 +505,7 @@ module Bundler
|
|
575
505
|
return unless remote = spec.remote
|
576
506
|
return unless cache_slug = remote.cache_slug
|
577
507
|
|
578
|
-
Bundler.user_cache.join("gems", cache_slug
|
508
|
+
Bundler.user_cache.join("gems", cache_slug)
|
579
509
|
end
|
580
510
|
|
581
511
|
def extension_cache_slug(spec)
|
data/lib/bundler/source.rb
CHANGED
@@ -11,17 +11,18 @@ module Bundler
|
|
11
11
|
|
12
12
|
attr_accessor :dependency_names
|
13
13
|
|
14
|
+
attr_reader :checksum_store
|
15
|
+
|
14
16
|
def unmet_deps
|
15
17
|
specs.unmet_dependency_names
|
16
18
|
end
|
17
19
|
|
18
|
-
def version_message(spec)
|
20
|
+
def version_message(spec, locked_spec = nil)
|
19
21
|
message = "#{spec.name} #{spec.version}"
|
20
22
|
message += " (#{spec.platform})" if spec.platform != Gem::Platform::RUBY && !spec.platform.nil?
|
21
23
|
|
22
|
-
if
|
23
|
-
|
24
|
-
locked_spec_version = locked_spec.version if locked_spec
|
24
|
+
if locked_spec
|
25
|
+
locked_spec_version = locked_spec.version
|
25
26
|
if locked_spec_version && spec.version != locked_spec_version
|
26
27
|
message += Bundler.ui.add_color(" (was #{locked_spec_version})", version_color(spec.version, locked_spec_version))
|
27
28
|
end
|
@@ -67,7 +68,7 @@ module Bundler
|
|
67
68
|
"#<#{self.class}:0x#{object_id} #{self}>"
|
68
69
|
end
|
69
70
|
|
70
|
-
def
|
71
|
+
def identifier
|
71
72
|
to_s
|
72
73
|
end
|
73
74
|
|
@@ -101,7 +102,7 @@ module Bundler
|
|
101
102
|
end
|
102
103
|
|
103
104
|
def print_using_message(message)
|
104
|
-
if !message.include?("(was ")
|
105
|
+
if !message.include?("(was ")
|
105
106
|
Bundler.ui.debug message
|
106
107
|
else
|
107
108
|
Bundler.ui.info message
|