bundler 2.3.17 → 2.3.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +76 -0
  3. data/lib/bundler/build_metadata.rb +2 -2
  4. data/lib/bundler/cli/common.rb +1 -0
  5. data/lib/bundler/cli/install.rb +5 -2
  6. data/lib/bundler/cli/outdated.rb +12 -3
  7. data/lib/bundler/cli/platform.rb +1 -1
  8. data/lib/bundler/cli.rb +5 -3
  9. data/lib/bundler/compact_index_client/updater.rb +16 -3
  10. data/lib/bundler/definition.rb +111 -28
  11. data/lib/bundler/dependency.rb +2 -1
  12. data/lib/bundler/dsl.rb +3 -3
  13. data/lib/bundler/fetcher.rb +6 -6
  14. data/lib/bundler/gem_helpers.rb +8 -1
  15. data/lib/bundler/incomplete_specification.rb +12 -0
  16. data/lib/bundler/index.rb +10 -12
  17. data/lib/bundler/installer/standalone.rb +1 -1
  18. data/lib/bundler/installer.rb +8 -1
  19. data/lib/bundler/lazy_specification.rb +30 -21
  20. data/lib/bundler/lockfile_parser.rb +4 -0
  21. data/lib/bundler/man/bundle-add.1 +1 -1
  22. data/lib/bundler/man/bundle-binstubs.1 +1 -1
  23. data/lib/bundler/man/bundle-cache.1 +7 -1
  24. data/lib/bundler/man/bundle-cache.1.ronn +7 -0
  25. data/lib/bundler/man/bundle-check.1 +1 -1
  26. data/lib/bundler/man/bundle-clean.1 +1 -1
  27. data/lib/bundler/man/bundle-config.1 +15 -5
  28. data/lib/bundler/man/bundle-config.1.ronn +12 -5
  29. data/lib/bundler/man/bundle-doctor.1 +1 -1
  30. data/lib/bundler/man/bundle-exec.1 +2 -2
  31. data/lib/bundler/man/bundle-exec.1.ronn +1 -1
  32. data/lib/bundler/man/bundle-gem.1 +1 -1
  33. data/lib/bundler/man/bundle-info.1 +1 -1
  34. data/lib/bundler/man/bundle-init.1 +1 -1
  35. data/lib/bundler/man/bundle-inject.1 +5 -2
  36. data/lib/bundler/man/bundle-inject.1.ronn +3 -1
  37. data/lib/bundler/man/bundle-install.1 +5 -1
  38. data/lib/bundler/man/bundle-install.1.ronn +6 -0
  39. data/lib/bundler/man/bundle-list.1 +1 -1
  40. data/lib/bundler/man/bundle-lock.1 +1 -1
  41. data/lib/bundler/man/bundle-open.1 +1 -1
  42. data/lib/bundler/man/bundle-outdated.1 +1 -1
  43. data/lib/bundler/man/bundle-platform.1 +16 -6
  44. data/lib/bundler/man/bundle-platform.1.ronn +14 -7
  45. data/lib/bundler/man/bundle-pristine.1 +1 -1
  46. data/lib/bundler/man/bundle-remove.1 +1 -1
  47. data/lib/bundler/man/bundle-show.1 +1 -1
  48. data/lib/bundler/man/bundle-update.1 +1 -1
  49. data/lib/bundler/man/bundle-viz.1 +4 -1
  50. data/lib/bundler/man/bundle-viz.1.ronn +2 -0
  51. data/lib/bundler/man/bundle.1 +6 -9
  52. data/lib/bundler/man/bundle.1.ronn +5 -6
  53. data/lib/bundler/man/gemfile.5 +77 -47
  54. data/lib/bundler/man/gemfile.5.ronn +75 -54
  55. data/lib/bundler/remote_specification.rb +5 -4
  56. data/lib/bundler/resolver/spec_group.rb +5 -4
  57. data/lib/bundler/resolver.rb +10 -7
  58. data/lib/bundler/ruby_dsl.rb +1 -1
  59. data/lib/bundler/ruby_version.rb +5 -5
  60. data/lib/bundler/rubygems_ext.rb +13 -0
  61. data/lib/bundler/rubygems_gem_installer.rb +19 -12
  62. data/lib/bundler/runtime.rb +0 -1
  63. data/lib/bundler/settings.rb +1 -0
  64. data/lib/bundler/source/metadata.rb +1 -1
  65. data/lib/bundler/source/rubygems.rb +12 -6
  66. data/lib/bundler/source_list.rb +4 -0
  67. data/lib/bundler/spec_set.rb +26 -31
  68. data/lib/bundler/version.rb +1 -1
  69. data/lib/bundler.rb +1 -0
  70. metadata +4 -3
@@ -11,40 +11,33 @@ module Bundler
11
11
  @specs = specs
12
12
  end
13
13
 
14
- def for(dependencies, check = false, match_current_platform = false)
15
- # dep.name => [list, of, deps]
16
- handled = Hash.new {|h, k| h[k] = [] }
17
- deps = dependencies.dup
14
+ def for(dependencies, check = false, platforms = [nil])
15
+ handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
16
+ deps = dependencies.product(platforms)
18
17
  specs = []
19
18
 
20
19
  loop do
21
20
  break unless dep = deps.shift
22
- next if handled[dep.name].any? {|d| match_current_platform || d.__platform == dep.__platform } || dep.name == "bundler"
23
21
 
24
- # use a hash here to ensure constant lookup time in the `any?` call above
25
- handled[dep.name] << dep
22
+ key = [dep[0].name, dep[1]]
23
+ next if handled.key?(key)
26
24
 
27
- specs_for_dep = specs_for_dependency(dep, match_current_platform)
25
+ handled[key] = true
26
+
27
+ specs_for_dep = specs_for_dependency(*dep)
28
28
  if specs_for_dep.any?
29
29
  specs.concat(specs_for_dep)
30
30
 
31
31
  specs_for_dep.first.dependencies.each do |d|
32
32
  next if d.type == :development
33
- d = DepProxy.get_proxy(d, dep.__platform) unless match_current_platform
34
- deps << d
33
+ deps << [d, dep[1]]
35
34
  end
36
35
  elsif check
37
- return false
36
+ specs << IncompleteSpecification.new(*key)
38
37
  end
39
38
  end
40
39
 
41
- if spec = lookup["bundler"].first
42
- specs << spec
43
- end
44
-
45
- specs.uniq! unless match_current_platform
46
-
47
- check ? true : specs
40
+ specs
48
41
  end
49
42
 
50
43
  def [](key)
@@ -71,13 +64,8 @@ module Bundler
71
64
  end
72
65
 
73
66
  def materialize(deps)
74
- materialized = self.for(deps, false, true)
67
+ materialized = self.for(deps, true)
75
68
 
76
- materialized.map! do |s|
77
- next s unless s.is_a?(LazySpecification)
78
- s.source.local!
79
- s.__materialize__ || s
80
- end
81
69
  SpecSet.new(materialized)
82
70
  end
83
71
 
@@ -87,18 +75,25 @@ module Bundler
87
75
  def materialized_for_all_platforms
88
76
  @specs.map do |s|
89
77
  next s unless s.is_a?(LazySpecification)
90
- s.source.local!
91
78
  s.source.remote!
92
- spec = s.__materialize__
79
+ spec = s.materialize_for_installation
93
80
  raise GemNotFound, "Could not find #{s.full_name} in any of the sources" unless spec
94
81
  spec
95
82
  end
96
83
  end
97
84
 
85
+ def incomplete_ruby_specs?(deps)
86
+ self.class.new(self.for(deps, true, [Gem::Platform::RUBY])).incomplete_specs.any?
87
+ end
88
+
98
89
  def missing_specs
99
90
  @specs.select {|s| s.is_a?(LazySpecification) }
100
91
  end
101
92
 
93
+ def incomplete_specs
94
+ @specs.select {|s| s.is_a?(IncompleteSpecification) }
95
+ end
96
+
102
97
  def merge(set)
103
98
  arr = sorted.dup
104
99
  set.each do |set_spec|
@@ -173,13 +168,13 @@ module Bundler
173
168
  @specs.sort_by(&:name).each {|s| yield s }
174
169
  end
175
170
 
176
- def specs_for_dependency(dep, match_current_platform)
171
+ def specs_for_dependency(dep, platform)
177
172
  specs_for_name = lookup[dep.name]
178
- if match_current_platform
179
- GemHelpers.select_best_platform_match(specs_for_name.select {|s| Gem::Platform.match_spec?(s) }, Bundler.local_platform)
173
+ if platform.nil?
174
+ matching_specs = specs_for_name.map {|s| s.materialize_for_installation if Gem::Platform.match_spec?(s) }.compact
175
+ GemHelpers.sort_best_platform_match(matching_specs, Bundler.local_platform)
180
176
  else
181
- specs_for_name_and_platform = GemHelpers.select_best_platform_match(specs_for_name, dep.__platform)
182
- specs_for_name_and_platform.any? ? specs_for_name_and_platform : specs_for_name
177
+ GemHelpers.select_best_platform_match(specs_for_name, dep.force_ruby_platform ? Gem::Platform::RUBY : platform)
183
178
  end
184
179
  end
185
180
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.3.17".freeze
4
+ VERSION = "2.3.20".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
data/lib/bundler.rb CHANGED
@@ -53,6 +53,7 @@ module Bundler
53
53
  autoload :GemHelpers, File.expand_path("bundler/gem_helpers", __dir__)
54
54
  autoload :GemVersionPromoter, File.expand_path("bundler/gem_version_promoter", __dir__)
55
55
  autoload :Graph, File.expand_path("bundler/graph", __dir__)
56
+ autoload :IncompleteSpecification, File.expand_path("bundler/incomplete_specification", __dir__)
56
57
  autoload :Index, File.expand_path("bundler/index", __dir__)
57
58
  autoload :Injector, File.expand_path("bundler/injector", __dir__)
58
59
  autoload :Installer, File.expand_path("bundler/installer", __dir__)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.17
4
+ version: 2.3.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - André Arko
@@ -22,7 +22,7 @@ authors:
22
22
  autorequire:
23
23
  bindir: exe
24
24
  cert_chain: []
25
- date: 2022-06-29 00:00:00.000000000 Z
25
+ date: 2022-08-10 00:00:00.000000000 Z
26
26
  dependencies: []
27
27
  description: Bundler manages an application's dependencies through its entire life,
28
28
  across many machines, systematically and repeatably
@@ -103,6 +103,7 @@ files:
103
103
  - lib/bundler/gem_tasks.rb
104
104
  - lib/bundler/gem_version_promoter.rb
105
105
  - lib/bundler/graph.rb
106
+ - lib/bundler/incomplete_specification.rb
106
107
  - lib/bundler/index.rb
107
108
  - lib/bundler/injector.rb
108
109
  - lib/bundler/inline.rb
@@ -369,7 +370,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
369
370
  - !ruby/object:Gem::Version
370
371
  version: 2.5.2
371
372
  requirements: []
372
- rubygems_version: 3.3.17
373
+ rubygems_version: 3.3.20
373
374
  signing_key:
374
375
  specification_version: 4
375
376
  summary: The best way to manage your application's dependencies