bundler 2.1.1 → 2.2.0.rc.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 +1543 -1418
- data/README.md +6 -8
- data/bundler.gemspec +3 -3
- data/exe/bundle +3 -0
- data/lib/bundler.rb +21 -7
- data/lib/bundler/build_metadata.rb +3 -11
- data/lib/bundler/cli.rb +54 -20
- data/lib/bundler/cli/add.rb +1 -1
- 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 +1 -1
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +84 -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 +12 -18
- data/lib/bundler/cli/issue.rb +2 -2
- data/lib/bundler/cli/list.rb +12 -10
- data/lib/bundler/cli/outdated.rb +89 -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 +2 -0
- data/lib/bundler/compact_index_client.rb +1 -1
- data/lib/bundler/compact_index_client/cache.rb +1 -1
- data/lib/bundler/definition.rb +51 -60
- data/lib/bundler/dep_proxy.rb +1 -1
- data/lib/bundler/dependency.rb +0 -9
- data/lib/bundler/dsl.rb +5 -9
- data/lib/bundler/endpoint_specification.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 -2
- 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 +1 -1
- data/lib/bundler/friendly_errors.rb +7 -13
- data/lib/bundler/gem_helper.rb +33 -19
- data/lib/bundler/gem_helpers.rb +6 -1
- data/lib/bundler/gem_version_promoter.rb +2 -2
- data/lib/bundler/graph.rb +1 -1
- data/lib/bundler/index.rb +1 -1
- data/lib/bundler/injector.rb +15 -4
- data/lib/bundler/inline.rb +2 -2
- data/lib/bundler/installer.rb +30 -29
- 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 +19 -6
- data/lib/bundler/lockfile_generator.rb +1 -1
- data/lib/bundler/lockfile_parser.rb +1 -1
- data/lib/bundler/mirror.rb +2 -2
- data/lib/bundler/plugin.rb +30 -5
- 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 +32 -9
- data/lib/bundler/resolver/spec_group.rb +27 -6
- data/lib/bundler/retry.rb +1 -1
- data/lib/bundler/ruby_version.rb +1 -1
- data/lib/bundler/rubygems_ext.rb +53 -9
- data/lib/bundler/rubygems_gem_installer.rb +3 -9
- data/lib/bundler/rubygems_integration.rb +23 -54
- data/lib/bundler/runtime.rb +4 -14
- data/lib/bundler/settings.rb +49 -45
- 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 +5 -5
- data/lib/bundler/source/git/git_proxy.rb +56 -59
- data/lib/bundler/source/path.rb +7 -3
- data/lib/bundler/source/path/installer.rb +8 -10
- data/lib/bundler/source/rubygems.rb +13 -16
- data/lib/bundler/source/rubygems/remote.rb +1 -1
- data/lib/bundler/source_list.rb +2 -2
- data/lib/bundler/spec_set.rb +1 -1
- data/lib/bundler/stub_specification.rb +17 -5
- 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 -1
- 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 +2 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -6
- 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 -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 +1 -1
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +79 -212
- 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/vendored_persistent.rb +0 -7
- data/lib/bundler/version.rb +1 -1
- data/lib/bundler/worker.rb +1 -1
- data/lib/bundler/yaml_serializer.rb +1 -1
- data/man/bundle-add.1 +1 -1
- data/man/{bundle-add.ronn → bundle-add.1.ronn} +0 -0
- data/man/bundle-binstubs.1 +5 -3
- data/man/{bundle-binstubs.ronn → bundle-binstubs.1.ronn} +2 -4
- data/man/bundle-cache.1 +1 -1
- data/man/{bundle-cache.ronn → bundle-cache.1.ronn} +0 -0
- data/man/bundle-check.1 +1 -1
- data/man/{bundle-check.ronn → bundle-check.1.ronn} +0 -0
- data/man/bundle-clean.1 +1 -1
- data/man/{bundle-clean.ronn → bundle-clean.1.ronn} +0 -0
- data/man/bundle-config.1 +16 -22
- data/man/{bundle-config.ronn → bundle-config.1.ronn} +19 -22
- data/man/bundle-doctor.1 +1 -1
- data/man/{bundle-doctor.ronn → bundle-doctor.1.ronn} +0 -0
- data/man/bundle-exec.1 +1 -1
- data/man/{bundle-exec.ronn → bundle-exec.1.ronn} +0 -0
- data/man/bundle-gem.1 +25 -3
- data/man/{bundle-gem.ronn → bundle-gem.1.ronn} +30 -7
- data/man/bundle-info.1 +1 -1
- data/man/{bundle-info.ronn → bundle-info.1.ronn} +0 -0
- data/man/bundle-init.1 +1 -1
- data/man/{bundle-init.ronn → bundle-init.1.ronn} +0 -0
- data/man/bundle-inject.1 +1 -1
- data/man/{bundle-inject.ronn → bundle-inject.1.ronn} +0 -0
- data/man/bundle-install.1 +29 -2
- data/man/{bundle-install.ronn → bundle-install.1.ronn} +24 -2
- data/man/bundle-list.1 +7 -7
- data/man/{bundle-list.ronn → bundle-list.1.ronn} +6 -6
- data/man/bundle-lock.1 +1 -1
- data/man/{bundle-lock.ronn → bundle-lock.1.ronn} +0 -0
- data/man/bundle-open.1 +1 -1
- data/man/{bundle-open.ronn → bundle-open.1.ronn} +0 -0
- data/man/bundle-outdated.1 +1 -1
- data/man/{bundle-outdated.ronn → bundle-outdated.1.ronn} +0 -0
- data/man/bundle-platform.1 +1 -1
- data/man/{bundle-platform.ronn → bundle-platform.1.ronn} +0 -0
- data/man/bundle-pristine.1 +1 -1
- data/man/{bundle-pristine.ronn → bundle-pristine.1.ronn} +0 -0
- data/man/bundle-remove.1 +1 -1
- data/man/{bundle-remove.ronn → bundle-remove.1.ronn} +0 -0
- data/man/bundle-show.1 +1 -1
- data/man/{bundle-show.ronn → bundle-show.1.ronn} +0 -0
- data/man/bundle-update.1 +1 -1
- data/man/{bundle-update.ronn → bundle-update.1.ronn} +0 -0
- data/man/bundle-viz.1 +1 -1
- data/man/{bundle-viz.ronn → bundle-viz.1.ronn} +0 -0
- data/man/bundle.1 +1 -1
- data/man/{bundle.ronn → bundle.1.ronn} +0 -0
- data/man/gemfile.5 +4 -4
- data/man/gemfile.5.ronn +4 -4
- metadata +39 -58
- 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/man/index.txt +0 -25
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
@@ -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
|
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
|
@@ -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
|
@@ -312,10 +326,6 @@ module Bundler
|
|
312
326
|
sources.rubygems_sources.any? {|s| s.remotes.any? }
|
313
327
|
end
|
314
328
|
|
315
|
-
def has_local_dependencies?
|
316
|
-
!sources.path_sources.empty? || !sources.git_sources.empty?
|
317
|
-
end
|
318
|
-
|
319
329
|
def spec_git_paths
|
320
330
|
sources.git_sources.map {|s| File.realpath(s.path) if File.exist?(s.path) }.compact
|
321
331
|
end
|
@@ -396,12 +406,10 @@ module Bundler
|
|
396
406
|
"updated #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} to version control."
|
397
407
|
|
398
408
|
unless explicit_flag
|
399
|
-
suggested_command = if Bundler.settings.locations("frozen")[:global]
|
409
|
+
suggested_command = if Bundler.settings.locations("frozen").keys.&([:global, :local]).any?
|
400
410
|
"bundle config unset frozen"
|
401
411
|
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
|
402
412
|
"bundle config unset deployment"
|
403
|
-
else
|
404
|
-
"bundle install --no-deployment"
|
405
413
|
end
|
406
414
|
msg << "\n\nIf this is a development machine, remove the #{Bundler.default_gemfile} " \
|
407
415
|
"freeze \nby running `#{suggested_command}`."
|
@@ -450,9 +458,9 @@ module Bundler
|
|
450
458
|
@locked_deps.each {|name, d| both_sources[name][1] = d.source }
|
451
459
|
|
452
460
|
both_sources.each do |name, (dep, lock_source)|
|
453
|
-
next
|
461
|
+
next if lock_source.nil? || (dep && lock_source.can_lock?(dep))
|
454
462
|
gemfile_source_name = (dep && dep.source) || "no specified source"
|
455
|
-
lockfile_source_name = lock_source
|
463
|
+
lockfile_source_name = lock_source
|
456
464
|
changed << "* #{name} from `#{gemfile_source_name}` to `#{lockfile_source_name}`"
|
457
465
|
end
|
458
466
|
|
@@ -518,10 +526,6 @@ module Bundler
|
|
518
526
|
raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
|
519
527
|
end
|
520
528
|
|
521
|
-
def add_current_platform
|
522
|
-
current_platforms.each {|platform| add_platform(platform) }
|
523
|
-
end
|
524
|
-
|
525
529
|
def find_resolved_spec(current_spec)
|
526
530
|
specs.find_by_name_and_platform(current_spec.name, current_spec.platform)
|
527
531
|
end
|
@@ -541,13 +545,18 @@ module Bundler
|
|
541
545
|
@unlocking
|
542
546
|
end
|
543
547
|
|
544
|
-
|
548
|
+
private
|
549
|
+
|
550
|
+
def add_platforms
|
551
|
+
(@dependencies.flat_map(&:expanded_platforms) + current_platforms).uniq.each do |platform|
|
552
|
+
add_platform(platform)
|
553
|
+
end
|
554
|
+
end
|
545
555
|
|
546
556
|
def current_platforms
|
547
|
-
current_platform = Bundler.local_platform
|
548
557
|
[].tap do |platforms|
|
549
|
-
platforms <<
|
550
|
-
platforms <<
|
558
|
+
platforms << local_platform if Bundler.feature_flag.specific_platform?
|
559
|
+
platforms << generic_local_platform
|
551
560
|
end
|
552
561
|
end
|
553
562
|
|
@@ -706,9 +715,6 @@ module Bundler
|
|
706
715
|
elsif dep.source
|
707
716
|
dep.source = sources.get(dep.source)
|
708
717
|
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
718
|
end
|
713
719
|
|
714
720
|
changes = false
|
@@ -818,7 +824,7 @@ module Bundler
|
|
818
824
|
end
|
819
825
|
|
820
826
|
resolve = SpecSet.new(converged)
|
821
|
-
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(deps), @unlock[:gems], true, true)
|
827
|
+
@locked_specs_incomplete_for_platform = !resolve.for(expand_dependencies(requested_dependencies & deps), @unlock[:gems], true, true)
|
822
828
|
resolve = resolve.for(expand_dependencies(deps, true), @unlock[:gems], false, false, false)
|
823
829
|
diff = nil
|
824
830
|
|
@@ -856,11 +862,7 @@ module Bundler
|
|
856
862
|
|
857
863
|
def metadata_dependencies
|
858
864
|
@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
|
865
|
+
ruby_versions = ruby_version_requirements(@ruby_version)
|
864
866
|
[
|
865
867
|
Dependency.new("Ruby\0", ruby_versions),
|
866
868
|
Dependency.new("RubyGems\0", Gem::VERSION),
|
@@ -868,49 +870,37 @@ module Bundler
|
|
868
870
|
end
|
869
871
|
end
|
870
872
|
|
871
|
-
def
|
872
|
-
return
|
873
|
+
def ruby_version_requirements(ruby_version)
|
874
|
+
return [] unless ruby_version
|
873
875
|
if ruby_version.patchlevel
|
874
|
-
|
876
|
+
[ruby_version.to_gem_version_with_patchlevel]
|
875
877
|
else
|
876
|
-
|
878
|
+
ruby_version.versions.map do |version|
|
877
879
|
requirement = Gem::Requirement.new(version)
|
878
880
|
if requirement.exact?
|
879
881
|
"~> #{version}.0"
|
880
882
|
else
|
881
883
|
requirement
|
882
884
|
end
|
883
|
-
end
|
885
|
+
end
|
884
886
|
end
|
885
887
|
end
|
886
888
|
|
887
889
|
def expand_dependencies(dependencies, remote = false)
|
888
|
-
sorted_platforms = Resolver.sort_platforms(@platforms)
|
889
890
|
deps = []
|
890
891
|
dependencies.each do |dep|
|
891
892
|
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
|
893
|
+
next unless remote || dep.current_platform?
|
894
|
+
target_platforms = dep.gem_platforms(remote ? Resolver.sort_platforms(@platforms) : [generic_local_platform])
|
895
|
+
deps += expand_dependency_with_platforms(dep, target_platforms)
|
906
896
|
end
|
907
897
|
deps
|
908
898
|
end
|
909
899
|
|
910
|
-
def
|
911
|
-
|
912
|
-
|
913
|
-
|
900
|
+
def expand_dependency_with_platforms(dep, platforms)
|
901
|
+
platforms.map do |p|
|
902
|
+
DepProxy.new(dep, p)
|
903
|
+
end
|
914
904
|
end
|
915
905
|
|
916
906
|
def source_requirements
|
@@ -985,8 +975,9 @@ module Bundler
|
|
985
975
|
@locked_gems.specs.reduce({}) do |requirements, locked_spec|
|
986
976
|
name = locked_spec.name
|
987
977
|
dependency = dependencies_by_name[name]
|
978
|
+
next requirements unless dependency
|
988
979
|
next requirements if @locked_gems.dependencies[name] != dependency
|
989
|
-
next requirements if dependency
|
980
|
+
next requirements if dependency.source.is_a?(Source::Path)
|
990
981
|
dep = Gem::Dependency.new(name, ">= #{locked_spec.version}")
|
991
982
|
requirements[name] = DepProxy.new(dep, locked_spec.platform)
|
992
983
|
requirements
|
data/lib/bundler/dep_proxy.rb
CHANGED
data/lib/bundler/dependency.rb
CHANGED
@@ -74,15 +74,6 @@ module Bundler
|
|
74
74
|
:x64_mingw_26 => Gem::Platform::X64_MINGW,
|
75
75
|
}.freeze
|
76
76
|
|
77
|
-
REVERSE_PLATFORM_MAP = {}.tap do |reverse_platform_map|
|
78
|
-
PLATFORM_MAP.each do |key, value|
|
79
|
-
reverse_platform_map[value] ||= []
|
80
|
-
reverse_platform_map[value] << key
|
81
|
-
end
|
82
|
-
|
83
|
-
reverse_platform_map.each {|_, platforms| platforms.freeze }
|
84
|
-
end.freeze
|
85
|
-
|
86
77
|
def initialize(name, version, options = {}, &blk)
|
87
78
|
type = options["type"] || :runtime
|
88
79
|
super(name, version, type)
|
data/lib/bundler/dsl.rb
CHANGED
@@ -63,7 +63,7 @@ module Bundler
|
|
63
63
|
development_group = opts[:development_group] || :development
|
64
64
|
expanded_path = gemfile_root.join(path)
|
65
65
|
|
66
|
-
gemspecs =
|
66
|
+
gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).map {|g| Bundler.load_gemspec(g) }.compact
|
67
67
|
gemspecs.reject! {|s| s.name != name } if name
|
68
68
|
Index.sort_specs(gemspecs)
|
69
69
|
specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
|
@@ -75,8 +75,7 @@ module Bundler
|
|
75
75
|
|
76
76
|
@gemspecs << spec
|
77
77
|
|
78
|
-
|
79
|
-
gem spec.name, :name => spec.name, :path => path, :glob => glob, :platforms => gem_platforms
|
78
|
+
gem spec.name, :name => spec.name, :path => path, :glob => glob
|
80
79
|
|
81
80
|
group(development_group) do
|
82
81
|
spec.development_dependencies.each do |dep|
|
@@ -223,7 +222,6 @@ module Bundler
|
|
223
222
|
|
224
223
|
def github(repo, options = {})
|
225
224
|
raise ArgumentError, "GitHub sources require a block" unless block_given?
|
226
|
-
raise DeprecatedError, "The #github method has been removed" if Bundler.feature_flag.skip_default_git_sources?
|
227
225
|
github_uri = @git_sources["github"].call(repo)
|
228
226
|
git_options = normalize_hash(options).merge("uri" => github_uri)
|
229
227
|
git_source = @sources.add_git_source(git_options)
|
@@ -281,11 +279,9 @@ module Bundler
|
|
281
279
|
raise GemfileError, "Undefined local variable or method `#{name}' for Gemfile"
|
282
280
|
end
|
283
281
|
|
284
|
-
|
282
|
+
private
|
285
283
|
|
286
284
|
def add_git_sources
|
287
|
-
return if Bundler.feature_flag.skip_default_git_sources?
|
288
|
-
|
289
285
|
git_source(:github) do |repo_name|
|
290
286
|
warn_deprecated_git_source(:github, <<-'RUBY'.strip, 'Change any "reponame" :github sources to "username/reponame".')
|
291
287
|
"https://github.com/#{repo_name}.git"
|
@@ -461,7 +457,7 @@ repo_name ||= user_name
|
|
461
457
|
"Using `source` more than once without a block is a security risk, and " \
|
462
458
|
"may result in installing unexpected gems. To resolve this warning, use " \
|
463
459
|
"a block to indicate which gems should come from the secondary source. " \
|
464
|
-
"To upgrade this warning to an error, run `bundle config set " \
|
460
|
+
"To upgrade this warning to an error, run `bundle config set --local " \
|
465
461
|
"disable_multisource true`."
|
466
462
|
end
|
467
463
|
end
|
@@ -571,7 +567,7 @@ The :#{name} git source is deprecated, and will be removed in the future.#{addit
|
|
571
567
|
end
|
572
568
|
end
|
573
569
|
|
574
|
-
|
570
|
+
private
|
575
571
|
|
576
572
|
def parse_line_number_from_description
|
577
573
|
description = self.description
|
@@ -17,14 +17,38 @@ module Bundler
|
|
17
17
|
].map(&:freeze).freeze
|
18
18
|
BUNDLER_PREFIX = "BUNDLER_ORIG_".freeze
|
19
19
|
|
20
|
-
|
20
|
+
def self.from_env
|
21
|
+
new(env_to_hash(ENV), BUNDLER_KEYS)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.env_to_hash(env)
|
25
|
+
to_hash = env.to_hash
|
26
|
+
return to_hash unless Gem.win_platform?
|
27
|
+
|
28
|
+
to_hash.each_with_object({}) {|(k,v), a| a[k.upcase] = v }
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param env [Hash]
|
21
32
|
# @param keys [Array<String>]
|
22
33
|
def initialize(env, keys)
|
23
|
-
@original = env
|
34
|
+
@original = env
|
24
35
|
@keys = keys
|
25
36
|
@prefix = BUNDLER_PREFIX
|
26
37
|
end
|
27
38
|
|
39
|
+
# Replaces `ENV` with the bundler environment variables backed up
|
40
|
+
def replace_with_backup
|
41
|
+
ENV.replace(backup) unless Gem.win_platform?
|
42
|
+
|
43
|
+
# Fallback logic for Windows below to workaround
|
44
|
+
# https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
|
45
|
+
# supported rubies include the fix for that.
|
46
|
+
|
47
|
+
ENV.clear
|
48
|
+
|
49
|
+
backup.each {|k, v| ENV[k] = v }
|
50
|
+
end
|
51
|
+
|
28
52
|
# @return [Hash]
|
29
53
|
def backup
|
30
54
|
env = @original.clone
|
data/lib/bundler/errors.rb
CHANGED
@@ -56,6 +56,7 @@ module Bundler
|
|
56
56
|
class SudoNotPermittedError < BundlerError; status_code(30); end
|
57
57
|
class ThreadCreationError < BundlerError; status_code(33); end
|
58
58
|
class APIResponseMismatchError < BundlerError; status_code(34); end
|
59
|
+
class APIResponseInvalidDependenciesError < BundlerError; status_code(35); end
|
59
60
|
class GemfileEvalError < GemfileError; end
|
60
61
|
class MarshalError < StandardError; end
|
61
62
|
|