bundler 1.17.0.pre.2 → 2.1.0.pre.2
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 +4 -4
- data/CHANGELOG.md +769 -570
- data/LICENSE.md +18 -19
- data/README.md +9 -8
- data/bundler.gemspec +12 -23
- data/exe/bundle +19 -3
- data/lib/bundler.rb +121 -68
- data/lib/bundler/build_metadata.rb +14 -7
- data/lib/bundler/capistrano.rb +4 -4
- data/lib/bundler/cli.rb +129 -121
- data/lib/bundler/cli/add.rb +27 -16
- data/lib/bundler/cli/common.rb +11 -12
- data/lib/bundler/cli/config.rb +161 -86
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/doctor.rb +4 -4
- data/lib/bundler/cli/exec.rb +4 -9
- data/lib/bundler/cli/gem.rb +5 -5
- data/lib/bundler/cli/info.rb +17 -5
- data/lib/bundler/cli/init.rb +1 -1
- data/lib/bundler/cli/install.rb +11 -10
- data/lib/bundler/cli/issue.rb +3 -3
- data/lib/bundler/cli/open.rb +10 -6
- data/lib/bundler/cli/outdated.rb +85 -81
- data/lib/bundler/cli/package.rb +8 -9
- data/lib/bundler/cli/plugin.rb +9 -2
- data/lib/bundler/cli/pristine.rb +1 -1
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +31 -11
- data/lib/bundler/compact_index_client.rb +25 -9
- data/lib/bundler/compact_index_client/updater.rb +2 -6
- data/lib/bundler/current_ruby.rb +9 -7
- data/lib/bundler/definition.rb +35 -26
- data/lib/bundler/dependency.rb +16 -4
- data/lib/bundler/deployment.rb +1 -1
- data/lib/bundler/dsl.rb +15 -39
- data/lib/bundler/env.rb +8 -13
- data/lib/bundler/environment_preserver.rb +0 -1
- data/lib/bundler/feature_flag.rb +23 -32
- data/lib/bundler/fetcher.rb +14 -11
- data/lib/bundler/fetcher/compact_index.rb +26 -12
- data/lib/bundler/fetcher/dependency.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +4 -1
- data/lib/bundler/fetcher/index.rb +4 -2
- data/lib/bundler/friendly_errors.rb +4 -5
- data/lib/bundler/gem_helper.rb +39 -24
- data/lib/bundler/gem_helpers.rb +2 -4
- data/lib/bundler/gem_tasks.rb +1 -1
- data/lib/bundler/gem_version_promoter.rb +3 -3
- data/lib/bundler/graph.rb +2 -2
- data/lib/bundler/injector.rb +10 -8
- data/lib/bundler/inline.rb +19 -18
- data/lib/bundler/installer.rb +7 -14
- data/lib/bundler/installer/gem_installer.rb +5 -1
- data/lib/bundler/installer/parallel_installer.rb +4 -8
- data/lib/bundler/installer/standalone.rb +1 -2
- data/lib/bundler/lazy_specification.rb +2 -2
- data/lib/bundler/lockfile_parser.rb +13 -21
- data/lib/bundler/match_platform.rb +1 -1
- data/lib/bundler/plugin.rb +42 -29
- data/lib/bundler/plugin/api.rb +1 -1
- data/lib/bundler/plugin/api/source.rb +2 -2
- data/lib/bundler/plugin/index.rb +14 -3
- data/lib/bundler/plugin/installer.rb +28 -15
- data/lib/bundler/psyched_yaml.rb +1 -1
- data/lib/bundler/resolver.rb +72 -24
- data/lib/bundler/resolver/spec_group.rb +3 -2
- data/lib/bundler/retry.rb +2 -2
- data/lib/bundler/ruby_version.rb +4 -19
- data/lib/bundler/rubygems_ext.rb +10 -66
- data/lib/bundler/rubygems_gem_installer.rb +1 -1
- data/lib/bundler/rubygems_integration.rb +144 -395
- data/lib/bundler/runtime.rb +2 -9
- data/lib/bundler/settings.rb +15 -47
- data/lib/bundler/setup.rb +6 -5
- data/lib/bundler/shared_helpers.rb +64 -67
- data/lib/bundler/similarity_detector.rb +2 -2
- data/lib/bundler/source.rb +5 -5
- data/lib/bundler/source/git.rb +19 -12
- data/lib/bundler/source/git/git_proxy.rb +35 -39
- data/lib/bundler/source/metadata.rb +9 -5
- data/lib/bundler/source/path.rb +13 -8
- data/lib/bundler/source/rubygems.rb +11 -5
- data/lib/bundler/source/rubygems/remote.rb +1 -2
- data/lib/bundler/source_list.rb +9 -12
- data/lib/bundler/spec_set.rb +23 -12
- data/lib/bundler/stub_specification.rb +18 -30
- data/lib/bundler/templates/Executable.bundler +23 -14
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +3 -3
- data/lib/bundler/templates/newgem/Gemfile.tt +8 -2
- data/lib/bundler/templates/newgem/README.md.tt +4 -3
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -27
- data/lib/bundler/templates/newgem/test/test_helper.rb.tt +1 -1
- data/lib/bundler/templates/newgem/travis.yml.tt +0 -1
- data/lib/bundler/ui.rb +3 -3
- data/lib/bundler/ui/rg_proxy.rb +1 -1
- data/lib/bundler/ui/shell.rb +4 -8
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +161 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/monotonic_time.rb +66 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +176 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +151 -48
- data/lib/bundler/vendor/fileutils/lib/fileutils/version.rb +5 -0
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +6 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +6 -6
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +30 -8
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +2 -2
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +248 -279
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +40 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +53 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +79 -0
- data/lib/bundler/vendor/thor/lib/thor.rb +7 -2
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +21 -11
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +11 -2
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +16 -17
- data/lib/bundler/vendor/thor/lib/thor/error.rb +82 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +3 -3
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +2 -2
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +7 -2
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +6 -6
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +4 -4
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +52 -7
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendored_fileutils.rb +1 -6
- data/lib/bundler/vendored_molinillo.rb +1 -1
- data/lib/bundler/vendored_persistent.rb +7 -5
- data/lib/bundler/vendored_thor.rb +2 -2
- data/lib/bundler/version.rb +1 -20
- data/lib/bundler/version_ranges.rb +51 -5
- data/lib/bundler/vlad.rb +2 -2
- data/lib/bundler/worker.rb +1 -3
- data/lib/bundler/yaml_serializer.rb +2 -3
- data/man/bundle-add.1 +10 -2
- data/man/bundle-add.1.txt +11 -5
- data/man/bundle-add.ronn +7 -1
- data/man/bundle-binstubs.1 +2 -2
- data/man/bundle-binstubs.1.txt +2 -2
- data/man/bundle-binstubs.ronn +1 -1
- data/man/bundle-check.1 +1 -1
- data/man/bundle-check.1.txt +6 -6
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-clean.1.txt +1 -1
- data/man/bundle-config.1 +52 -36
- data/man/bundle-config.1.txt +82 -67
- data/man/bundle-config.ronn +56 -40
- data/man/bundle-doctor.1 +1 -1
- data/man/bundle-doctor.1.txt +1 -1
- data/man/bundle-exec.1 +2 -2
- data/man/bundle-exec.1.txt +2 -2
- data/man/bundle-exec.ronn +1 -1
- data/man/bundle-gem.1 +1 -1
- data/man/bundle-gem.1.txt +3 -3
- data/man/bundle-info.1 +1 -1
- data/man/bundle-info.1.txt +1 -1
- data/man/bundle-init.1 +2 -2
- data/man/bundle-init.1.txt +2 -2
- data/man/bundle-init.ronn +1 -1
- data/man/bundle-inject.1 +1 -1
- data/man/bundle-inject.1.txt +1 -1
- data/man/bundle-install.1 +8 -5
- data/man/bundle-install.1.txt +56 -51
- data/man/bundle-install.ronn +9 -4
- data/man/bundle-list.1 +1 -1
- data/man/bundle-list.1.txt +1 -1
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-lock.1.txt +16 -16
- data/man/bundle-open.1 +1 -1
- data/man/bundle-open.1.txt +1 -1
- data/man/bundle-outdated.1 +1 -1
- data/man/bundle-outdated.1.txt +1 -1
- data/man/bundle-package.1 +1 -1
- data/man/bundle-package.1.txt +1 -1
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-platform.1.txt +1 -1
- data/man/bundle-pristine.1 +1 -1
- data/man/bundle-pristine.1.txt +1 -1
- data/man/bundle-remove.1 +1 -1
- data/man/bundle-remove.1.txt +1 -1
- data/man/bundle-show.1 +1 -1
- data/man/bundle-show.1.txt +1 -1
- data/man/bundle-update.1 +4 -4
- data/man/bundle-update.1.txt +64 -65
- data/man/bundle-update.ronn +3 -3
- data/man/bundle-viz.1 +1 -1
- data/man/bundle-viz.1.txt +1 -1
- data/man/bundle.1 +7 -3
- data/man/bundle.1.txt +11 -8
- data/man/bundle.ronn +5 -2
- data/man/gemfile.5 +17 -20
- data/man/gemfile.5.ronn +14 -18
- data/man/gemfile.5.txt +108 -112
- metadata +17 -104
- data/exe/bundle_ruby +0 -60
- data/lib/bundler/cli/cache.rb +0 -36
- data/lib/bundler/compatibility_guard.rb +0 -14
- data/lib/bundler/ssl_certs/.document +0 -1
- data/lib/bundler/ssl_certs/certificate_manager.rb +0 -66
- data/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/faster.rb +0 -27
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/ssl_reuse.rb +0 -129
data/lib/bundler/cli/package.rb
CHANGED
@@ -11,7 +11,6 @@ module Bundler
|
|
11
11
|
def run
|
12
12
|
Bundler.ui.level = "error" if options[:quiet]
|
13
13
|
Bundler.settings.set_command_option_if_given :path, options[:path]
|
14
|
-
Bundler.settings.set_command_option_if_given :cache_all_platforms, options["all-platforms"]
|
15
14
|
Bundler.settings.set_command_option_if_given :cache_path, options["cache-path"]
|
16
15
|
|
17
16
|
setup_cache_all
|
@@ -19,30 +18,30 @@ module Bundler
|
|
19
18
|
|
20
19
|
# TODO: move cache contents here now that all bundles are locked
|
21
20
|
custom_path = Bundler.settings[:path] if options[:path]
|
22
|
-
|
21
|
+
|
22
|
+
Bundler.settings.temporary(:cache_all_platforms => options["all-platforms"]) do
|
23
|
+
Bundler.load.cache(custom_path)
|
24
|
+
end
|
23
25
|
end
|
24
26
|
|
25
27
|
private
|
26
28
|
|
27
29
|
def install
|
28
|
-
|
30
|
+
require_relative "install"
|
29
31
|
options = self.options.dup
|
30
|
-
if Bundler.settings[:cache_all_platforms]
|
31
|
-
options["local"] = false
|
32
|
-
options["update"] = true
|
33
|
-
end
|
32
|
+
options["local"] = false if Bundler.settings[:cache_all_platforms]
|
34
33
|
Bundler::CLI::Install.new(options).run
|
35
34
|
end
|
36
35
|
|
37
36
|
def setup_cache_all
|
38
|
-
all = options.fetch(:all, Bundler.feature_flag.
|
37
|
+
all = options.fetch(:all, Bundler.feature_flag.cache_all? || nil)
|
39
38
|
|
40
39
|
Bundler.settings.set_command_option_if_given :cache_all, all
|
41
40
|
|
42
41
|
if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
|
43
42
|
Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
|
44
43
|
"to package them as well, please pass the --all flag. This will be the default " \
|
45
|
-
"on Bundler
|
44
|
+
"on Bundler 3.0."
|
46
45
|
end
|
47
46
|
end
|
48
47
|
end
|
data/lib/bundler/cli/plugin.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "../vendored_thor"
|
4
4
|
module Bundler
|
5
5
|
class CLI::Plugin < Thor
|
6
6
|
desc "install PLUGINS", "Install the plugin from the source"
|
7
7
|
long_desc <<-D
|
8
|
-
Install plugins either from the rubygems source provided (with --source option) or from a git source provided with
|
8
|
+
Install plugins either from the rubygems source provided (with --source option) or from a git source provided with --git (for remote repos) or --local_git (for local repos). If no sources are provided, it uses Gem.sources
|
9
9
|
D
|
10
10
|
method_option "source", :type => :string, :default => nil, :banner =>
|
11
11
|
"URL of the RubyGems source to fetch the plugin from"
|
@@ -13,6 +13,8 @@ module Bundler
|
|
13
13
|
"The version of the plugin to fetch"
|
14
14
|
method_option "git", :type => :string, :default => nil, :banner =>
|
15
15
|
"URL of the git repo to fetch from"
|
16
|
+
method_option "local_git", :type => :string, :default => nil, :banner =>
|
17
|
+
"Path of the local git repo to fetch from"
|
16
18
|
method_option "branch", :type => :string, :default => nil, :banner =>
|
17
19
|
"The git branch to checkout"
|
18
20
|
method_option "ref", :type => :string, :default => nil, :banner =>
|
@@ -20,5 +22,10 @@ module Bundler
|
|
20
22
|
def install(*plugins)
|
21
23
|
Bundler::Plugin.install(plugins, options)
|
22
24
|
end
|
25
|
+
|
26
|
+
desc "list", "List the installed plugins and available commands"
|
27
|
+
def list
|
28
|
+
Bundler::Plugin.list
|
29
|
+
end
|
23
30
|
end
|
24
31
|
end
|
data/lib/bundler/cli/pristine.rb
CHANGED
@@ -33,7 +33,7 @@ module Bundler
|
|
33
33
|
if extension_cache_path = source.extension_cache_path(spec)
|
34
34
|
FileUtils.rm_rf extension_cache_path
|
35
35
|
end
|
36
|
-
FileUtils.rm_rf spec.extension_dir
|
36
|
+
FileUtils.rm_rf spec.extension_dir
|
37
37
|
FileUtils.rm_rf spec.full_gem_path
|
38
38
|
else
|
39
39
|
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
|
data/lib/bundler/cli/show.rb
CHANGED
@@ -24,7 +24,7 @@ module Bundler
|
|
24
24
|
return unless spec
|
25
25
|
path = spec.full_gem_path
|
26
26
|
unless File.directory?(path)
|
27
|
-
Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at:"
|
27
|
+
return Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at: #{path}"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
return Bundler.ui.info(path)
|
data/lib/bundler/cli/update.rb
CHANGED
@@ -58,24 +58,44 @@ module Bundler
|
|
58
58
|
Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
|
59
59
|
|
60
60
|
Bundler.definition.validate_runtime!
|
61
|
+
|
62
|
+
if locked_gems = Bundler.definition.locked_gems
|
63
|
+
previous_locked_info = locked_gems.specs.reduce({}) do |h, s|
|
64
|
+
h[s.name] = { :spec => s, :version => s.version, :source => s.source.to_s }
|
65
|
+
h
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
61
69
|
installer = Installer.install Bundler.root, Bundler.definition, opts
|
62
70
|
Bundler.load.cache if Bundler.app_cache.exist?
|
63
71
|
|
64
72
|
if CLI::Common.clean_after_install?
|
65
|
-
|
73
|
+
require_relative "clean"
|
66
74
|
Bundler::CLI::Clean.new(options).run
|
67
75
|
end
|
68
76
|
|
69
|
-
if locked_gems
|
77
|
+
if locked_gems
|
70
78
|
gems.each do |name|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
Bundler.
|
78
|
-
|
79
|
+
locked_info = previous_locked_info[name]
|
80
|
+
next unless locked_info
|
81
|
+
|
82
|
+
locked_spec = locked_info[:spec]
|
83
|
+
new_spec = Bundler.definition.specs[name].first
|
84
|
+
unless new_spec
|
85
|
+
if Bundler.rubygems.platforms.none? {|p| locked_spec.match_platform(p) }
|
86
|
+
Bundler.ui.warn "Bundler attempted to update #{name} but it was not considered because it is for a different platform from the current one"
|
87
|
+
end
|
88
|
+
|
89
|
+
next
|
90
|
+
end
|
91
|
+
|
92
|
+
locked_source = locked_info[:source]
|
93
|
+
new_source = new_spec.source.to_s
|
94
|
+
next if locked_source != new_source
|
95
|
+
|
96
|
+
new_version = new_spec.version
|
97
|
+
locked_version = locked_info[:version]
|
98
|
+
if new_version < locked_version
|
79
99
|
Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
|
80
100
|
elsif new_version == locked_version
|
81
101
|
Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
|
@@ -84,7 +104,7 @@ module Bundler
|
|
84
104
|
end
|
85
105
|
|
86
106
|
Bundler.ui.confirm "Bundle updated!"
|
87
|
-
Bundler::CLI::Common.output_without_groups_message
|
107
|
+
Bundler::CLI::Common.output_without_groups_message(:update)
|
88
108
|
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
89
109
|
end
|
90
110
|
end
|
@@ -13,16 +13,11 @@ module Bundler
|
|
13
13
|
|
14
14
|
class Error < StandardError; end
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
require_relative "compact_index_client/cache"
|
17
|
+
require_relative "compact_index_client/updater"
|
18
18
|
|
19
19
|
attr_reader :directory
|
20
20
|
|
21
|
-
# @return [Lambda] A lambda that takes an array of inputs and a block, and
|
22
|
-
# maps the inputs with the block in parallel.
|
23
|
-
#
|
24
|
-
attr_accessor :in_parallel
|
25
|
-
|
26
21
|
def initialize(directory, fetcher)
|
27
22
|
@directory = Pathname.new(directory)
|
28
23
|
@updater = Updater.new(fetcher)
|
@@ -31,7 +26,28 @@ module Bundler
|
|
31
26
|
@info_checksums_by_name = {}
|
32
27
|
@parsed_checksums = false
|
33
28
|
@mutex = Mutex.new
|
34
|
-
|
29
|
+
end
|
30
|
+
|
31
|
+
def execution_mode=(block)
|
32
|
+
Bundler::CompactIndexClient.debug { "execution_mode=" }
|
33
|
+
@endpoints = Set.new
|
34
|
+
|
35
|
+
@execution_mode = block
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Lambda] A lambda that takes an array of inputs and a block, and
|
39
|
+
# maps the inputs with the block in parallel.
|
40
|
+
#
|
41
|
+
def execution_mode
|
42
|
+
@execution_mode || sequentially
|
43
|
+
end
|
44
|
+
|
45
|
+
def sequential_execution_mode!
|
46
|
+
self.execution_mode = sequentially
|
47
|
+
end
|
48
|
+
|
49
|
+
def sequentially
|
50
|
+
@sequentially ||= lambda do |inputs, &blk|
|
35
51
|
inputs.map(&blk)
|
36
52
|
end
|
37
53
|
end
|
@@ -51,7 +67,7 @@ module Bundler
|
|
51
67
|
|
52
68
|
def dependencies(names)
|
53
69
|
Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
|
54
|
-
|
70
|
+
execution_mode.call(names) do |name|
|
55
71
|
update_info(name)
|
56
72
|
@cache.dependencies(name).map {|d| d.unshift(name) }
|
57
73
|
end.flatten(1)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "../vendored_fileutils"
|
4
4
|
require "stringio"
|
5
5
|
require "zlib"
|
6
6
|
|
@@ -95,11 +95,7 @@ module Bundler
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def slice_body(body, range)
|
98
|
-
|
99
|
-
body.byteslice(range)
|
100
|
-
else # pre-1.9.3
|
101
|
-
body.unpack("@#{range.first}a#{range.end + 1}").first
|
102
|
-
end
|
98
|
+
body.byteslice(range)
|
103
99
|
end
|
104
100
|
|
105
101
|
def checksum_for_file(path)
|
data/lib/bundler/current_ruby.rb
CHANGED
@@ -19,6 +19,7 @@ module Bundler
|
|
19
19
|
2.4
|
20
20
|
2.5
|
21
21
|
2.6
|
22
|
+
2.7
|
22
23
|
].freeze
|
23
24
|
|
24
25
|
KNOWN_MAJOR_VERSIONS = KNOWN_MINOR_VERSIONS.map {|v| v.split(".", 2).first }.uniq.freeze
|
@@ -37,28 +38,29 @@ module Bundler
|
|
37
38
|
].freeze
|
38
39
|
|
39
40
|
def ruby?
|
40
|
-
|
41
|
-
|
41
|
+
return true if Bundler::GemHelpers.generic_local_platform == Gem::Platform::RUBY
|
42
|
+
|
43
|
+
!mswin? && (RUBY_ENGINE == "ruby" || RUBY_ENGINE == "rbx" || RUBY_ENGINE == "maglev" || RUBY_ENGINE == "truffleruby")
|
42
44
|
end
|
43
45
|
|
44
46
|
def mri?
|
45
|
-
!mswin? &&
|
47
|
+
!mswin? && RUBY_ENGINE == "ruby"
|
46
48
|
end
|
47
49
|
|
48
50
|
def rbx?
|
49
|
-
ruby? &&
|
51
|
+
ruby? && RUBY_ENGINE == "rbx"
|
50
52
|
end
|
51
53
|
|
52
54
|
def jruby?
|
53
|
-
|
55
|
+
RUBY_ENGINE == "jruby"
|
54
56
|
end
|
55
57
|
|
56
58
|
def maglev?
|
57
|
-
|
59
|
+
RUBY_ENGINE == "maglev"
|
58
60
|
end
|
59
61
|
|
60
62
|
def truffleruby?
|
61
|
-
|
63
|
+
RUBY_ENGINE == "truffleruby"
|
62
64
|
end
|
63
65
|
|
64
66
|
def mswin?
|
data/lib/bundler/definition.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "lockfile_parser"
|
4
4
|
require "set"
|
5
5
|
|
6
6
|
module Bundler
|
@@ -167,7 +167,7 @@ module Bundler
|
|
167
167
|
def specs
|
168
168
|
@specs ||= begin
|
169
169
|
begin
|
170
|
-
specs = resolve.materialize(
|
170
|
+
specs = resolve.materialize(requested_dependencies)
|
171
171
|
rescue GemNotFound => e # Handle yanked gem
|
172
172
|
gem_name, gem_version = extract_gem_info(e)
|
173
173
|
locked_gem = @locked_specs[gem_name].last
|
@@ -317,7 +317,7 @@ module Bundler
|
|
317
317
|
end
|
318
318
|
|
319
319
|
def spec_git_paths
|
320
|
-
sources.git_sources.map {|s| s.path.
|
320
|
+
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
|
321
321
|
end
|
322
322
|
|
323
323
|
def groups
|
@@ -385,7 +385,7 @@ module Bundler
|
|
385
385
|
end
|
386
386
|
|
387
387
|
def to_lock
|
388
|
-
|
388
|
+
require_relative "lockfile_generator"
|
389
389
|
LockfileGenerator.generate(self)
|
390
390
|
end
|
391
391
|
|
@@ -397,9 +397,9 @@ module Bundler
|
|
397
397
|
|
398
398
|
unless explicit_flag
|
399
399
|
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
400
|
-
"bundle config
|
400
|
+
"bundle config unset frozen"
|
401
401
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
402
|
-
"bundle config
|
402
|
+
"bundle config unset deployment"
|
403
403
|
else
|
404
404
|
"bundle install --no-deployment"
|
405
405
|
end
|
@@ -519,9 +519,7 @@ module Bundler
|
|
519
519
|
end
|
520
520
|
|
521
521
|
def add_current_platform
|
522
|
-
|
523
|
-
add_platform(current_platform) if Bundler.feature_flag.specific_platform?
|
524
|
-
add_platform(generic(current_platform))
|
522
|
+
current_platforms.each {|platform| add_platform(platform) }
|
525
523
|
end
|
526
524
|
|
527
525
|
def find_resolved_spec(current_spec)
|
@@ -545,6 +543,14 @@ module Bundler
|
|
545
543
|
|
546
544
|
private
|
547
545
|
|
546
|
+
def current_platforms
|
547
|
+
current_platform = Bundler.local_platform
|
548
|
+
[].tap do |platforms|
|
549
|
+
platforms << current_platform if Bundler.feature_flag.specific_platform?
|
550
|
+
platforms << generic(current_platform)
|
551
|
+
end
|
552
|
+
end
|
553
|
+
|
548
554
|
def change_reason
|
549
555
|
if unlocking?
|
550
556
|
unlock_reason = @unlock.reject {|_k, v| Array(v).empty? }.map do |k, v|
|
@@ -643,7 +649,7 @@ module Bundler
|
|
643
649
|
end
|
644
650
|
|
645
651
|
def converge_rubygems_sources
|
646
|
-
return false if Bundler.feature_flag.
|
652
|
+
return false if Bundler.feature_flag.disable_multisource?
|
647
653
|
|
648
654
|
changes = false
|
649
655
|
|
@@ -782,7 +788,7 @@ module Bundler
|
|
782
788
|
|
783
789
|
# Path sources have special logic
|
784
790
|
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
|
785
|
-
|
791
|
+
new_specs = begin
|
786
792
|
s.source.specs
|
787
793
|
rescue PathError, GitError
|
788
794
|
# if we won't need the source (according to the lockfile),
|
@@ -794,25 +800,26 @@ module Bundler
|
|
794
800
|
raise
|
795
801
|
end
|
796
802
|
|
797
|
-
|
803
|
+
new_spec = new_specs[s].first
|
798
804
|
|
799
805
|
# If the spec is no longer in the path source, unlock it. This
|
800
806
|
# commonly happens if the version changed in the gemspec
|
801
|
-
next unless
|
807
|
+
next unless new_spec
|
808
|
+
|
809
|
+
new_runtime_deps = new_spec.dependencies.select {|d| d.type != :development }
|
810
|
+
old_runtime_deps = s.dependencies.select {|d| d.type != :development }
|
811
|
+
# If the dependencies of the path source have changed and locked spec can't satisfy new dependencies, unlock it
|
812
|
+
next unless new_runtime_deps.sort == old_runtime_deps.sort || new_runtime_deps.all? {|d| satisfies_locked_spec?(d) }
|
802
813
|
|
803
|
-
|
804
|
-
runtime_dependencies = s.dependencies.select {|d| d.type != :development }
|
805
|
-
# If the dependencies of the path source have changed, unlock it
|
806
|
-
next unless runtime_dependencies.sort == deps2.sort
|
814
|
+
s.dependencies.replace(new_spec.dependencies)
|
807
815
|
end
|
808
816
|
|
809
817
|
converged << s
|
810
818
|
end
|
811
819
|
|
812
820
|
resolve = SpecSet.new(converged)
|
813
|
-
|
814
|
-
|
815
|
-
resolve = resolve.for(expanded_deps, @unlock[:gems], false, false, false)
|
821
|
+
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(deps), @unlock[:gems], true, true)
|
822
|
+
resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
|
816
823
|
diff = nil
|
817
824
|
|
818
825
|
# Now, we unlock any sources that do not have anymore gems pinned to it
|
@@ -855,8 +862,8 @@ module Bundler
|
|
855
862
|
concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
|
856
863
|
end
|
857
864
|
[
|
858
|
-
Dependency.new("
|
859
|
-
Dependency.new("
|
865
|
+
Dependency.new("Ruby\0", ruby_versions),
|
866
|
+
Dependency.new("RubyGems\0", Gem::VERSION),
|
860
867
|
]
|
861
868
|
end
|
862
869
|
end
|
@@ -885,7 +892,7 @@ module Bundler
|
|
885
892
|
next if !remote && !dep.current_platform?
|
886
893
|
platforms = dep.gem_platforms(sorted_platforms)
|
887
894
|
if platforms.empty? && !Bundler.settings[:disable_platform_warnings]
|
888
|
-
mapped_platforms = dep.
|
895
|
+
mapped_platforms = dep.expanded_platforms
|
889
896
|
Bundler.ui.warn \
|
890
897
|
"The dependency #{dep} will be unused by any of the platforms Bundler is installing for. " \
|
891
898
|
"Bundler is installing for #{@platforms.join ", "} but the dependency " \
|
@@ -915,7 +922,7 @@ module Bundler
|
|
915
922
|
# look for that gemspec (or its dependencies)
|
916
923
|
default = sources.default_source
|
917
924
|
source_requirements = { :default => default }
|
918
|
-
default = nil unless Bundler.feature_flag.
|
925
|
+
default = nil unless Bundler.feature_flag.disable_multisource?
|
919
926
|
dependencies.each do |dep|
|
920
927
|
next unless source = dep.source || default
|
921
928
|
source_requirements[dep.name] = source
|
@@ -929,7 +936,7 @@ module Bundler
|
|
929
936
|
|
930
937
|
def pinned_spec_names(skip = nil)
|
931
938
|
pinned_names = []
|
932
|
-
default = Bundler.feature_flag.
|
939
|
+
default = Bundler.feature_flag.disable_multisource? && sources.default_source
|
933
940
|
@dependencies.each do |dep|
|
934
941
|
next unless dep_source = dep.source || default
|
935
942
|
next if dep_source == skip
|
@@ -977,7 +984,9 @@ module Bundler
|
|
977
984
|
dependencies_by_name = dependencies.inject({}) {|memo, dep| memo.update(dep.name => dep) }
|
978
985
|
@locked_gems.specs.reduce({}) do |requirements, locked_spec|
|
979
986
|
name = locked_spec.name
|
980
|
-
|
987
|
+
dependency = dependencies_by_name[name]
|
988
|
+
next requirements if @locked_gems.dependencies[name] != dependency
|
989
|
+
next requirements if dependency && dependency.source.is_a?(Source::Path)
|
981
990
|
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
982
991
|
requirements[name] = DepProxy.new(dep, locked_spec.platform)
|
983
992
|
requirements
|