bundler 1.9.0 → 1.17.3
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 +1157 -6
- data/README.md +33 -6
- data/bundler.gemspec +51 -18
- data/exe/bundle +31 -0
- data/{bin → exe}/bundle_ruby +10 -6
- data/exe/bundler +4 -0
- data/lib/bundler.rb +326 -207
- data/lib/bundler/build_metadata.rb +53 -0
- data/lib/bundler/capistrano.rb +9 -3
- data/lib/bundler/cli.rb +522 -141
- data/lib/bundler/cli/add.rb +35 -0
- data/lib/bundler/cli/binstubs.rb +22 -11
- data/lib/bundler/cli/cache.rb +7 -6
- data/lib/bundler/cli/check.rb +11 -8
- data/lib/bundler/cli/clean.rb +7 -8
- data/lib/bundler/cli/common.rb +53 -7
- data/lib/bundler/cli/config.rb +84 -49
- data/lib/bundler/cli/console.rb +13 -8
- data/lib/bundler/cli/doctor.rb +140 -0
- data/lib/bundler/cli/exec.rb +77 -16
- data/lib/bundler/cli/gem.rb +120 -52
- data/lib/bundler/cli/info.rb +50 -0
- data/lib/bundler/cli/init.rb +21 -7
- data/lib/bundler/cli/inject.rb +37 -10
- data/lib/bundler/cli/install.rb +139 -78
- data/lib/bundler/cli/issue.rb +40 -0
- data/lib/bundler/cli/list.rb +58 -0
- data/lib/bundler/cli/lock.rb +63 -0
- data/lib/bundler/cli/open.rb +9 -6
- data/lib/bundler/cli/outdated.rb +221 -35
- data/lib/bundler/cli/package.rb +11 -7
- data/lib/bundler/cli/platform.rb +7 -4
- data/lib/bundler/cli/plugin.rb +24 -0
- data/lib/bundler/cli/pristine.rb +47 -0
- data/lib/bundler/cli/remove.rb +18 -0
- data/lib/bundler/cli/show.rb +11 -10
- data/lib/bundler/cli/update.rb +47 -29
- data/lib/bundler/cli/viz.rb +12 -8
- data/lib/bundler/compact_index_client.rb +109 -0
- data/lib/bundler/compact_index_client/cache.rb +118 -0
- data/lib/bundler/compact_index_client/updater.rb +116 -0
- data/lib/bundler/compatibility_guard.rb +14 -0
- data/lib/bundler/constants.rb +3 -1
- data/lib/bundler/current_ruby.rb +47 -137
- data/lib/bundler/definition.rb +599 -230
- data/lib/bundler/dep_proxy.rb +15 -10
- data/lib/bundler/dependency.rb +54 -25
- data/lib/bundler/deployment.rb +12 -2
- data/lib/bundler/deprecate.rb +33 -4
- data/lib/bundler/dsl.rb +383 -99
- data/lib/bundler/endpoint_specification.rb +72 -7
- data/lib/bundler/env.rb +121 -41
- data/lib/bundler/environment_preserver.rb +59 -0
- data/lib/bundler/errors.rb +158 -0
- data/lib/bundler/feature_flag.rb +74 -0
- data/lib/bundler/fetcher.rb +171 -280
- data/lib/bundler/fetcher/base.rb +52 -0
- data/lib/bundler/fetcher/compact_index.rb +126 -0
- data/lib/bundler/fetcher/dependency.rb +82 -0
- data/lib/bundler/fetcher/downloader.rb +84 -0
- data/lib/bundler/fetcher/index.rb +52 -0
- data/lib/bundler/friendly_errors.rb +113 -58
- data/lib/bundler/gem_helper.rb +73 -46
- data/lib/bundler/gem_helpers.rb +85 -9
- data/lib/bundler/gem_remote_fetcher.rb +43 -0
- data/lib/bundler/gem_tasks.rb +6 -1
- data/lib/bundler/gem_version_promoter.rb +190 -0
- data/lib/bundler/gemdeps.rb +29 -0
- data/lib/bundler/graph.rb +32 -49
- data/lib/bundler/index.rb +79 -67
- data/lib/bundler/injector.rb +219 -30
- data/lib/bundler/inline.rb +74 -0
- data/lib/bundler/installer.rb +191 -206
- data/lib/bundler/installer/gem_installer.rb +85 -0
- data/lib/bundler/installer/parallel_installer.rb +233 -0
- data/lib/bundler/installer/standalone.rb +53 -0
- data/lib/bundler/lazy_specification.rb +53 -13
- data/lib/bundler/lockfile_generator.rb +95 -0
- data/lib/bundler/lockfile_parser.rb +157 -62
- data/lib/bundler/match_platform.rb +15 -4
- data/lib/bundler/mirror.rb +223 -0
- data/lib/bundler/plugin.rb +292 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/api/source.rb +306 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +61 -0
- data/lib/bundler/plugin/index.rb +162 -0
- data/lib/bundler/plugin/installer.rb +96 -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 +17 -6
- data/lib/bundler/remote_specification.rb +68 -11
- data/lib/bundler/resolver.rb +263 -229
- data/lib/bundler/resolver/spec_group.rb +106 -0
- data/lib/bundler/retry.rb +25 -19
- data/lib/bundler/ruby_dsl.rb +9 -2
- data/lib/bundler/ruby_version.rb +101 -66
- data/lib/bundler/rubygems_ext.rb +77 -37
- data/lib/bundler/rubygems_gem_installer.rb +106 -0
- data/lib/bundler/rubygems_integration.rb +450 -163
- data/lib/bundler/runtime.rb +133 -103
- data/lib/bundler/settings.rb +344 -83
- data/lib/bundler/settings/validator.rb +102 -0
- data/lib/bundler/setup.rb +7 -3
- data/lib/bundler/shared_helpers.rb +284 -54
- data/lib/bundler/similarity_detector.rb +21 -21
- data/lib/bundler/source.rb +68 -15
- data/lib/bundler/source/gemspec.rb +18 -0
- data/lib/bundler/source/git.rb +90 -55
- data/lib/bundler/source/git/git_proxy.rb +135 -35
- data/lib/bundler/source/metadata.rb +62 -0
- data/lib/bundler/source/path.rb +84 -61
- data/lib/bundler/source/path/installer.rb +53 -17
- data/lib/bundler/source/rubygems.rb +282 -122
- data/lib/bundler/source/rubygems/remote.rb +69 -0
- data/lib/bundler/source_list.rb +107 -22
- data/lib/bundler/spec_set.rb +83 -45
- data/lib/bundler/ssl_certs/certificate_manager.rb +8 -7
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +21 -0
- data/lib/bundler/ssl_certs/{DigiCertHighAssuranceEVRootCA.pem → rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem} +0 -0
- data/lib/bundler/ssl_certs/{AddTrustExternalCARoot-2048.pem → rubygems.org/AddTrustExternalCARoot.pem} +0 -0
- data/lib/bundler/stub_specification.rb +108 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +19 -6
- data/lib/bundler/templates/Executable.bundler +105 -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 +68 -7
- data/lib/bundler/templates/newgem/Gemfile.tt +4 -2
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +1 -1
- data/lib/bundler/templates/newgem/README.md.tt +19 -11
- data/lib/bundler/templates/newgem/Rakefile.tt +10 -6
- data/lib/bundler/templates/newgem/bin/console.tt +1 -1
- data/lib/bundler/templates/newgem/bin/setup.tt +2 -1
- 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/gitignore.tt +5 -1
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +7 -6
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +4 -4
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +31 -15
- data/lib/bundler/templates/newgem/rspec.tt +1 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +3 -5
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +14 -2
- data/lib/bundler/templates/newgem/test/{test_newgem.rb.tt → newgem_test.rb.tt} +2 -2
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +4 -0
- data/lib/bundler/templates/newgem/travis.yml.tt +7 -0
- data/lib/bundler/ui.rb +5 -3
- data/lib/bundler/ui/rg_proxy.rb +5 -7
- data/lib/bundler/ui/shell.rb +69 -18
- data/lib/bundler/ui/silent.rb +26 -1
- data/lib/bundler/uri_credentials_filter.rb +37 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1638 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +12 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +26 -0
- 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 +223 -0
- 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 +136 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +143 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/specification_provider.rb +11 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/modules/ui.rb +6 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +837 -0
- data/lib/bundler/vendor/{Molinillo-0.2.1 → molinillo}/lib/molinillo/resolver.rb +6 -3
- data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +58 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/faster.rb +1 -0
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent.rb +27 -24
- data/lib/bundler/vendor/{net → net-http-persistent/lib/net}/http/persistent/ssl_reuse.rb +2 -1
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor.rb +47 -22
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions.rb +31 -29
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_file.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/create_link.rb +3 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/directory.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/empty_directory.rb +16 -8
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/file_manipulation.rb +66 -18
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/actions/inject_into_file.rb +18 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/base.rb +67 -44
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/command.rb +13 -11
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/core_ext/hash_with_indifferent_access.rb +21 -1
- data/lib/bundler/vendor/thor/lib/thor/core_ext/io_binary_read.rb +12 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/ordered_hash.rb +129 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/error.rb +3 -3
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/group.rb +14 -14
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/invocation.rb +4 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/basic.rb +2 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/line_editor/readline.rb +0 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/argument.rb +4 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/arguments.rb +16 -16
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/option.rb +42 -21
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/parser/options.rb +13 -10
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/rake_compat.rb +1 -1
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/runner.rb +35 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell.rb +4 -4
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/basic.rb +49 -33
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/color.rb +2 -2
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/shell/html.rb +5 -5
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/util.rb +8 -7
- data/lib/bundler/vendor/{thor-0.19.1 → thor}/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +9 -0
- data/lib/bundler/vendored_molinillo.rb +4 -5
- data/lib/bundler/vendored_persistent.rb +45 -4
- data/lib/bundler/vendored_thor.rb +8 -5
- data/lib/bundler/version.rb +23 -1
- data/lib/bundler/version_ranges.rb +76 -0
- data/lib/bundler/vlad.rb +8 -2
- data/lib/bundler/worker.rb +39 -6
- data/lib/bundler/yaml_serializer.rb +90 -0
- data/man/bundle-add.1 +58 -0
- data/man/bundle-add.1.txt +52 -0
- data/man/bundle-add.ronn +40 -0
- data/man/bundle-binstubs.1 +40 -0
- data/man/bundle-binstubs.1.txt +48 -0
- data/man/bundle-binstubs.ronn +43 -0
- data/man/bundle-check.1 +31 -0
- data/man/bundle-check.1.txt +33 -0
- data/man/bundle-check.ronn +26 -0
- data/man/bundle-clean.1 +24 -0
- data/man/bundle-clean.1.txt +26 -0
- data/man/bundle-clean.ronn +18 -0
- data/man/bundle-config.1 +497 -0
- data/man/bundle-config.1.txt +529 -0
- data/man/bundle-config.ronn +256 -31
- data/man/bundle-doctor.1 +44 -0
- data/man/bundle-doctor.1.txt +44 -0
- data/man/bundle-doctor.ronn +33 -0
- data/man/bundle-exec.1 +165 -0
- data/man/bundle-exec.1.txt +178 -0
- data/man/bundle-exec.ronn +19 -3
- data/man/bundle-gem.1 +80 -0
- data/man/bundle-gem.1.txt +91 -0
- data/man/bundle-gem.ronn +78 -0
- data/man/bundle-info.1 +20 -0
- data/man/bundle-info.1.txt +21 -0
- data/man/bundle-info.ronn +17 -0
- data/man/bundle-init.1 +25 -0
- data/man/bundle-init.1.txt +34 -0
- data/man/bundle-init.ronn +29 -0
- data/man/bundle-inject.1 +33 -0
- data/man/bundle-inject.1.txt +32 -0
- data/man/bundle-inject.ronn +22 -0
- data/man/bundle-install.1 +308 -0
- data/man/bundle-install.1.txt +396 -0
- data/man/bundle-install.ronn +64 -67
- data/man/bundle-list.1 +50 -0
- data/man/bundle-list.1.txt +43 -0
- data/man/bundle-list.ronn +33 -0
- data/man/bundle-lock.1 +84 -0
- data/man/bundle-lock.1.txt +93 -0
- data/man/bundle-lock.ronn +94 -0
- data/man/bundle-open.1 +32 -0
- data/man/bundle-open.1.txt +29 -0
- data/man/bundle-open.ronn +19 -0
- data/man/bundle-outdated.1 +155 -0
- data/man/bundle-outdated.1.txt +131 -0
- data/man/bundle-outdated.ronn +111 -0
- data/man/bundle-package.1 +55 -0
- data/man/bundle-package.1.txt +79 -0
- data/man/bundle-package.ronn +14 -8
- data/man/bundle-platform.1 +61 -0
- data/man/bundle-platform.1.txt +57 -0
- data/man/bundle-platform.ronn +1 -1
- data/man/bundle-pristine.1 +34 -0
- data/man/bundle-pristine.1.txt +44 -0
- data/man/bundle-pristine.ronn +34 -0
- data/man/bundle-remove.1 +31 -0
- data/man/bundle-remove.1.txt +34 -0
- data/man/bundle-remove.ronn +23 -0
- data/man/bundle-show.1 +23 -0
- data/man/bundle-show.1.txt +27 -0
- data/man/bundle-show.ronn +21 -0
- data/man/bundle-update.1 +394 -0
- data/man/bundle-update.1.txt +391 -0
- data/man/bundle-update.ronn +180 -18
- data/man/bundle-viz.1 +39 -0
- data/man/bundle-viz.1.txt +39 -0
- data/man/bundle-viz.ronn +30 -0
- data/man/bundle.1 +136 -0
- data/man/bundle.1.txt +116 -0
- data/man/bundle.ronn +46 -33
- data/man/gemfile.5 +689 -0
- data/man/gemfile.5.ronn +127 -79
- data/man/gemfile.5.txt +653 -0
- data/man/index.txt +25 -7
- metadata +242 -95
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.travis.yml +0 -110
- data/CODE_OF_CONDUCT.md +0 -40
- data/CONTRIBUTING.md +0 -32
- data/DEVELOPMENT.md +0 -119
- data/ISSUES.md +0 -96
- data/Rakefile +0 -302
- data/UPGRADING.md +0 -103
- data/bin/bundle +0 -21
- data/bin/bundler +0 -21
- data/lib/bundler/anonymizable_uri.rb +0 -32
- data/lib/bundler/environment.rb +0 -42
- data/lib/bundler/gem_installer.rb +0 -9
- data/lib/bundler/gem_path_manipulation.rb +0 -8
- data/lib/bundler/ssl_certs/AddTrustExternalCARoot.pem +0 -32
- data/lib/bundler/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/bundler/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/bundler/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/lib/bundler/templates/newgem/.travis.yml.tt +0 -3
- data/lib/bundler/templates/newgem/test/minitest_helper.rb.tt +0 -4
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo.rb +0 -5
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/dependency_graph.rb +0 -266
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/errors.rb +0 -69
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/gem_metadata.rb +0 -3
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/resolution.rb +0 -412
- data/lib/bundler/vendor/Molinillo-0.2.1/lib/molinillo/state.rb +0 -43
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/io_binary_read.rb +0 -10
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/core_ext/ordered_hash.rb +0 -98
- data/lib/bundler/vendor/thor-0.19.1/lib/thor/parser.rb +0 -4
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class Source
|
5
|
+
class Rubygems
|
6
|
+
class Remote
|
7
|
+
attr_reader :uri, :anonymized_uri, :original_uri
|
8
|
+
|
9
|
+
def initialize(uri)
|
10
|
+
orig_uri = uri
|
11
|
+
uri = Bundler.settings.mirror_for(uri)
|
12
|
+
@original_uri = orig_uri if orig_uri != uri
|
13
|
+
fallback_auth = Bundler.settings.credentials_for(uri)
|
14
|
+
|
15
|
+
@uri = apply_auth(uri, fallback_auth).freeze
|
16
|
+
@anonymized_uri = remove_auth(@uri).freeze
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String] A slug suitable for use as a cache key for this
|
20
|
+
# remote.
|
21
|
+
#
|
22
|
+
def cache_slug
|
23
|
+
@cache_slug ||= begin
|
24
|
+
return nil unless SharedHelpers.md5_available?
|
25
|
+
|
26
|
+
cache_uri = original_uri || uri
|
27
|
+
|
28
|
+
# URI::File of Ruby 2.6 returns empty string when given "file://".
|
29
|
+
host = defined?(URI::File) && cache_uri.is_a?(URI::File) ? nil : cache_uri.host
|
30
|
+
|
31
|
+
uri_parts = [host, cache_uri.user, cache_uri.port, cache_uri.path]
|
32
|
+
uri_digest = SharedHelpers.digest(:MD5).hexdigest(uri_parts.compact.join("."))
|
33
|
+
|
34
|
+
uri_parts[-1] = uri_digest
|
35
|
+
uri_parts.compact.join(".")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
"rubygems remote at #{anonymized_uri}"
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def apply_auth(uri, auth)
|
46
|
+
if auth && uri.userinfo.nil?
|
47
|
+
uri = uri.dup
|
48
|
+
uri.userinfo = auth
|
49
|
+
end
|
50
|
+
|
51
|
+
uri
|
52
|
+
rescue URI::InvalidComponentError
|
53
|
+
error_message = "Please CGI escape your usernames and passwords before " \
|
54
|
+
"setting them for authentication."
|
55
|
+
raise HTTPError.new(error_message)
|
56
|
+
end
|
57
|
+
|
58
|
+
def remove_auth(uri)
|
59
|
+
if uri.userinfo
|
60
|
+
uri = uri.dup
|
61
|
+
uri.user = uri.password = nil
|
62
|
+
end
|
63
|
+
|
64
|
+
uri
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/bundler/source_list.rb
CHANGED
@@ -1,34 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Bundler
|
2
4
|
class SourceList
|
3
5
|
attr_reader :path_sources,
|
4
|
-
|
6
|
+
:git_sources,
|
7
|
+
:plugin_sources,
|
8
|
+
:global_rubygems_source,
|
9
|
+
:metadata_source
|
5
10
|
|
6
11
|
def initialize
|
7
|
-
@path_sources
|
8
|
-
@git_sources
|
9
|
-
@
|
10
|
-
@
|
12
|
+
@path_sources = []
|
13
|
+
@git_sources = []
|
14
|
+
@plugin_sources = []
|
15
|
+
@global_rubygems_source = nil
|
16
|
+
@rubygems_aggregate = rubygems_aggregate_class.new
|
17
|
+
@rubygems_sources = []
|
18
|
+
@metadata_source = Source::Metadata.new
|
11
19
|
end
|
12
20
|
|
13
21
|
def add_path_source(options = {})
|
14
|
-
|
22
|
+
if options["gemspec"]
|
23
|
+
add_source_to_list Source::Gemspec.new(options), path_sources
|
24
|
+
else
|
25
|
+
add_source_to_list Source::Path.new(options), path_sources
|
26
|
+
end
|
15
27
|
end
|
16
28
|
|
17
29
|
def add_git_source(options = {})
|
18
|
-
add_source_to_list
|
30
|
+
add_source_to_list(Source::Git.new(options), git_sources).tap do |source|
|
31
|
+
warn_on_git_protocol(source)
|
32
|
+
end
|
19
33
|
end
|
20
34
|
|
21
35
|
def add_rubygems_source(options = {})
|
22
36
|
add_source_to_list Source::Rubygems.new(options), @rubygems_sources
|
23
37
|
end
|
24
38
|
|
39
|
+
def add_plugin_source(source, options = {})
|
40
|
+
add_source_to_list Plugin.source(source).new(options), @plugin_sources
|
41
|
+
end
|
42
|
+
|
43
|
+
def global_rubygems_source=(uri)
|
44
|
+
if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
45
|
+
@global_rubygems_source ||= rubygems_aggregate_class.new("remotes" => uri)
|
46
|
+
end
|
47
|
+
add_rubygems_remote(uri)
|
48
|
+
end
|
49
|
+
|
25
50
|
def add_rubygems_remote(uri)
|
51
|
+
if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
52
|
+
return if Bundler.feature_flag.disable_multisource?
|
53
|
+
raise InvalidOption, "`lockfile_uses_separate_rubygems_sources` cannot be set without `disable_multisource` being set"
|
54
|
+
end
|
26
55
|
@rubygems_aggregate.add_remote(uri)
|
27
56
|
@rubygems_aggregate
|
28
57
|
end
|
29
58
|
|
59
|
+
def default_source
|
60
|
+
global_rubygems_source || @rubygems_aggregate
|
61
|
+
end
|
62
|
+
|
30
63
|
def rubygems_sources
|
31
|
-
@rubygems_sources + [
|
64
|
+
@rubygems_sources + [default_source]
|
32
65
|
end
|
33
66
|
|
34
67
|
def rubygems_remotes
|
@@ -36,34 +69,42 @@ module Bundler
|
|
36
69
|
end
|
37
70
|
|
38
71
|
def all_sources
|
39
|
-
path_sources + git_sources + rubygems_sources
|
72
|
+
path_sources + git_sources + plugin_sources + rubygems_sources + [metadata_source]
|
40
73
|
end
|
41
74
|
|
42
75
|
def get(source)
|
43
|
-
source_list_for(source).find {
|
76
|
+
source_list_for(source).find {|s| equal_source?(source, s) || equivalent_source?(source, s) }
|
44
77
|
end
|
45
78
|
|
46
79
|
def lock_sources
|
47
|
-
|
48
|
-
|
80
|
+
if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
|
81
|
+
[[default_source], @rubygems_sources, git_sources, path_sources, plugin_sources].map do |sources|
|
82
|
+
sources.sort_by(&:to_s)
|
83
|
+
end.flatten(1)
|
84
|
+
else
|
85
|
+
lock_sources = (path_sources + git_sources + plugin_sources).sort_by(&:to_s)
|
86
|
+
lock_sources << combine_rubygems_sources
|
87
|
+
end
|
49
88
|
end
|
50
89
|
|
90
|
+
# Returns true if there are changes
|
51
91
|
def replace_sources!(replacement_sources)
|
52
92
|
return true if replacement_sources.empty?
|
53
93
|
|
54
|
-
[path_sources, git_sources].each do |source_list|
|
94
|
+
[path_sources, git_sources, plugin_sources].each do |source_list|
|
55
95
|
source_list.map! do |source|
|
56
|
-
replacement_sources.find {
|
96
|
+
replacement_sources.find {|s| s == source } || source
|
57
97
|
end
|
58
98
|
end
|
59
99
|
|
60
|
-
replacement_rubygems =
|
61
|
-
replacement_sources.detect {
|
100
|
+
replacement_rubygems = !Bundler.feature_flag.lockfile_uses_separate_rubygems_sources? &&
|
101
|
+
replacement_sources.detect {|s| s.is_a?(Source::Rubygems) }
|
62
102
|
@rubygems_aggregate = replacement_rubygems if replacement_rubygems
|
63
103
|
|
64
|
-
|
65
|
-
|
66
|
-
|
104
|
+
return true if !equal_sources?(lock_sources, replacement_sources) && !equivalent_sources?(lock_sources, replacement_sources)
|
105
|
+
return true if replacement_rubygems && rubygems_remotes.to_set != replacement_rubygems.remotes.to_set
|
106
|
+
|
107
|
+
false
|
67
108
|
end
|
68
109
|
|
69
110
|
def cached!
|
@@ -80,6 +121,10 @@ module Bundler
|
|
80
121
|
|
81
122
|
private
|
82
123
|
|
124
|
+
def rubygems_aggregate_class
|
125
|
+
Source::Rubygems
|
126
|
+
end
|
127
|
+
|
83
128
|
def add_source_to_list(source, list)
|
84
129
|
list.unshift(source).uniq!
|
85
130
|
source
|
@@ -87,9 +132,10 @@ module Bundler
|
|
87
132
|
|
88
133
|
def source_list_for(source)
|
89
134
|
case source
|
90
|
-
when Source::Git
|
91
|
-
when Source::Path
|
92
|
-
when Source::Rubygems
|
135
|
+
when Source::Git then git_sources
|
136
|
+
when Source::Path then path_sources
|
137
|
+
when Source::Rubygems then rubygems_sources
|
138
|
+
when Plugin::API::Source then plugin_sources
|
93
139
|
else raise ArgumentError, "Invalid source: #{source.inspect}"
|
94
140
|
end
|
95
141
|
end
|
@@ -97,5 +143,44 @@ module Bundler
|
|
97
143
|
def combine_rubygems_sources
|
98
144
|
Source::Rubygems.new("remotes" => rubygems_remotes)
|
99
145
|
end
|
146
|
+
|
147
|
+
def warn_on_git_protocol(source)
|
148
|
+
return if Bundler.settings["git.allow_insecure"]
|
149
|
+
|
150
|
+
if source.uri =~ /^git\:/
|
151
|
+
Bundler.ui.warn "The git source `#{source.uri}` uses the `git` protocol, " \
|
152
|
+
"which transmits data without encryption. Disable this warning with " \
|
153
|
+
"`bundle config git.allow_insecure true`, or switch to the `https` " \
|
154
|
+
"protocol to keep your data secure."
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def equal_sources?(lock_sources, replacement_sources)
|
159
|
+
lock_sources.to_set == replacement_sources.to_set
|
160
|
+
end
|
161
|
+
|
162
|
+
def equal_source?(source, other_source)
|
163
|
+
source == other_source
|
164
|
+
end
|
165
|
+
|
166
|
+
def equivalent_source?(source, other_source)
|
167
|
+
return false unless Bundler.settings[:allow_deployment_source_credential_changes] && source.is_a?(Source::Rubygems)
|
168
|
+
|
169
|
+
equivalent_rubygems_sources?([source], [other_source])
|
170
|
+
end
|
171
|
+
|
172
|
+
def equivalent_sources?(lock_sources, replacement_sources)
|
173
|
+
return false unless Bundler.settings[:allow_deployment_source_credential_changes]
|
174
|
+
|
175
|
+
lock_rubygems_sources, lock_other_sources = lock_sources.partition {|s| s.is_a?(Source::Rubygems) }
|
176
|
+
replacement_rubygems_sources, replacement_other_sources = replacement_sources.partition {|s| s.is_a?(Source::Rubygems) }
|
177
|
+
|
178
|
+
equivalent_rubygems_sources?(lock_rubygems_sources, replacement_rubygems_sources) && equal_sources?(lock_other_sources, replacement_other_sources)
|
179
|
+
end
|
180
|
+
|
181
|
+
def equivalent_rubygems_sources?(lock_sources, replacement_sources)
|
182
|
+
actual_remotes = replacement_sources.map(&:remotes).flatten.uniq
|
183
|
+
lock_sources.all? {|s| s.equivalent_remotes?(actual_remotes) }
|
184
|
+
end
|
100
185
|
end
|
101
186
|
end
|
data/lib/bundler/spec_set.rb
CHANGED
@@ -1,37 +1,32 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tsort"
|
4
|
+
require "forwardable"
|
5
|
+
require "set"
|
3
6
|
|
4
7
|
module Bundler
|
5
8
|
class SpecSet
|
6
9
|
extend Forwardable
|
7
10
|
include TSort, Enumerable
|
8
11
|
|
9
|
-
def_delegators :@specs, :<<, :length, :add, :remove
|
12
|
+
def_delegators :@specs, :<<, :length, :add, :remove, :size, :empty?
|
10
13
|
def_delegators :sorted, :each
|
11
14
|
|
12
15
|
def initialize(specs)
|
13
|
-
@specs = specs
|
16
|
+
@specs = specs
|
14
17
|
end
|
15
18
|
|
16
|
-
def for(dependencies, skip = [], check = false, match_current_platform = false)
|
17
|
-
handled
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
dep = deps.shift
|
22
|
-
next if handled[dep] || skip.include?(dep.name)
|
23
|
-
|
24
|
-
spec = lookup[dep.name].find do |s|
|
25
|
-
if match_current_platform
|
26
|
-
Gem::Platform.match(s.platform)
|
27
|
-
else
|
28
|
-
s.match_platform(dep.__platform)
|
29
|
-
end
|
30
|
-
end
|
19
|
+
def for(dependencies, skip = [], check = false, match_current_platform = false, raise_on_missing = true)
|
20
|
+
handled = Set.new
|
21
|
+
deps = dependencies.dup
|
22
|
+
specs = []
|
23
|
+
skip += ["bundler"]
|
31
24
|
|
32
|
-
|
25
|
+
loop do
|
26
|
+
break unless dep = deps.shift
|
27
|
+
next if !handled.add?(dep) || skip.include?(dep.name)
|
33
28
|
|
34
|
-
if spec
|
29
|
+
if spec = spec_for_dependency(dep, match_current_platform)
|
35
30
|
specs << spec
|
36
31
|
|
37
32
|
spec.dependencies.each do |d|
|
@@ -41,10 +36,15 @@ module Bundler
|
|
41
36
|
end
|
42
37
|
elsif check
|
43
38
|
return false
|
39
|
+
elsif raise_on_missing
|
40
|
+
others = lookup[dep.name] if match_current_platform
|
41
|
+
message = "Unable to find a spec satisfying #{dep} in the set. Perhaps the lockfile is corrupted?"
|
42
|
+
message += " Found #{others.join(", ")} that did not match the current platform." if others && !others.empty?
|
43
|
+
raise GemNotFound, message
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
if spec = lookup[
|
47
|
+
if spec = lookup["bundler"].first
|
48
48
|
specs << spec
|
49
49
|
end
|
50
50
|
|
@@ -80,42 +80,69 @@ module Bundler
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def materialize(deps, missing_specs = nil)
|
83
|
-
materialized = self.for(deps, [], false, true).to_a
|
84
|
-
deps = materialized.map
|
83
|
+
materialized = self.for(deps, [], false, true, !missing_specs).to_a
|
84
|
+
deps = materialized.map(&:name).uniq
|
85
85
|
materialized.map! do |s|
|
86
86
|
next s unless s.is_a?(LazySpecification)
|
87
87
|
s.source.dependency_names = deps if s.source.respond_to?(:dependency_names=)
|
88
88
|
spec = s.__materialize__
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
89
|
+
unless spec
|
90
|
+
unless missing_specs
|
91
|
+
raise GemNotFound, "Could not find #{s.full_name} in any of the sources"
|
92
|
+
end
|
93
|
+
missing_specs << s
|
93
94
|
end
|
94
|
-
spec
|
95
|
+
spec
|
96
|
+
end
|
97
|
+
SpecSet.new(missing_specs ? materialized.compact : materialized)
|
98
|
+
end
|
99
|
+
|
100
|
+
# Materialize for all the specs in the spec set, regardless of what platform they're for
|
101
|
+
# This is in contrast to how for does platform filtering (and specifically different from how `materialize` calls `for` only for the current platform)
|
102
|
+
# @return [Array<Gem::Specification>]
|
103
|
+
def materialized_for_all_platforms
|
104
|
+
names = @specs.map(&:name).uniq
|
105
|
+
@specs.map do |s|
|
106
|
+
next s unless s.is_a?(LazySpecification)
|
107
|
+
s.source.dependency_names = names if s.source.respond_to?(:dependency_names=)
|
108
|
+
spec = s.__materialize__
|
109
|
+
raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
|
110
|
+
spec
|
95
111
|
end
|
96
|
-
SpecSet.new(materialized.compact)
|
97
112
|
end
|
98
113
|
|
99
114
|
def merge(set)
|
100
115
|
arr = sorted.dup
|
101
|
-
set.each do |
|
102
|
-
|
103
|
-
arr
|
116
|
+
set.each do |set_spec|
|
117
|
+
full_name = set_spec.full_name
|
118
|
+
next if arr.any? {|spec| spec.full_name == full_name }
|
119
|
+
arr << set_spec
|
104
120
|
end
|
105
121
|
SpecSet.new(arr)
|
106
122
|
end
|
107
123
|
|
124
|
+
def find_by_name_and_platform(name, platform)
|
125
|
+
@specs.detect {|spec| spec.name == name && spec.match_platform(platform) }
|
126
|
+
end
|
127
|
+
|
128
|
+
def what_required(spec)
|
129
|
+
unless req = find {|s| s.dependencies.any? {|d| d.type == :runtime && d.name == spec.name } }
|
130
|
+
return [spec]
|
131
|
+
end
|
132
|
+
what_required(req) << spec
|
133
|
+
end
|
134
|
+
|
108
135
|
private
|
109
136
|
|
110
137
|
def sorted
|
111
|
-
rake = @specs.find {
|
138
|
+
rake = @specs.find {|s| s.name == "rake" }
|
112
139
|
begin
|
113
140
|
@sorted ||= ([rake] + tsort).compact.uniq
|
114
141
|
rescue TSort::Cyclic => error
|
115
142
|
cgems = extract_circular_gems(error)
|
116
|
-
raise CyclicDependencyError, "Your
|
117
|
-
"
|
118
|
-
"
|
143
|
+
raise CyclicDependencyError, "Your bundle requires gems that depend" \
|
144
|
+
" on each other, creating an infinite loop. Please remove either" \
|
145
|
+
" gem '#{cgems[1]}' or gem '#{cgems[0]}' and try again."
|
119
146
|
end
|
120
147
|
end
|
121
148
|
|
@@ -129,11 +156,8 @@ module Bundler
|
|
129
156
|
|
130
157
|
def lookup
|
131
158
|
@lookup ||= begin
|
132
|
-
lookup = Hash.new {
|
133
|
-
|
134
|
-
s.platform.to_s == 'ruby' ? "\0" : s.platform.to_s
|
135
|
-
end
|
136
|
-
specs.reverse_each do |s|
|
159
|
+
lookup = Hash.new {|h, k| h[k] = [] }
|
160
|
+
Index.sort_specs(@specs).reverse_each do |s|
|
137
161
|
lookup[s.name] << s
|
138
162
|
end
|
139
163
|
lookup
|
@@ -141,13 +165,27 @@ module Bundler
|
|
141
165
|
end
|
142
166
|
|
143
167
|
def tsort_each_node
|
144
|
-
|
168
|
+
# MUST sort by name for backwards compatibility
|
169
|
+
@specs.sort_by(&:name).each {|s| yield s }
|
170
|
+
end
|
171
|
+
|
172
|
+
def spec_for_dependency(dep, match_current_platform)
|
173
|
+
specs_for_platforms = lookup[dep.name]
|
174
|
+
if match_current_platform
|
175
|
+
Bundler.rubygems.platforms.reverse_each do |pl|
|
176
|
+
match = GemHelpers.select_best_platform_match(specs_for_platforms, pl)
|
177
|
+
return match if match
|
178
|
+
end
|
179
|
+
nil
|
180
|
+
else
|
181
|
+
GemHelpers.select_best_platform_match(specs_for_platforms, dep.__platform)
|
182
|
+
end
|
145
183
|
end
|
146
184
|
|
147
185
|
def tsort_each_child(s)
|
148
|
-
s.dependencies.sort_by
|
186
|
+
s.dependencies.sort_by(&:name).each do |d|
|
149
187
|
next if d.type == :development
|
150
|
-
lookup[d.name].each {
|
188
|
+
lookup[d.name].each {|s2| yield s2 }
|
151
189
|
end
|
152
190
|
end
|
153
191
|
end
|