rubygems-update 3.2.2 → 3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +12 -0
  3. data/Manifest.txt +2 -0
  4. data/bundler/CHANGELOG.md +9 -0
  5. data/bundler/lib/bundler.rb +3 -6
  6. data/bundler/lib/bundler/build_metadata.rb +2 -2
  7. data/bundler/lib/bundler/cli/update.rb +1 -1
  8. data/bundler/lib/bundler/compact_index_client/cache.rb +5 -13
  9. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  10. data/bundler/lib/bundler/definition.rb +26 -14
  11. data/bundler/lib/bundler/gem_helpers.rb +30 -24
  12. data/bundler/lib/bundler/lazy_specification.rb +10 -11
  13. data/bundler/lib/bundler/resolver/spec_group.rb +14 -16
  14. data/bundler/lib/bundler/rubygems_integration.rb +0 -5
  15. data/bundler/lib/bundler/spec_set.rb +5 -8
  16. data/bundler/lib/bundler/version.rb +1 -1
  17. data/lib/rubygems.rb +1 -1
  18. data/lib/rubygems/dependency_installer.rb +1 -0
  19. data/lib/rubygems/gemcutter_utilities.rb +2 -2
  20. data/lib/rubygems/installer.rb +0 -23
  21. data/lib/rubygems/remote_fetcher.rb +1 -1
  22. data/lib/rubygems/request_set.rb +2 -13
  23. data/lib/rubygems/resolver.rb +6 -1
  24. data/lib/rubygems/resolver/api_set.rb +28 -19
  25. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  26. data/lib/rubygems/resolver/api_specification.rb +4 -3
  27. data/lib/rubygems/resolver/best_set.rb +1 -1
  28. data/lib/rubygems/resolver/index_specification.rb +15 -0
  29. data/lib/rubygems/resolver/installer_set.rb +57 -7
  30. data/lib/rubygems/resolver/spec_specification.rb +14 -0
  31. data/lib/rubygems/resolver/specification.rb +12 -0
  32. data/lib/rubygems/source.rb +10 -6
  33. data/rubygems-update.gemspec +1 -1
  34. data/test/rubygems/test_gem_commands_install_command.rb +131 -0
  35. data/test/rubygems/test_gem_installer.rb +6 -60
  36. data/test/rubygems/test_gem_resolver_api_set.rb +26 -52
  37. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -3
  38. data/test/rubygems/test_gem_resolver_best_set.rb +3 -3
  39. data/test/rubygems/test_gem_source.rb +2 -2
  40. data/test/rubygems/test_gem_source_subpath_problem.rb +2 -2
  41. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 89d8b149374def285695109ddc454c37bce9e4237c234c5effd43d9cf4ccc26a
4
- data.tar.gz: d47581abe6eeacc1037e20a882df82001f5742fb33418d38829c788bb341f073
3
+ metadata.gz: 482ec42938f23bcf5d942d87a0a5a173ac7810be736c08d533fca4100bea4cc1
4
+ data.tar.gz: 61c6a87a139ae0030f021bb8c7ca41af73ad62ee845aa4f32dee4e5accb400b8
5
5
  SHA512:
6
- metadata.gz: 34fe6a294d1aaed49dc46a1a3aecdc211a2fb308a88ab352cbc732a0b9dc8ffdedc0e87302efc29275972051f77a275b8caf3c436538dcbb43e569b75ce1e429
7
- data.tar.gz: 10af836317bb8539971af80345a129963d56149affab1a89498abde570c31802a374246c0cee85bf3bdfd6c37d6dcfd1db33677b4db9c5514d6cd5102741be89
6
+ metadata.gz: 0fc4d232c9f2b42bbc3982c548287d70af78c2b85f202b0e5de89039a4b6ffdc7aa38940007779ba5fe5cbb882043edab224188c64247b4eda086a5626f236a8
7
+ data.tar.gz: 13e095493a3d3e5872d5873d076f2e5295c8694ab1e007ce00730ce467934b577e782d39721c1cc4a41660f90001368f1b125f13eb9549640578d7671fd7f9d4
@@ -1,3 +1,15 @@
1
+ === 3.2.3 / 2020-12-22
2
+
3
+ Enhancements:
4
+
5
+ * Fix misspellings in default API key name. Pull request #4177 by hsbt
6
+
7
+ Bug fixes:
8
+
9
+ * Respect `required_ruby_version` and `required_rubygems_version`
10
+ constraints when looking for `gem install` candidates. Pull request #4110
11
+ by deivid-rodriguez
12
+
1
13
  === 3.2.2 / 2020-12-17
2
14
 
3
15
  Bug fixes:
@@ -52,6 +52,7 @@ bundler/lib/bundler/cli/update.rb
52
52
  bundler/lib/bundler/cli/viz.rb
53
53
  bundler/lib/bundler/compact_index_client.rb
54
54
  bundler/lib/bundler/compact_index_client/cache.rb
55
+ bundler/lib/bundler/compact_index_client/gem_parser.rb
55
56
  bundler/lib/bundler/compact_index_client/updater.rb
56
57
  bundler/lib/bundler/constants.rb
57
58
  bundler/lib/bundler/current_ruby.rb
@@ -412,6 +413,7 @@ lib/rubygems/requirement.rb
412
413
  lib/rubygems/resolver.rb
413
414
  lib/rubygems/resolver/activation_request.rb
414
415
  lib/rubygems/resolver/api_set.rb
416
+ lib/rubygems/resolver/api_set/gem_parser.rb
415
417
  lib/rubygems/resolver/api_specification.rb
416
418
  lib/rubygems/resolver/best_set.rb
417
419
  lib/rubygems/resolver/composed_set.rb
@@ -1,3 +1,12 @@
1
+ # 2.2.3 (December 22, 2020)
2
+
3
+ ## Bug fixes:
4
+
5
+ - Restore full compatibility with previous lockfiles [#4179](https://github.com/rubygems/rubygems/pull/4179)
6
+ - Add all matching variants with the same platform specificity to the lockfile [#4180](https://github.com/rubygems/rubygems/pull/4180)
7
+ - Fix bundler installing gems for a different platform when running in frozen mode and current platform not in the lockfile [#4172](https://github.com/rubygems/rubygems/pull/4172)
8
+ - Fix crash when `bundle exec`'ing to bundler [#4175](https://github.com/rubygems/rubygems/pull/4175)
9
+
1
10
  # 2.2.2 (December 17, 2020)
2
11
 
3
12
  ## Bug fixes:
@@ -212,13 +212,10 @@ module Bundler
212
212
  end
213
213
  end
214
214
 
215
- def locked_bundler_version
216
- return nil unless defined?(@definition) && @definition
215
+ def most_specific_locked_platform?(platform)
216
+ return false unless defined?(@definition) && @definition
217
217
 
218
- locked_gems = definition.locked_gems
219
- return nil unless locked_gems
220
-
221
- locked_gems.bundler_version
218
+ definition.most_specific_locked_platform == platform
222
219
  end
223
220
 
224
221
  def ruby_scope
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2020-12-17".freeze
8
- @git_commit_sha = "d85cd5b7c3".freeze
7
+ @built_at = "2020-12-22".freeze
8
+ @git_commit_sha = "29dc3c8398".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -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
- if Bundler.rubygems.platforms.none? {|p| locked_spec.match_platform(p) }
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
 
@@ -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
@@ -92,19 +94,9 @@ module Bundler
92
94
  header ? lines[header + 1..-1] : lines
93
95
  end
94
96
 
95
- def parse_gem(string)
96
- version_and_platform, rest = string.split(" ", 2)
97
- version, platform = version_and_platform.split("-", 2)
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
@@ -118,7 +118,7 @@ module Bundler
118
118
  end
119
119
  @unlocking ||= @unlock[:ruby] ||= (!@locked_ruby_version ^ !@ruby_version)
120
120
 
121
- add_current_platform unless Bundler.frozen_bundle?
121
+ add_current_platform unless current_ruby_platform_locked? || Bundler.frozen_bundle?
122
122
 
123
123
  converge_path_sources_to_gemspec_sources
124
124
  @path_changes = converge_paths
@@ -157,7 +157,7 @@ module Bundler
157
157
  end
158
158
 
159
159
  def resolve_remotely!
160
- raise "Specs already loaded" if @specs
160
+ return if @specs
161
161
  @remote = true
162
162
  sources.remote!
163
163
  specs
@@ -269,9 +269,8 @@ module Bundler
269
269
  else
270
270
  # Run a resolve against the locally available gems
271
271
  Bundler.ui.debug("Found changes from the lockfile, re-resolving dependencies because #{change_reason}")
272
- platforms_for_resolve = platforms.one? {|p| generic(p) == Gem::Platform::RUBY } ? platforms : platforms.reject{|p| p == Gem::Platform::RUBY }
273
- expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote, platforms_for_resolve.map {|p| generic(p) })
274
- last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms_for_resolve)
272
+ expanded_dependencies = expand_dependencies(dependencies + metadata_dependencies, @remote)
273
+ last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve, platforms)
275
274
  end
276
275
 
277
276
  # filter out gems that _can_ be installed on multiple platforms, but don't need
@@ -507,15 +506,11 @@ module Bundler
507
506
  end
508
507
 
509
508
  def validate_platforms!
510
- return if @platforms.any? do |bundle_platform|
511
- Bundler.rubygems.platforms.any? do |local_platform|
512
- MatchPlatform.platforms_match?(bundle_platform, local_platform)
513
- end
514
- end
509
+ return if current_platform_locked?
515
510
 
516
511
  raise ProductionError, "Your bundle only supports platforms #{@platforms.map(&:to_s)} " \
517
- "but your local platforms are #{Bundler.rubygems.platforms.map(&:to_s)}, and " \
518
- "there's no compatible match between those two lists."
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."
519
514
  end
520
515
 
521
516
  def add_platform(platform)
@@ -528,6 +523,12 @@ module Bundler
528
523
  raise InvalidOption, "Unable to remove the platform `#{platform}` since the only platforms are #{@platforms.join ", "}"
529
524
  end
530
525
 
526
+ def most_specific_locked_platform
527
+ @platforms.min_by do |bundle_platform|
528
+ platform_specificity_match(bundle_platform, local_platform)
529
+ end
530
+ end
531
+
531
532
  def find_resolved_spec(current_spec)
532
533
  specs.find_by_name_and_platform(current_spec.name, current_spec.platform)
533
534
  end
@@ -549,6 +550,18 @@ module Bundler
549
550
 
550
551
  private
551
552
 
553
+ def current_ruby_platform_locked?
554
+ return false unless generic_local_platform == Gem::Platform::RUBY
555
+
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)
562
+ end
563
+ end
564
+
552
565
  def add_current_platform
553
566
  add_platform(local_platform)
554
567
  end
@@ -871,8 +884,7 @@ module Bundler
871
884
  end
872
885
  end
873
886
 
874
- def expand_dependencies(dependencies, remote = false, platforms = nil)
875
- platforms ||= @platforms
887
+ def expand_dependencies(dependencies, remote = false)
876
888
  deps = []
877
889
  dependencies.each do |dep|
878
890
  dep = Dependency.new(dep, ">= 0") unless dep.respond_to?(:name)
@@ -35,41 +35,33 @@ module Bundler
35
35
 
36
36
  def platform_specificity_match(spec_platform, user_platform)
37
37
  spec_platform = Gem::Platform.new(spec_platform)
38
- return PlatformMatch::EXACT_MATCH if spec_platform == user_platform
39
- return PlatformMatch::WORST_MATCH if spec_platform.nil? || spec_platform == Gem::Platform::RUBY || user_platform == Gem::Platform::RUBY
40
-
41
- PlatformMatch.new(
42
- PlatformMatch.os_match(spec_platform, user_platform),
43
- PlatformMatch.cpu_match(spec_platform, user_platform),
44
- PlatformMatch.platform_version_match(spec_platform, user_platform)
45
- )
38
+
39
+ PlatformMatch.specificity_score(spec_platform, user_platform)
46
40
  end
47
41
  module_function :platform_specificity_match
48
42
 
49
43
  def select_best_platform_match(specs, platform)
50
- specs.select {|spec| spec.match_platform(platform) }.
51
- min_by {|spec| platform_specificity_match(spec.platform, platform) }
44
+ matching = specs.select {|spec| spec.match_platform(platform) }
45
+ exact = matching.select {|spec| spec.platform == platform }
46
+ return exact if exact.any?
47
+
48
+ sorted_matching = matching.sort_by {|spec| platform_specificity_match(spec.platform, platform) }
49
+ exemplary_spec = sorted_matching.first
50
+
51
+ sorted_matching.take_while{|spec| same_specificity(platform, spec, exemplary_spec) && same_deps(spec, exemplary_spec) }
52
52
  end
53
53
  module_function :select_best_platform_match
54
54
 
55
- PlatformMatch = Struct.new(:os_match, :cpu_match, :platform_version_match)
56
55
  class PlatformMatch
57
- def <=>(other)
58
- return nil unless other.is_a?(PlatformMatch)
56
+ def self.specificity_score(spec_platform, user_platform)
57
+ return -1 if spec_platform == user_platform
58
+ return 1_000_000 if spec_platform.nil? || spec_platform == Gem::Platform::RUBY || user_platform == Gem::Platform::RUBY
59
59
 
60
- m = os_match <=> other.os_match
61
- return m unless m.zero?
62
-
63
- m = cpu_match <=> other.cpu_match
64
- return m unless m.zero?
65
-
66
- m = platform_version_match <=> other.platform_version_match
67
- m
60
+ os_match(spec_platform, user_platform) +
61
+ cpu_match(spec_platform, user_platform) * 10 +
62
+ platform_version_match(spec_platform, user_platform) * 100
68
63
  end
69
64
 
70
- EXACT_MATCH = new(-1, -1, -1).freeze
71
- WORST_MATCH = new(1_000_000, 1_000_000, 1_000_000).freeze
72
-
73
65
  def self.os_match(spec_platform, user_platform)
74
66
  if spec_platform.os == user_platform.os
75
67
  0
@@ -100,5 +92,19 @@ module Bundler
100
92
  end
101
93
  end
102
94
  end
95
+
96
+ def same_specificity(platform, spec, exemplary_spec)
97
+ platform_specificity_match(spec.platform, platform) == platform_specificity_match(exemplary_spec.platform, platform)
98
+ end
99
+ module_function :same_specificity
100
+
101
+ def same_deps(spec, exemplary_spec)
102
+ same_runtime_deps = spec.dependencies.sort == exemplary_spec.dependencies.sort
103
+ return same_runtime_deps unless spec.is_a?(Gem::Specification) && exemplary_spec.is_a?(Gem::Specification)
104
+
105
+ same_metadata_deps = spec.required_ruby_version == exemplary_spec.required_ruby_version && spec.required_rubygems_version == exemplary_spec.required_rubygems_version
106
+ same_runtime_deps && same_metadata_deps
107
+ end
108
+ module_function :same_deps
103
109
  end
104
110
  end
@@ -4,7 +4,7 @@ require_relative "match_platform"
4
4
 
5
5
  module Bundler
6
6
  class LazySpecification
7
- Identifier = Struct.new(:name, :version, :source, :platform, :dependencies)
7
+ Identifier = Struct.new(:name, :version, :platform)
8
8
  class Identifier
9
9
  include Comparable
10
10
  def <=>(other)
@@ -108,7 +108,7 @@ module Bundler
108
108
  end
109
109
 
110
110
  def identifier
111
- @__identifier ||= Identifier.new(name, version, source, platform, dependencies)
111
+ @__identifier ||= Identifier.new(name, version, platform)
112
112
  end
113
113
 
114
114
  def git_version
@@ -131,17 +131,16 @@ module Bundler
131
131
  end
132
132
 
133
133
  #
134
- # Bundler 2.2.0 was the first version that records the full resolution
135
- # including platform specific gems in the lockfile, which means that if a
136
- # gem with RUBY platform is recorded, the RUBY platform version of the gem
137
- # should be installed. Previously bundler would record only generic versions
138
- # in the lockfile and then install the most specific platform variant if
139
- # available.
134
+ # For backwards compatibility with existing lockfiles, if the most specific
135
+ # locked platform is RUBY, we keep the previous behaviour of resolving the
136
+ # best platform variant at materiliazation time. For previous bundler
137
+ # versions (before 2.2.0) this was always the case (except when the lockfile
138
+ # only included non-ruby platforms), but we're also keeping this behaviour
139
+ # on newer bundlers unless users generate the lockfile from scratch or
140
+ # explicitly add a more specific platform.
140
141
  #
141
142
  def ruby_platform_materializes_to_ruby_platform?
142
- locked_bundler_version = Bundler.locked_bundler_version
143
-
144
- locked_bundler_version.nil? || Gem::Version.new(locked_bundler_version) >= Gem::Version.new("2.2.0")
143
+ !Bundler.most_specific_locked_platform?(Gem::Platform::RUBY)
145
144
  end
146
145
  end
147
146
  end
@@ -25,11 +25,15 @@ module Bundler
25
25
 
26
26
  def to_specs
27
27
  @activated_platforms.map do |p|
28
- next unless s = @specs[p]
29
- lazy_spec = LazySpecification.new(name, version, s.platform, source)
30
- lazy_spec.dependencies.replace s.dependencies
31
- lazy_spec
32
- end.compact.uniq
28
+ specs = @specs[p]
29
+ next unless specs.any?
30
+
31
+ specs.map do |s|
32
+ lazy_spec = LazySpecification.new(name, version, s.platform, source)
33
+ lazy_spec.dependencies.replace s.dependencies
34
+ lazy_spec
35
+ end
36
+ end.flatten.compact.uniq
33
37
  end
34
38
 
35
39
  def copy_for(platforms)
@@ -42,12 +46,8 @@ module Bundler
42
46
  copied_sg
43
47
  end
44
48
 
45
- def spec_for(platform)
46
- @specs[platform]
47
- end
48
-
49
49
  def for?(platform)
50
- !spec_for(platform).nil?
50
+ @specs[platform].any?
51
51
  end
52
52
 
53
53
  def to_s
@@ -58,7 +58,7 @@ module Bundler
58
58
  def dependencies_for_activated_platforms
59
59
  dependencies = @activated_platforms.map {|p| __dependencies[p] }
60
60
  metadata_dependencies = @activated_platforms.map do |platform|
61
- metadata_dependencies(@specs[platform], platform)
61
+ metadata_dependencies(@specs[platform].first, platform)
62
62
  end
63
63
  dependencies.concat(metadata_dependencies).flatten
64
64
  end
@@ -94,7 +94,8 @@ module Bundler
94
94
  def __dependencies
95
95
  @dependencies = Hash.new do |dependencies, platform|
96
96
  dependencies[platform] = []
97
- if spec = @specs[platform]
97
+ specs = @specs[platform]
98
+ if spec = specs.first
98
99
  spec.dependencies.each do |dep|
99
100
  next if dep.type == :development
100
101
  next if @ignores_bundler_dependencies && dep.name == "bundler".freeze
@@ -106,10 +107,7 @@ module Bundler
106
107
  end
107
108
 
108
109
  def metadata_dependencies(spec, platform)
109
- return [] unless spec
110
- # Only allow endpoint specifications since they won't hit the network to
111
- # fetch the full gemspec when calling required_ruby_version
112
- return [] if !spec.is_a?(EndpointSpecification) && !spec.is_a?(Gem::Specification)
110
+ return [] unless spec && spec.is_a?(Gem::Specification)
113
111
  dependencies = []
114
112
  if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
115
113
  dependencies << DepProxy.new(Gem::Dependency.new("Ruby\0", spec.required_ruby_version), platform)
@@ -110,11 +110,6 @@ module Bundler
110
110
  obj.to_s
111
111
  end
112
112
 
113
- def platforms
114
- return [Gem::Platform::RUBY] if Bundler.settings[:force_ruby_platform]
115
- Gem.platforms
116
- end
117
-
118
113
  def configuration
119
114
  require_relative "psyched_yaml"
120
115
  Gem.configuration
@@ -22,10 +22,11 @@ module Bundler
22
22
  break unless dep = deps.shift
23
23
  next if !handled.add?(dep) || skip.include?(dep.name)
24
24
 
25
- if spec = spec_for_dependency(dep, match_current_platform)
26
- specs << spec
25
+ specs_for_dep = spec_for_dependency(dep, match_current_platform)
26
+ if specs_for_dep.any?
27
+ specs += specs_for_dep
27
28
 
28
- spec.dependencies.each do |d|
29
+ specs_for_dep.first.dependencies.each do |d|
29
30
  next if d.type == :development
30
31
  d = DepProxy.new(d, dep.__platform) unless match_current_platform
31
32
  deps << d
@@ -184,11 +185,7 @@ module Bundler
184
185
  def spec_for_dependency(dep, match_current_platform)
185
186
  specs_for_platforms = lookup[dep.name]
186
187
  if match_current_platform
187
- Bundler.rubygems.platforms.reverse_each do |pl|
188
- match = GemHelpers.select_best_platform_match(specs_for_platforms, pl)
189
- return match if match
190
- end
191
- nil
188
+ GemHelpers.select_best_platform_match(specs_for_platforms, Bundler.local_platform)
192
189
  else
193
190
  GemHelpers.select_best_platform_match(specs_for_platforms, dep.__platform)
194
191
  end