bundler 2.1.0 → 2.2.0.rc.1
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 +832 -738
- data/README.md +6 -8
- data/bundler.gemspec +3 -3
- data/exe/bundle +3 -0
- data/lib/bundler.rb +15 -4
- data/lib/bundler/build_metadata.rb +2 -2
- data/lib/bundler/cli.rb +32 -11
- data/lib/bundler/cli/console.rb +1 -1
- data/lib/bundler/cli/exec.rb +3 -12
- data/lib/bundler/cli/gem.rb +83 -10
- data/lib/bundler/cli/info.rb +13 -3
- data/lib/bundler/cli/init.rb +1 -1
- data/lib/bundler/cli/install.rb +8 -16
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +11 -9
- data/lib/bundler/cli/outdated.rb +88 -65
- data/lib/bundler/cli/plugin.rb +10 -0
- data/lib/bundler/cli/pristine.rb +5 -0
- data/lib/bundler/definition.rb +32 -32
- data/lib/bundler/dependency.rb +0 -9
- data/lib/bundler/dsl.rb +1 -5
- data/lib/bundler/environment_preserver.rb +26 -2
- data/lib/bundler/errors.rb +1 -0
- data/lib/bundler/feature_flag.rb +0 -2
- data/lib/bundler/fetcher.rb +1 -0
- data/lib/bundler/friendly_errors.rb +4 -10
- data/lib/bundler/gem_helper.rb +18 -12
- data/lib/bundler/gem_version_promoter.rb +1 -1
- data/lib/bundler/injector.rb +14 -3
- data/lib/bundler/inline.rb +2 -2
- data/lib/bundler/installer.rb +29 -28
- data/lib/bundler/installer/gem_installer.rb +2 -2
- data/lib/bundler/installer/parallel_installer.rb +9 -9
- data/lib/bundler/lazy_specification.rb +16 -3
- data/lib/bundler/plugin.rb +26 -0
- data/lib/bundler/plugin/index.rb +9 -0
- data/lib/bundler/psyched_yaml.rb +0 -15
- data/lib/bundler/remote_specification.rb +4 -1
- data/lib/bundler/resolver.rb +31 -8
- data/lib/bundler/resolver/spec_group.rb +26 -5
- data/lib/bundler/rubygems_ext.rb +7 -8
- data/lib/bundler/rubygems_gem_installer.rb +1 -7
- data/lib/bundler/rubygems_integration.rb +13 -48
- data/lib/bundler/runtime.rb +2 -12
- data/lib/bundler/settings.rb +0 -3
- data/lib/bundler/setup.rb +5 -0
- data/lib/bundler/shared_helpers.rb +1 -1
- data/lib/bundler/source/git.rb +4 -4
- data/lib/bundler/source/git/git_proxy.rb +53 -58
- data/lib/bundler/source/path.rb +5 -1
- data/lib/bundler/source/path/installer.rb +7 -9
- data/lib/bundler/source/rubygems.rb +11 -14
- data/lib/bundler/stub_specification.rb +16 -4
- 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/Rakefile.tt +19 -5
- data/lib/bundler/templates/newgem/bin/console.tt +2 -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 +2 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -4
- data/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -0
- 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/vendor/net-http-persistent/lib/net/http/persistent.rb +72 -208
- 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/version.rb +1 -1
- data/man/bundle-add.1 +1 -1
- data/man/bundle-add.1.txt +15 -15
- data/man/bundle-binstubs.1 +1 -1
- data/man/bundle-binstubs.1.txt +10 -10
- data/man/bundle-cache.1 +1 -1
- data/man/bundle-cache.1.txt +15 -15
- data/man/bundle-check.1 +1 -1
- data/man/bundle-check.1.txt +8 -8
- data/man/bundle-clean.1 +1 -1
- data/man/bundle-clean.1.txt +6 -6
- data/man/bundle-config.1 +3 -9
- data/man/bundle-config.1.txt +271 -272
- data/man/bundle-config.ronn +5 -9
- data/man/bundle-doctor.1 +1 -1
- data/man/bundle-doctor.1.txt +9 -9
- data/man/bundle-exec.1 +1 -1
- data/man/bundle-exec.1.txt +84 -81
- data/man/bundle-gem.1 +25 -3
- data/man/bundle-gem.1.txt +65 -39
- data/man/bundle-gem.ronn +30 -7
- data/man/bundle-info.1 +1 -1
- data/man/bundle-info.1.txt +2 -2
- data/man/bundle-init.1 +1 -1
- data/man/bundle-init.1.txt +9 -9
- data/man/bundle-inject.1 +1 -1
- data/man/bundle-inject.1.txt +4 -4
- data/man/bundle-install.1 +1 -1
- data/man/bundle-install.1.txt +169 -169
- data/man/bundle-list.1 +7 -7
- data/man/bundle-list.1.txt +12 -11
- data/man/bundle-list.ronn +6 -6
- data/man/bundle-lock.1 +1 -1
- data/man/bundle-lock.1.txt +28 -28
- data/man/bundle-open.1 +1 -1
- data/man/bundle-open.1.txt +3 -3
- data/man/bundle-outdated.1 +1 -1
- data/man/bundle-outdated.1.txt +34 -34
- data/man/bundle-platform.1 +1 -1
- data/man/bundle-platform.1.txt +16 -16
- data/man/bundle-pristine.1 +1 -1
- data/man/bundle-pristine.1.txt +8 -8
- data/man/bundle-remove.1 +1 -1
- data/man/bundle-remove.1.txt +9 -9
- data/man/bundle-show.1 +1 -1
- data/man/bundle-show.1.txt +8 -8
- data/man/bundle-update.1 +1 -1
- data/man/bundle-update.1.txt +149 -148
- data/man/bundle-viz.1 +1 -1
- data/man/bundle-viz.1.txt +11 -11
- data/man/bundle.1 +1 -1
- data/man/bundle.1.txt +31 -31
- data/man/gemfile.5 +1 -1
- data/man/gemfile.5.txt +218 -216
- metadata +14 -8
data/lib/bundler/cli/issue.rb
CHANGED
@@ -10,7 +10,7 @@ module Bundler
|
|
10
10
|
be sure to check out these resources:
|
11
11
|
|
12
12
|
1. Check out our troubleshooting guide for quick fixes to common issues:
|
13
|
-
https://github.com/
|
13
|
+
https://github.com/rubygems/rubygems/blob/master/bundler/doc/TROUBLESHOOTING.md
|
14
14
|
|
15
15
|
2. Instructions for common Bundler uses can be found on the documentation
|
16
16
|
site: https://bundler.io/
|
@@ -22,7 +22,7 @@ module Bundler
|
|
22
22
|
still aren't working the way you expect them to, please let us know so
|
23
23
|
that we can diagnose and help fix the problem you're having. Please
|
24
24
|
view the Filing Issues guide for more information:
|
25
|
-
https://github.com/
|
25
|
+
https://github.com/rubygems/rubygems/blob/master/bundler/doc/contributing/ISSUES.md
|
26
26
|
|
27
27
|
EOS
|
28
28
|
|
data/lib/bundler/cli/list.rb
CHANGED
@@ -4,14 +4,16 @@ module Bundler
|
|
4
4
|
class CLI::List
|
5
5
|
def initialize(options)
|
6
6
|
@options = options
|
7
|
+
@without_group = options["without-group"].map(&:to_sym)
|
8
|
+
@only_group = options["only-group"].map(&:to_sym)
|
7
9
|
end
|
8
10
|
|
9
11
|
def run
|
10
|
-
raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @
|
12
|
+
raise InvalidOption, "The `--only-group` and `--without-group` options cannot be used together" if @only_group.any? && @without_group.any?
|
11
13
|
|
12
14
|
raise InvalidOption, "The `--name-only` and `--paths` options cannot be used together" if @options["name-only"] && @options[:paths]
|
13
15
|
|
14
|
-
specs = if @
|
16
|
+
specs = if @only_group.any? || @without_group.any?
|
15
17
|
filtered_specs_by_groups
|
16
18
|
else
|
17
19
|
Bundler.load.specs
|
@@ -32,9 +34,9 @@ module Bundler
|
|
32
34
|
private
|
33
35
|
|
34
36
|
def verify_group_exists(groups)
|
35
|
-
|
36
|
-
|
37
|
-
|
37
|
+
(@without_group + @only_group).each do |group|
|
38
|
+
raise InvalidOption, "`#{group}` group could not be found." unless groups.include?(group)
|
39
|
+
end
|
38
40
|
end
|
39
41
|
|
40
42
|
def filtered_specs_by_groups
|
@@ -44,10 +46,10 @@ module Bundler
|
|
44
46
|
verify_group_exists(groups)
|
45
47
|
|
46
48
|
show_groups =
|
47
|
-
if @
|
48
|
-
groups.reject {|g|
|
49
|
-
elsif @
|
50
|
-
groups.select {|g|
|
49
|
+
if @without_group.any?
|
50
|
+
groups.reject {|g| @without_group.include?(g) }
|
51
|
+
elsif @only_group.any?
|
52
|
+
groups.select {|g| @only_group.include?(g) }
|
51
53
|
else
|
52
54
|
groups
|
53
55
|
end.map(&:to_sym)
|
data/lib/bundler/cli/outdated.rb
CHANGED
@@ -3,18 +3,16 @@
|
|
3
3
|
module Bundler
|
4
4
|
class CLI::Outdated
|
5
5
|
attr_reader :options, :gems, :options_include_groups, :filter_options_patch, :sources, :strict
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :outdated_gems
|
7
7
|
|
8
8
|
def initialize(options, gems)
|
9
9
|
@options = options
|
10
10
|
@gems = gems
|
11
11
|
@sources = Array(options[:source])
|
12
12
|
|
13
|
-
@filter_options_patch = options.keys &
|
14
|
-
%w[filter-major filter-minor filter-patch]
|
13
|
+
@filter_options_patch = options.keys & %w[filter-major filter-minor filter-patch]
|
15
14
|
|
16
|
-
@
|
17
|
-
@outdated_gems_list = []
|
15
|
+
@outdated_gems = []
|
18
16
|
|
19
17
|
@options_include_groups = [:group, :groups].any? do |v|
|
20
18
|
options.keys.include?(v.to_s)
|
@@ -22,8 +20,7 @@ module Bundler
|
|
22
20
|
|
23
21
|
# the patch level options imply strict is also true. It wouldn't make
|
24
22
|
# sense otherwise.
|
25
|
-
@strict = options["filter-strict"] ||
|
26
|
-
Bundler::CLI::Common.patch_level_options(options).any?
|
23
|
+
@strict = options["filter-strict"] || Bundler::CLI::Common.patch_level_options(options).any?
|
27
24
|
end
|
28
25
|
|
29
26
|
def run
|
@@ -76,58 +73,54 @@ module Bundler
|
|
76
73
|
end
|
77
74
|
|
78
75
|
specs.sort_by(&:name).each do |current_spec|
|
79
|
-
next
|
76
|
+
next unless gems.empty? || gems.include?(current_spec.name)
|
80
77
|
|
81
|
-
dependency = current_dependencies[current_spec.name]
|
82
78
|
active_spec = retrieve_active_spec(definition, current_spec)
|
79
|
+
next unless active_spec
|
83
80
|
|
84
|
-
next
|
85
|
-
next if filter_options_patch.any? &&
|
86
|
-
!update_present_via_semver_portions(current_spec, active_spec, options)
|
81
|
+
next unless filter_options_patch.empty? || update_present_via_semver_portions(current_spec, active_spec, options)
|
87
82
|
|
88
83
|
gem_outdated = Gem::Version.new(active_spec.version) > Gem::Version.new(current_spec.version)
|
89
84
|
next unless gem_outdated || (current_spec.git_version != active_spec.git_version)
|
90
|
-
|
85
|
+
|
86
|
+
dependency = current_dependencies[current_spec.name]
|
87
|
+
groups = ""
|
91
88
|
if dependency && !options[:parseable]
|
92
89
|
groups = dependency.groups.join(", ")
|
93
90
|
end
|
94
91
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
outdated_gems_by_groups[groups] << outdated_gems_list[-1]
|
92
|
+
outdated_gems << {
|
93
|
+
:active_spec => active_spec,
|
94
|
+
:current_spec => current_spec,
|
95
|
+
:dependency => dependency,
|
96
|
+
:groups => groups,
|
97
|
+
}
|
102
98
|
end
|
103
99
|
|
104
|
-
if
|
105
|
-
display_nothing_outdated_message
|
106
|
-
else
|
100
|
+
if outdated_gems.empty?
|
107
101
|
unless options[:parseable]
|
108
|
-
Bundler.ui.info(
|
102
|
+
Bundler.ui.info(nothing_outdated_message)
|
109
103
|
end
|
110
|
-
|
104
|
+
else
|
111
105
|
if options_include_groups
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
contains_group = if groups
|
116
|
-
groups.split(", ").include?(options[:group])
|
117
|
-
else
|
118
|
-
options[:group] == "group"
|
119
|
-
end
|
106
|
+
relevant_outdated_gems = outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems|
|
107
|
+
contains_group = groups.split(", ").include?(options[:group])
|
108
|
+
next unless options[:groups] || contains_group
|
120
109
|
|
121
|
-
|
110
|
+
gems
|
111
|
+
end.compact
|
122
112
|
|
123
|
-
|
124
|
-
|
113
|
+
if options[:parseable]
|
114
|
+
relevant_outdated_gems.each do |gems|
|
115
|
+
print_gems(gems)
|
125
116
|
end
|
126
|
-
|
127
|
-
|
117
|
+
else
|
118
|
+
print_gems_table(relevant_outdated_gems)
|
128
119
|
end
|
120
|
+
elsif options[:parseable]
|
121
|
+
print_gems(outdated_gems)
|
129
122
|
else
|
130
|
-
|
123
|
+
print_gems_table(outdated_gems)
|
131
124
|
end
|
132
125
|
|
133
126
|
exit 1
|
@@ -140,22 +133,6 @@ module Bundler
|
|
140
133
|
"#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
|
141
134
|
end
|
142
135
|
|
143
|
-
def header_outdated_message
|
144
|
-
if options[:pre]
|
145
|
-
"Outdated gems included in the bundle (including pre-releases):"
|
146
|
-
else
|
147
|
-
"Outdated gems included in the bundle:"
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
def header_group_message(groups)
|
152
|
-
if groups
|
153
|
-
"===== #{groups_text("Group", groups)} ====="
|
154
|
-
else
|
155
|
-
"===== Without group ====="
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
136
|
def nothing_outdated_message
|
160
137
|
if filter_options_patch.any?
|
161
138
|
display = filter_options_patch.map do |o|
|
@@ -169,6 +146,8 @@ module Bundler
|
|
169
146
|
end
|
170
147
|
|
171
148
|
def retrieve_active_spec(definition, current_spec)
|
149
|
+
return unless current_spec.match_platform(Bundler.local_platform)
|
150
|
+
|
172
151
|
if strict
|
173
152
|
active_spec = definition.find_resolved_spec(current_spec)
|
174
153
|
else
|
@@ -182,12 +161,6 @@ module Bundler
|
|
182
161
|
active_spec
|
183
162
|
end
|
184
163
|
|
185
|
-
def display_nothing_outdated_message
|
186
|
-
unless options[:parseable]
|
187
|
-
Bundler.ui.info(nothing_outdated_message)
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
164
|
def print_gems(gems_list)
|
192
165
|
gems_list.each do |gem|
|
193
166
|
print_gem(
|
@@ -199,6 +172,19 @@ module Bundler
|
|
199
172
|
end
|
200
173
|
end
|
201
174
|
|
175
|
+
def print_gems_table(gems_list)
|
176
|
+
data = gems_list.map do |gem|
|
177
|
+
gem_column_for(
|
178
|
+
gem[:current_spec],
|
179
|
+
gem[:active_spec],
|
180
|
+
gem[:dependency],
|
181
|
+
gem[:groups],
|
182
|
+
)
|
183
|
+
end
|
184
|
+
|
185
|
+
print_indented([table_header] + data)
|
186
|
+
end
|
187
|
+
|
202
188
|
def print_gem(current_spec, active_spec, dependency, groups)
|
203
189
|
spec_version = "#{active_spec.version}#{active_spec.git_version}"
|
204
190
|
spec_version += " (from #{active_spec.loaded_from})" if Bundler.ui.debug? && active_spec.loaded_from
|
@@ -213,7 +199,7 @@ module Bundler
|
|
213
199
|
|
214
200
|
output_message = if options[:parseable]
|
215
201
|
spec_outdated_info.to_s
|
216
|
-
elsif options_include_groups ||
|
202
|
+
elsif options_include_groups || groups.empty?
|
217
203
|
" * #{spec_outdated_info}"
|
218
204
|
else
|
219
205
|
" * #{spec_outdated_info} in #{groups_text("group", groups)}"
|
@@ -222,14 +208,22 @@ module Bundler
|
|
222
208
|
Bundler.ui.info output_message.rstrip
|
223
209
|
end
|
224
210
|
|
211
|
+
def gem_column_for(current_spec, active_spec, dependency, groups)
|
212
|
+
current_version = "#{current_spec.version}#{current_spec.git_version}"
|
213
|
+
spec_version = "#{active_spec.version}#{active_spec.git_version}"
|
214
|
+
dependency = dependency.requirement if dependency
|
215
|
+
|
216
|
+
ret_val = [active_spec.name, current_version, spec_version, dependency.to_s, groups.to_s]
|
217
|
+
ret_val << active_spec.loaded_from.to_s if Bundler.ui.debug?
|
218
|
+
ret_val
|
219
|
+
end
|
220
|
+
|
225
221
|
def check_for_deployment_mode!
|
226
222
|
return unless Bundler.frozen_bundle?
|
227
|
-
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
223
|
+
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
228
224
|
"bundle config unset frozen"
|
229
225
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
230
226
|
"bundle config unset deployment"
|
231
|
-
else
|
232
|
-
"bundle install --no-deployment"
|
233
227
|
end
|
234
228
|
raise ProductionError, "You are trying to check outdated gems in " \
|
235
229
|
"deployment mode. Run `bundle outdated` elsewhere.\n" \
|
@@ -266,5 +260,34 @@ module Bundler
|
|
266
260
|
version_section = spec.version.segments[version_portion_index, 1]
|
267
261
|
version_section.to_a[0].to_i
|
268
262
|
end
|
263
|
+
|
264
|
+
def print_indented(matrix)
|
265
|
+
header = matrix[0]
|
266
|
+
data = matrix[1..-1]
|
267
|
+
|
268
|
+
column_sizes = Array.new(header.size) do |index|
|
269
|
+
matrix.max_by {|row| row[index].length }[index].length
|
270
|
+
end
|
271
|
+
|
272
|
+
Bundler.ui.info justify(header, column_sizes)
|
273
|
+
|
274
|
+
data.sort_by! {|row| row[0] }
|
275
|
+
|
276
|
+
data.each do |row|
|
277
|
+
Bundler.ui.info justify(row, column_sizes)
|
278
|
+
end
|
279
|
+
end
|
280
|
+
|
281
|
+
def table_header
|
282
|
+
header = ["Gem", "Current", "Latest", "Requested", "Groups"]
|
283
|
+
header << "Path" if Bundler.ui.debug?
|
284
|
+
header
|
285
|
+
end
|
286
|
+
|
287
|
+
def justify(row, sizes)
|
288
|
+
row.each_with_index.map do |element, index|
|
289
|
+
element.ljust(sizes[index])
|
290
|
+
end.join(" ").strip + "\n"
|
291
|
+
end
|
269
292
|
end
|
270
293
|
end
|
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 overriden.")
|
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/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
|
-
|
121
|
+
add_platforms unless Bundler.frozen_bundle?
|
117
122
|
|
118
123
|
converge_path_sources_to_gemspec_sources
|
119
124
|
@path_changes = converge_paths
|
@@ -228,12 +233,13 @@ module Bundler
|
|
228
233
|
end
|
229
234
|
|
230
235
|
def current_dependencies
|
231
|
-
dependencies.select
|
236
|
+
dependencies.select do |d|
|
237
|
+
d.should_include? && !d.gem_platforms(@platforms).empty?
|
238
|
+
end
|
232
239
|
end
|
233
240
|
|
234
241
|
def specs_for(groups)
|
235
|
-
deps =
|
236
|
-
deps.delete_if {|d| !d.should_include? }
|
242
|
+
deps = dependencies_for(groups)
|
237
243
|
specs.for(expand_dependencies(deps))
|
238
244
|
end
|
239
245
|
|
@@ -396,12 +402,10 @@ module Bundler
|
|
396
402
|
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
397
403
|
|
398
404
|
unless explicit_flag
|
399
|
-
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
405
|
+
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
400
406
|
"bundle config unset frozen"
|
401
407
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
402
408
|
"bundle config unset deployment"
|
403
|
-
else
|
404
|
-
"bundle install --no-deployment"
|
405
409
|
end
|
406
410
|
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
407
411
|
"freeze \nby running `#{suggested_command}`."
|
@@ -450,9 +454,9 @@ module Bundler
|
|
450
454
|
@locked_deps.each {|name, d| both_sources[name][1] = d.source }
|
451
455
|
|
452
456
|
both_sources.each do |name, (dep, lock_source)|
|
453
|
-
next
|
457
|
+
next if lock_source.nil? || (dep && lock_source.can_lock?(dep))
|
454
458
|
gemfile_source_name = (dep && dep.source) || "no specified source"
|
455
|
-
lockfile_source_name = lock_source
|
459
|
+
lockfile_source_name = lock_source
|
456
460
|
changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
|
457
461
|
end
|
458
462
|
|
@@ -518,10 +522,6 @@ module Bundler
|
|
518
522
|
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
519
523
|
end
|
520
524
|
|
521
|
-
def add_current_platform
|
522
|
-
current_platforms.each {|platform| add_platform(platform) }
|
523
|
-
end
|
524
|
-
|
525
525
|
def find_resolved_spec(current_spec)
|
526
526
|
specs.find_by_name_and_platform(current_spec.name, current_spec.platform)
|
527
527
|
end
|
@@ -543,6 +543,12 @@ module Bundler
|
|
543
543
|
|
544
544
|
private
|
545
545
|
|
546
|
+
def add_platforms
|
547
|
+
(@dependencies.flat_map(&:expanded_platforms) + current_platforms).uniq.each do |platform|
|
548
|
+
add_platform(platform)
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
546
552
|
def current_platforms
|
547
553
|
current_platform = Bundler.local_platform
|
548
554
|
[].tap do |platforms|
|
@@ -706,9 +712,6 @@ module Bundler
|
|
706
712
|
elsif dep.source
|
707
713
|
dep.source = sources.get(dep.source)
|
708
714
|
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
715
|
end
|
713
716
|
|
714
717
|
changes = false
|
@@ -858,8 +861,8 @@ module Bundler
|
|
858
861
|
@metadata_dependencies ||= begin
|
859
862
|
ruby_versions = concat_ruby_version_requirements(@ruby_version)
|
860
863
|
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]
|
864
|
+
concat_ruby_version_requirements(RubyVersion.system, ruby_versions)
|
865
|
+
concat_ruby_version_requirements(locked_ruby_version_object, ruby_versions) unless @unlock[:ruby]
|
863
866
|
end
|
864
867
|
[
|
865
868
|
Dependency.new("Ruby\0", ruby_versions),
|
@@ -890,27 +893,23 @@ module Bundler
|
|
890
893
|
dependencies.each do |dep|
|
891
894
|
dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
|
892
895
|
next if !remote && !dep.current_platform?
|
893
|
-
|
894
|
-
if platforms.empty? && !Bundler.settings[:disable_platform_warnings]
|
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|
|
896
|
+
dep.gem_platforms(sorted_platforms).each do |p|
|
904
897
|
deps << DepProxy.new(dep, p) if remote || p == generic_local_platform
|
905
898
|
end
|
906
899
|
end
|
907
900
|
deps
|
908
901
|
end
|
909
902
|
|
903
|
+
def dependencies_for(groups)
|
904
|
+
current_dependencies.reject do |d|
|
905
|
+
(d.groups & groups).empty?
|
906
|
+
end
|
907
|
+
end
|
908
|
+
|
910
909
|
def requested_dependencies
|
911
910
|
groups = requested_groups
|
912
911
|
groups.map!(&:to_sym)
|
913
|
-
|
912
|
+
dependencies_for(groups)
|
914
913
|
end
|
915
914
|
|
916
915
|
def source_requirements
|
@@ -985,8 +984,9 @@ module Bundler
|
|
985
984
|
@locked_gems.specs.reduce({}) do |requirements, locked_spec|
|
986
985
|
name = locked_spec.name
|
987
986
|
dependency = dependencies_by_name[name]
|
987
|
+
next requirements unless dependency
|
988
988
|
next requirements if @locked_gems.dependencies[name] != dependency
|
989
|
-
next requirements if dependency
|
989
|
+
next requirements if dependency.source.is_a?(Source::Path)
|
990
990
|
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
991
991
|
requirements[name] = DepProxy.new(dep, locked_spec.platform)
|
992
992
|
requirements
|