bundler 2.1.4 → 2.2.6
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of bundler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1624 -1426
- data/README.md +6 -8
- data/bundler.gemspec +4 -4
- data/exe/bundle +3 -0
- data/lib/bundler.rb +32 -8
- data/lib/bundler/build_metadata.rb +3 -11
- data/lib/bundler/cli.rb +55 -21
- data/lib/bundler/cli/add.rb +1 -1
- data/lib/bundler/cli/binstubs.rb +6 -2
- data/lib/bundler/cli/cache.rb +1 -7
- data/lib/bundler/cli/clean.rb +1 -1
- data/lib/bundler/cli/common.rb +14 -0
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/doctor.rb +1 -1
- data/lib/bundler/cli/exec.rb +4 -4
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +86 -11
- data/lib/bundler/cli/info.rb +15 -4
- data/lib/bundler/cli/init.rb +2 -2
- data/lib/bundler/cli/inject.rb +1 -1
- data/lib/bundler/cli/install.rb +13 -11
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +12 -10
- data/lib/bundler/cli/outdated.rb +87 -66
- data/lib/bundler/cli/plugin.rb +10 -0
- data/lib/bundler/cli/pristine.rb +5 -0
- data/lib/bundler/cli/show.rb +1 -1
- data/lib/bundler/cli/update.rb +3 -1
- data/lib/bundler/compact_index_client.rb +1 -1
- data/lib/bundler/compact_index_client/cache.rb +6 -14
- data/lib/bundler/compact_index_client/gem_parser.rb +28 -0
- data/lib/bundler/compact_index_client/updater.rb +5 -13
- data/lib/bundler/definition.rb +66 -82
- data/lib/bundler/dep_proxy.rb +16 -9
- data/lib/bundler/dependency.rb +3 -10
- data/lib/bundler/dsl.rb +5 -9
- data/lib/bundler/endpoint_specification.rb +1 -1
- data/lib/bundler/env.rb +1 -1
- data/lib/bundler/environment_preserver.rb +26 -2
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +0 -3
- data/lib/bundler/fetcher.rb +4 -3
- data/lib/bundler/fetcher/base.rb +1 -1
- data/lib/bundler/fetcher/compact_index.rb +1 -1
- data/lib/bundler/fetcher/downloader.rb +1 -1
- data/lib/bundler/fetcher/index.rb +3 -4
- data/lib/bundler/friendly_errors.rb +22 -13
- data/lib/bundler/gem_helper.rb +32 -17
- data/lib/bundler/gem_helpers.rb +36 -25
- data/lib/bundler/gem_version_promoter.rb +4 -4
- data/lib/bundler/graph.rb +1 -1
- data/lib/bundler/index.rb +6 -2
- data/lib/bundler/injector.rb +22 -4
- data/lib/bundler/inline.rb +1 -1
- data/lib/bundler/installer.rb +35 -32
- data/lib/bundler/installer/gem_installer.rb +3 -3
- data/lib/bundler/installer/parallel_installer.rb +10 -10
- data/lib/bundler/installer/standalone.rb +2 -2
- data/lib/bundler/lazy_specification.rb +35 -11
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +1 -1
- data/lib/bundler/man/.document +1 -0
- data/{man → lib/bundler/man}/bundle-add.1 +1 -1
- data/{man/bundle-add.ronn → lib/bundler/man/bundle-add.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-binstubs.1 +5 -3
- data/{man/bundle-binstubs.ronn → lib/bundler/man/bundle-binstubs.1.ronn} +2 -4
- data/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/{man/bundle-cache.ronn → lib/bundler/man/bundle-cache.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/{man/bundle-check.ronn → lib/bundler/man/bundle-check.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/{man/bundle-clean.ronn → lib/bundler/man/bundle-clean.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-config.1 +16 -25
- data/{man/bundle-config.ronn → lib/bundler/man/bundle-config.1.ronn} +19 -30
- data/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/{man/bundle-doctor.ronn → lib/bundler/man/bundle-doctor.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/{man/bundle-exec.ronn → lib/bundler/man/bundle-exec.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-gem.1 +25 -3
- data/{man/bundle-gem.ronn → lib/bundler/man/bundle-gem.1.ronn} +30 -7
- data/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/{man/bundle-info.ronn → lib/bundler/man/bundle-info.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/{man/bundle-init.ronn → lib/bundler/man/bundle-init.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/{man/bundle-inject.ronn → lib/bundler/man/bundle-inject.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-install.1 +30 -3
- data/{man/bundle-install.ronn → lib/bundler/man/bundle-install.1.ronn} +25 -3
- data/{man → lib/bundler/man}/bundle-list.1 +7 -7
- data/{man/bundle-list.ronn → lib/bundler/man/bundle-list.1.ronn} +6 -6
- data/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/{man/bundle-lock.ronn → lib/bundler/man/bundle-lock.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/{man/bundle-open.ronn → lib/bundler/man/bundle-open.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/{man/bundle-outdated.ronn → lib/bundler/man/bundle-outdated.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/{man/bundle-platform.ronn → lib/bundler/man/bundle-platform.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/{man/bundle-pristine.ronn → lib/bundler/man/bundle-pristine.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/{man/bundle-remove.ronn → lib/bundler/man/bundle-remove.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/{man/bundle-show.ronn → lib/bundler/man/bundle-show.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-update.1 +1 -1
- data/{man/bundle-update.ronn → lib/bundler/man/bundle-update.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/{man/bundle-viz.ronn → lib/bundler/man/bundle-viz.1.ronn} +0 -0
- data/{man → lib/bundler/man}/bundle.1 +1 -1
- data/{man/bundle.ronn → lib/bundler/man/bundle.1.ronn} +0 -0
- data/{man → lib/bundler/man}/gemfile.5 +4 -4
- data/{man → lib/bundler/man}/gemfile.5.ronn +4 -4
- data/{man → lib/bundler/man}/index.txt +0 -0
- data/lib/bundler/mirror.rb +2 -2
- data/lib/bundler/plugin.rb +30 -5
- data/lib/bundler/plugin/api/source.rb +1 -1
- data/lib/bundler/plugin/dsl.rb +1 -1
- data/lib/bundler/plugin/index.rb +10 -1
- data/lib/bundler/plugin/installer.rb +1 -1
- data/lib/bundler/plugin/installer/rubygems.rb +1 -1
- data/lib/bundler/plugin/source_list.rb +1 -1
- data/lib/bundler/psyched_yaml.rb +0 -15
- data/lib/bundler/remote_specification.rb +5 -2
- data/lib/bundler/resolver.rb +43 -19
- data/lib/bundler/resolver/spec_group.rb +39 -24
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +69 -9
- data/lib/bundler/rubygems_gem_installer.rb +3 -9
- data/lib/bundler/rubygems_integration.rb +25 -60
- data/lib/bundler/runtime.rb +4 -14
- data/lib/bundler/settings.rb +49 -46
- data/lib/bundler/shared_helpers.rb +2 -2
- data/lib/bundler/similarity_detector.rb +1 -1
- data/lib/bundler/source.rb +1 -1
- data/lib/bundler/source/git.rb +23 -21
- data/lib/bundler/source/git/git_proxy.rb +82 -80
- data/lib/bundler/source/path.rb +7 -3
- data/lib/bundler/source/path/installer.rb +10 -10
- data/lib/bundler/source/rubygems.rb +23 -17
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source_list.rb +2 -2
- data/lib/bundler/spec_set.rb +8 -10
- data/lib/bundler/stub_specification.rb +17 -7
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
- data/lib/bundler/templates/newgem/Gemfile.tt +9 -1
- data/lib/bundler/templates/newgem/README.md.tt +1 -2
- data/lib/bundler/templates/newgem/Rakefile.tt +19 -5
- data/lib/bundler/templates/newgem/bin/console.tt +1 -0
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +4 -2
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +15 -7
- data/lib/bundler/templates/newgem/rubocop.yml.tt +13 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -1
- data/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
- data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/lib/bundler/ui/shell.rb +5 -5
- data/lib/bundler/uri_credentials_filter.rb +3 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +34 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +2 -2
- data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +48 -46
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +82 -189
- data/lib/bundler/vendor/thor/lib/thor.rb +0 -7
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
- data/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +154 -0
- data/lib/bundler/vendored_persistent.rb +0 -7
- data/lib/bundler/vendored_tmpdir.rb +4 -0
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +1 -1
- data/lib/bundler/yaml_serializer.rb +1 -1
- metadata +70 -85
- data/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb +0 -26
- data/man/bundle-add.1.txt +0 -58
- data/man/bundle-binstubs.1.txt +0 -48
- data/man/bundle-cache.1.txt +0 -78
- data/man/bundle-check.1.txt +0 -33
- data/man/bundle-clean.1.txt +0 -26
- data/man/bundle-config.1.txt +0 -528
- data/man/bundle-doctor.1.txt +0 -44
- data/man/bundle-exec.1.txt +0 -178
- data/man/bundle-gem.1.txt +0 -91
- data/man/bundle-info.1.txt +0 -21
- data/man/bundle-init.1.txt +0 -34
- data/man/bundle-inject.1.txt +0 -32
- data/man/bundle-install.1.txt +0 -401
- data/man/bundle-list.1.txt +0 -43
- data/man/bundle-lock.1.txt +0 -93
- data/man/bundle-open.1.txt +0 -29
- data/man/bundle-outdated.1.txt +0 -131
- data/man/bundle-platform.1.txt +0 -57
- data/man/bundle-pristine.1.txt +0 -44
- data/man/bundle-remove.1.txt +0 -34
- data/man/bundle-show.1.txt +0 -27
- data/man/bundle-update.1.txt +0 -390
- data/man/bundle-viz.1.txt +0 -39
- data/man/bundle.1.txt +0 -116
- data/man/gemfile.5.txt +0 -649
data/lib/bundler/cli/plugin.rb
CHANGED
@@ -23,6 +23,16 @@ module Bundler
|
|
23
23
|
Bundler::Plugin.install(plugins, options)
|
24
24
|
end
|
25
25
|
|
26
|
+
desc "uninstall PLUGINS", "Uninstall the plugins"
|
27
|
+
long_desc <<-D
|
28
|
+
Uninstall given list of plugins. To uninstall all the plugins, use -all option.
|
29
|
+
D
|
30
|
+
method_option "all", :type => :boolean, :default => nil, :banner =>
|
31
|
+
"Uninstall all the installed plugins. If no plugin is installed, then it does nothing."
|
32
|
+
def uninstall(*plugins)
|
33
|
+
Bundler::Plugin.uninstall(plugins, options)
|
34
|
+
end
|
35
|
+
|
26
36
|
desc "list", "List the installed plugins and available commands"
|
27
37
|
def list
|
28
38
|
Bundler::Plugin.list
|
data/lib/bundler/cli/pristine.rb
CHANGED
@@ -29,6 +29,11 @@ module Bundler
|
|
29
29
|
|
30
30
|
FileUtils.rm_rf spec.full_gem_path
|
31
31
|
when Source::Git
|
32
|
+
if source.local?
|
33
|
+
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is locally overridden.")
|
34
|
+
next
|
35
|
+
end
|
36
|
+
|
32
37
|
source.remote!
|
33
38
|
if extension_cache_path = source.extension_cache_path(spec)
|
34
39
|
FileUtils.rm_rf extension_cache_path
|
data/lib/bundler/cli/show.rb
CHANGED
data/lib/bundler/cli/update.rb
CHANGED
@@ -82,7 +82,7 @@ module Bundler
|
|
82
82
|
locked_spec = locked_info[:spec]
|
83
83
|
new_spec = Bundler.definition.specs[name].first
|
84
84
|
unless new_spec
|
85
|
-
|
85
|
+
unless locked_spec.match_platform(Bundler.local_platform)
|
86
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
87
|
end
|
88
88
|
|
@@ -106,6 +106,8 @@ module Bundler
|
|
106
106
|
Bundler.ui.confirm "Bundle updated!"
|
107
107
|
Bundler::CLI::Common.output_without_groups_message(:update)
|
108
108
|
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
|
109
|
+
|
110
|
+
Bundler::CLI::Common.output_fund_metadata_summary
|
109
111
|
end
|
110
112
|
end
|
111
113
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative "gem_parser"
|
4
|
+
|
3
5
|
module Bundler
|
4
6
|
class CompactIndexClient
|
5
7
|
class Cache
|
@@ -83,7 +85,7 @@ module Bundler
|
|
83
85
|
gem_line ? parse_gem(gem_line) : nil
|
84
86
|
end
|
85
87
|
|
86
|
-
|
88
|
+
private
|
87
89
|
|
88
90
|
def lines(path)
|
89
91
|
return [] unless path.file?
|
@@ -92,19 +94,9 @@ module Bundler
|
|
92
94
|
header ? lines[header + 1..-1] : lines
|
93
95
|
end
|
94
96
|
|
95
|
-
def parse_gem(
|
96
|
-
|
97
|
-
|
98
|
-
dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
|
99
|
-
dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
|
100
|
-
requirements = requirements ? requirements.map {|r| parse_dependency(r) } : []
|
101
|
-
[version, platform, dependencies, requirements]
|
102
|
-
end
|
103
|
-
|
104
|
-
def parse_dependency(string)
|
105
|
-
dependency = string.split(":")
|
106
|
-
dependency[-1] = dependency[-1].split("&") if dependency.size > 1
|
107
|
-
dependency
|
97
|
+
def parse_gem(line)
|
98
|
+
@dependency_parser ||= GemParser.new
|
99
|
+
@dependency_parser.parse(line)
|
108
100
|
end
|
109
101
|
|
110
102
|
def info_roots
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bundler
|
4
|
+
class CompactIndexClient
|
5
|
+
if defined?(Gem::Resolver::APISet::GemParser)
|
6
|
+
GemParser = Gem::Resolver::APISet::GemParser
|
7
|
+
else
|
8
|
+
class GemParser
|
9
|
+
def parse(line)
|
10
|
+
version_and_platform, rest = line.split(" ", 2)
|
11
|
+
version, platform = version_and_platform.split("-", 2)
|
12
|
+
dependencies, requirements = rest.split("|", 2).map {|s| s.split(",") } if rest
|
13
|
+
dependencies = dependencies ? dependencies.map {|d| parse_dependency(d) } : []
|
14
|
+
requirements = requirements ? requirements.map {|d| parse_dependency(d) } : []
|
15
|
+
[version, platform, dependencies, requirements]
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_dependency(string)
|
21
|
+
dependency = string.split(":")
|
22
|
+
dependency[-1] = dependency[-1].split("&") if dependency.size > 1
|
23
|
+
dependency
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "../vendored_fileutils"
|
4
|
-
require "stringio"
|
5
|
-
require "zlib"
|
6
4
|
|
7
5
|
module Bundler
|
8
6
|
class CompactIndexClient
|
@@ -22,13 +20,13 @@ module Bundler
|
|
22
20
|
|
23
21
|
def initialize(fetcher)
|
24
22
|
@fetcher = fetcher
|
25
|
-
|
23
|
+
require_relative "../vendored_tmpdir"
|
26
24
|
end
|
27
25
|
|
28
26
|
def update(local_path, remote_path, retrying = nil)
|
29
27
|
headers = {}
|
30
28
|
|
31
|
-
Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
|
29
|
+
Bundler::Dir.mktmpdir("bundler-compact-index-") do |local_temp_dir|
|
32
30
|
local_temp_path = Pathname.new(local_temp_dir).join(local_path.basename)
|
33
31
|
|
34
32
|
# first try to fetch any new bytes on the existing file
|
@@ -45,18 +43,12 @@ module Bundler
|
|
45
43
|
else
|
46
44
|
"bytes=#{local_temp_path.size}-"
|
47
45
|
end
|
48
|
-
else
|
49
|
-
# Fastly ignores Range when Accept-Encoding: gzip is set
|
50
|
-
headers["Accept-Encoding"] = "gzip"
|
51
46
|
end
|
52
47
|
|
53
48
|
response = @fetcher.call(remote_path, headers)
|
54
49
|
return nil if response.is_a?(Net::HTTPNotModified)
|
55
50
|
|
56
51
|
content = response.body
|
57
|
-
if response["Content-Encoding"] == "gzip"
|
58
|
-
content = Zlib::GzipReader.new(StringIO.new(content)).read
|
59
|
-
end
|
60
52
|
|
61
53
|
SharedHelpers.filesystem_access(local_temp_path) do
|
62
54
|
if response.is_a?(Net::HTTPPartialContent) && local_temp_path.size.nonzero?
|
@@ -66,8 +58,8 @@ module Bundler
|
|
66
58
|
end
|
67
59
|
end
|
68
60
|
|
69
|
-
|
70
|
-
if etag_for(local_temp_path) ==
|
61
|
+
etag = (response["ETag"] || "").gsub(%r{\AW/}, "")
|
62
|
+
if etag.length.zero? || etag_for(local_temp_path) == etag
|
71
63
|
SharedHelpers.filesystem_access(local_path) do
|
72
64
|
FileUtils.mv(local_temp_path, local_path)
|
73
65
|
end
|
@@ -75,7 +67,7 @@ module Bundler
|
|
75
67
|
end
|
76
68
|
|
77
69
|
if retrying
|
78
|
-
raise MisMatchedChecksumError.new(remote_path,
|
70
|
+
raise MisMatchedChecksumError.new(remote_path, etag, etag_for(local_temp_path))
|
79
71
|
end
|
80
72
|
|
81
73
|
update(local_path, remote_path, :retrying)
|
data/lib/bundler/definition.rb
CHANGED
@@ -77,12 +77,17 @@ module Bundler
|
|
77
77
|
@locked_bundler_version = nil
|
78
78
|
@locked_ruby_version = nil
|
79
79
|
@locked_specs_incomplete_for_platform = false
|
80
|
+
@new_platform = nil
|
80
81
|
|
81
82
|
if lockfile && File.exist?(lockfile)
|
82
83
|
@lockfile_contents = Bundler.read_file(lockfile)
|
83
84
|
@locked_gems = LockfileParser.new(@lockfile_contents)
|
84
85
|
@locked_platforms = @locked_gems.platforms
|
85
|
-
|
86
|
+
if Bundler.settings[:force_ruby_platform]
|
87
|
+
@platforms = [Gem::Platform::RUBY]
|
88
|
+
else
|
89
|
+
@platforms = @locked_platforms.dup
|
90
|
+
end
|
86
91
|
@locked_bundler_version = @locked_gems.bundler_version
|
87
92
|
@locked_ruby_version = @locked_gems.ruby_version
|
88
93
|
|
@@ -113,7 +118,7 @@ module Bundler
|
|
113
118
|
end
|
114
119
|
@unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
|
115
120
|
|
116
|
-
add_current_platform unless Bundler.frozen_bundle?
|
121
|
+
add_current_platform unless current_ruby_platform_locked? || Bundler.frozen_bundle?
|
117
122
|
|
118
123
|
converge_path_sources_to_gemspec_sources
|
119
124
|
@path_changes = converge_paths
|
@@ -152,7 +157,7 @@ module Bundler
|
|
152
157
|
end
|
153
158
|
|
154
159
|
def resolve_remotely!
|
155
|
-
|
160
|
+
return if @specs
|
156
161
|
@remote = true
|
157
162
|
sources.remote!
|
158
163
|
specs
|
@@ -194,10 +199,6 @@ module Bundler
|
|
194
199
|
@locked_specs - specs
|
195
200
|
end
|
196
201
|
|
197
|
-
def new_platform?
|
198
|
-
@new_platform
|
199
|
-
end
|
200
|
-
|
201
202
|
def missing_specs
|
202
203
|
missing = []
|
203
204
|
resolve.materialize(requested_dependencies, missing)
|
@@ -227,16 +228,29 @@ module Bundler
|
|
227
228
|
end
|
228
229
|
end
|
229
230
|
|
231
|
+
def requested_dependencies
|
232
|
+
groups = requested_groups
|
233
|
+
groups.map!(&:to_sym)
|
234
|
+
dependencies_for(groups)
|
235
|
+
end
|
236
|
+
|
230
237
|
def current_dependencies
|
231
|
-
dependencies.select
|
238
|
+
dependencies.select do |d|
|
239
|
+
d.should_include? && !d.gem_platforms(@platforms).empty?
|
240
|
+
end
|
232
241
|
end
|
233
242
|
|
234
243
|
def specs_for(groups)
|
235
|
-
deps =
|
236
|
-
deps.delete_if {|d| !d.should_include? }
|
244
|
+
deps = dependencies_for(groups)
|
237
245
|
specs.for(expand_dependencies(deps))
|
238
246
|
end
|
239
247
|
|
248
|
+
def dependencies_for(groups)
|
249
|
+
current_dependencies.reject do |d|
|
250
|
+
(d.groups & groups).empty?
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
240
254
|
# Resolve all the dependencies specified in Gemfile. It ensures that
|
241
255
|
# dependencies that have been already resolved via locked file and are fresh
|
242
256
|
# are reused when resolving dependencies
|
@@ -255,6 +269,7 @@ module Bundler
|
|
255
269
|
else
|
256
270
|
# Run a resolve against the locally available gems
|
257
271
|
Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
|
272
|
+
expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote)
|
258
273
|
last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
|
259
274
|
end
|
260
275
|
|
@@ -312,10 +327,6 @@ module Bundler
|
|
312
327
|
sources.rubygems_sources.any? {|s| s.remotes.any? }
|
313
328
|
end
|
314
329
|
|
315
|
-
def has_local_dependencies?
|
316
|
-
!sources.path_sources.empty? || !sources.git_sources.empty?
|
317
|
-
end
|
318
|
-
|
319
330
|
def spec_git_paths
|
320
331
|
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
|
321
332
|
end
|
@@ -396,12 +407,10 @@ module Bundler
|
|
396
407
|
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
397
408
|
|
398
409
|
unless explicit_flag
|
399
|
-
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
410
|
+
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
400
411
|
"bundle config unset frozen"
|
401
412
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
402
413
|
"bundle config unset deployment"
|
403
|
-
else
|
404
|
-
"bundle install --no-deployment"
|
405
414
|
end
|
406
415
|
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
407
416
|
"freeze \nby running `#{suggested_command}`."
|
@@ -450,9 +459,9 @@ module Bundler
|
|
450
459
|
@locked_deps.each {|name, d| both_sources[name][1] = d.source }
|
451
460
|
|
452
461
|
both_sources.each do |name, (dep, lock_source)|
|
453
|
-
next
|
462
|
+
next if lock_source.nil? || (dep && lock_source.can_lock?(dep))
|
454
463
|
gemfile_source_name = (dep && dep.source) || "no specified source"
|
455
|
-
lockfile_source_name = lock_source
|
464
|
+
lockfile_source_name = lock_source
|
456
465
|
changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
|
457
466
|
end
|
458
467
|
|
@@ -497,15 +506,11 @@ module Bundler
|
|
497
506
|
end
|
498
507
|
|
499
508
|
def validate_platforms!
|
500
|
-
return if
|
501
|
-
Bundler.rubygems.platforms.any? do |local_platform|
|
502
|
-
MatchPlatform.platforms_match?(bundle_platform, local_platform)
|
503
|
-
end
|
504
|
-
end
|
509
|
+
return if current_platform_locked?
|
505
510
|
|
506
511
|
raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
|
507
|
-
"but your local
|
508
|
-
"
|
512
|
+
"but your local platform is #{Bundler.local_platform}. " \
|
513
|
+
"Add the current platform to the lockfile with `bundle lock --add-platform #{Bundler.local_platform}` and try again."
|
509
514
|
end
|
510
515
|
|
511
516
|
def add_platform(platform)
|
@@ -518,8 +523,10 @@ module Bundler
|
|
518
523
|
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
519
524
|
end
|
520
525
|
|
521
|
-
def
|
522
|
-
|
526
|
+
def most_specific_locked_platform
|
527
|
+
@platforms.min_by do |bundle_platform|
|
528
|
+
platform_specificity_match(bundle_platform, local_platform)
|
529
|
+
end
|
523
530
|
end
|
524
531
|
|
525
532
|
def find_resolved_spec(current_spec)
|
@@ -541,16 +548,24 @@ module Bundler
|
|
541
548
|
@unlocking
|
542
549
|
end
|
543
550
|
|
544
|
-
|
551
|
+
private
|
552
|
+
|
553
|
+
def current_ruby_platform_locked?
|
554
|
+
return false unless generic_local_platform == Gem::Platform::RUBY
|
545
555
|
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
556
|
+
current_platform_locked?
|
557
|
+
end
|
558
|
+
|
559
|
+
def current_platform_locked?
|
560
|
+
@platforms.any? do |bundle_platform|
|
561
|
+
MatchPlatform.platforms_match?(bundle_platform, Bundler.local_platform)
|
551
562
|
end
|
552
563
|
end
|
553
564
|
|
565
|
+
def add_current_platform
|
566
|
+
add_platform(local_platform)
|
567
|
+
end
|
568
|
+
|
554
569
|
def change_reason
|
555
570
|
if unlocking?
|
556
571
|
unlock_reason = @unlock.reject {|_k, v| Array(v).empty? }.map do |k, v|
|
@@ -706,9 +721,6 @@ module Bundler
|
|
706
721
|
elsif dep.source
|
707
722
|
dep.source = sources.get(dep.source)
|
708
723
|
end
|
709
|
-
if dep.source.is_a?(Source::Gemspec)
|
710
|
-
dep.platforms.concat(@platforms.map {|p| Dependency::REVERSE_PLATFORM_MAP[p] }.flatten(1)).uniq!
|
711
|
-
end
|
712
724
|
end
|
713
725
|
|
714
726
|
changes = false
|
@@ -806,11 +818,6 @@ module Bundler
|
|
806
818
|
# commonly happens if the version changed in the gemspec
|
807
819
|
next unless new_spec
|
808
820
|
|
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) }
|
813
|
-
|
814
821
|
s.dependencies.replace(new_spec.dependencies)
|
815
822
|
end
|
816
823
|
|
@@ -818,7 +825,7 @@ module Bundler
|
|
818
825
|
end
|
819
826
|
|
820
827
|
resolve = SpecSet.new(converged)
|
821
|
-
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(deps), @unlock[:gems], true, true)
|
828
|
+
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(requested_dependencies & deps), @unlock[:gems], true, true)
|
822
829
|
resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
|
823
830
|
diff = nil
|
824
831
|
|
@@ -846,21 +853,9 @@ module Bundler
|
|
846
853
|
@locked_specs[dep].any? {|s| s.satisfies?(dep) && (!dep.source || s.source.include?(dep.source)) }
|
847
854
|
end
|
848
855
|
|
849
|
-
# This list of dependencies is only used in #resolve, so it's OK to add
|
850
|
-
# the metadata dependencies here
|
851
|
-
def expanded_dependencies
|
852
|
-
@expanded_dependencies ||= begin
|
853
|
-
expand_dependencies(dependencies + metadata_dependencies, @remote)
|
854
|
-
end
|
855
|
-
end
|
856
|
-
|
857
856
|
def metadata_dependencies
|
858
857
|
@metadata_dependencies ||= begin
|
859
|
-
ruby_versions =
|
860
|
-
if ruby_versions.empty? || !@ruby_version.exact?
|
861
|
-
concat_ruby_version_requirements(RubyVersion.system)
|
862
|
-
concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
|
863
|
-
end
|
858
|
+
ruby_versions = ruby_version_requirements(@ruby_version)
|
864
859
|
[
|
865
860
|
Dependency.new("Ruby\0", ruby_versions),
|
866
861
|
Dependency.new("RubyGems\0", Gem::VERSION),
|
@@ -868,49 +863,37 @@ module Bundler
|
|
868
863
|
end
|
869
864
|
end
|
870
865
|
|
871
|
-
def
|
872
|
-
return
|
866
|
+
def ruby_version_requirements(ruby_version)
|
867
|
+
return [] unless ruby_version
|
873
868
|
if ruby_version.patchlevel
|
874
|
-
|
869
|
+
[ruby_version.to_gem_version_with_patchlevel]
|
875
870
|
else
|
876
|
-
|
871
|
+
ruby_version.versions.map do |version|
|
877
872
|
requirement = Gem::Requirement.new(version)
|
878
873
|
if requirement.exact?
|
879
874
|
"~> #{version}.0"
|
880
875
|
else
|
881
876
|
requirement
|
882
877
|
end
|
883
|
-
end
|
878
|
+
end
|
884
879
|
end
|
885
880
|
end
|
886
881
|
|
887
882
|
def expand_dependencies(dependencies, remote = false)
|
888
|
-
sorted_platforms = Resolver.sort_platforms(@platforms)
|
889
883
|
deps = []
|
890
884
|
dependencies.each do |dep|
|
891
885
|
dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
|
892
|
-
next
|
893
|
-
|
894
|
-
|
895
|
-
mapped_platforms = dep.expanded_platforms
|
896
|
-
Bundler.ui.warn \
|
897
|
-
"The dependency #{dep} will be unused by any of the platforms Bundler is installing for. " \
|
898
|
-
"Bundler is installing for #{@platforms.join ", "} but the dependency " \
|
899
|
-
"is only for #{mapped_platforms.join ", "}. " \
|
900
|
-
"To add those platforms to the bundle, " \
|
901
|
-
"run `bundle lock --add-platform #{mapped_platforms.join " "}`."
|
902
|
-
end
|
903
|
-
platforms.each do |p|
|
904
|
-
deps << DepProxy.new(dep, p) if remote || p == generic_local_platform
|
905
|
-
end
|
886
|
+
next unless remote || dep.current_platform?
|
887
|
+
target_platforms = dep.gem_platforms(remote ? Resolver.sort_platforms(@platforms) : [generic_local_platform])
|
888
|
+
deps += expand_dependency_with_platforms(dep, target_platforms)
|
906
889
|
end
|
907
890
|
deps
|
908
891
|
end
|
909
892
|
|
910
|
-
def
|
911
|
-
|
912
|
-
|
913
|
-
|
893
|
+
def expand_dependency_with_platforms(dep, platforms)
|
894
|
+
platforms.map do |p|
|
895
|
+
DepProxy.get_proxy(dep, p)
|
896
|
+
end
|
914
897
|
end
|
915
898
|
|
916
899
|
def source_requirements
|
@@ -985,10 +968,11 @@ module Bundler
|
|
985
968
|
@locked_gems.specs.reduce({}) do |requirements, locked_spec|
|
986
969
|
name = locked_spec.name
|
987
970
|
dependency = dependencies_by_name[name]
|
971
|
+
next requirements unless dependency
|
988
972
|
next requirements if @locked_gems.dependencies[name] != dependency
|
989
|
-
next requirements if dependency
|
973
|
+
next requirements if dependency.source.is_a?(Source::Path)
|
990
974
|
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
991
|
-
requirements[name] = DepProxy.
|
975
|
+
requirements[name] = DepProxy.get_proxy(dep, locked_spec.platform)
|
992
976
|
requirements
|
993
977
|
end.values
|
994
978
|
end
|