Skip to content

Commit 4d83f37

Browse files
deivid-rodriguezmatzbot
authored andcommitted
[rubygems/rubygems] Reduce global state
ruby/rubygems@43c0c41c6b
1 parent ebf07f7 commit 4d83f37

File tree

5 files changed

+19
-25
lines changed

5 files changed

+19
-25
lines changed

lib/bundler.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -255,12 +255,6 @@ def locked_gems
255255
end
256256
end
257257

258-
def most_specific_locked_platform?(platform)
259-
return false unless defined?(@definition) && @definition
260-
261-
definition.most_specific_locked_platform == platform
262-
end
263-
264258
def ruby_scope
265259
"#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
266260
end

lib/bundler/definition.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def removed_specs
211211
end
212212

213213
def missing_specs
214-
resolve.materialize(requested_dependencies).missing_specs
214+
resolve.materialize(requested_dependencies, most_specific_locked_platform).missing_specs
215215
end
216216

217217
def missing_specs?
@@ -593,7 +593,7 @@ def materialize(dependencies)
593593
incorrect_spec = nil
594594

595595
specs = begin
596-
resolve.materialize(dependencies)
596+
resolve.materialize(dependencies, most_specific_locked_platform)
597597
rescue IncorrectLockfileDependencies => e
598598
spec = e.spec
599599
raise "Infinite loop while fixing lockfile dependencies" if incorrect_spec == spec
@@ -639,7 +639,7 @@ def materialize(dependencies)
639639
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
640640
sources.remote!
641641
reresolve_without(incomplete_specs)
642-
specs = resolve.materialize(dependencies)
642+
specs = resolve.materialize(dependencies, most_specific_locked_platform)
643643

644644
still_incomplete_specs = specs.incomplete_specs
645645

lib/bundler/gem_helpers.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ def select_best_platform_match(specs, platform, force_ruby: false, prefer_locked
6262
end
6363
module_function :select_best_platform_match
6464

65-
def select_best_local_platform_match(specs, force_ruby: false)
66-
select_best_platform_match(specs, local_platform, force_ruby: force_ruby).map(&:materialize_for_installation).compact
65+
def select_best_local_platform_match(specs, force_ruby: false, most_specific_locked_platform: nil)
66+
select_best_platform_match(specs, local_platform, force_ruby: force_ruby).map {|spec| spec.materialize_for_installation(most_specific_locked_platform) }.compact
6767
end
6868
module_function :select_best_local_platform_match
6969

lib/bundler/lazy_specification.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,16 @@ def to_lock
9999
out
100100
end
101101

102-
def materialize_for_installation
102+
def materialize_for_installation(most_specific_locked_platform = nil)
103103
source.local!
104104

105-
matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version])
105+
matching_specs = source.specs.search(use_exact_resolved_specifications?(most_specific_locked_platform) ? self : [name, version])
106106
return self if matching_specs.empty?
107107

108-
candidates = if use_exact_resolved_specifications?
108+
candidates = if use_exact_resolved_specifications?(most_specific_locked_platform)
109109
matching_specs
110110
else
111-
target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
111+
target_platform = ruby_platform_materializes_to_ruby_platform?(most_specific_locked_platform) ? platform : local_platform
112112

113113
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
114114

@@ -165,8 +165,8 @@ def force_ruby_platform!
165165

166166
private
167167

168-
def use_exact_resolved_specifications?
169-
@use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
168+
def use_exact_resolved_specifications?(most_specific_locked_platform)
169+
!source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?(most_specific_locked_platform)
170170
end
171171

172172
#
@@ -179,10 +179,10 @@ def use_exact_resolved_specifications?
179179
# on newer bundlers unless users generate the lockfile from scratch or
180180
# explicitly add a more specific platform.
181181
#
182-
def ruby_platform_materializes_to_ruby_platform?
182+
def ruby_platform_materializes_to_ruby_platform?(most_specific_locked_platform)
183183
generic_platform = generic_local_platform == Gem::Platform::JAVA ? Gem::Platform::JAVA : Gem::Platform::RUBY
184184

185-
!Bundler.most_specific_locked_platform?(generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
185+
(most_specific_locked_platform != generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
186186
end
187187
end
188188
end

lib/bundler/spec_set.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def initialize(specs, incomplete_specs = [])
1414
@incomplete_specs = incomplete_specs
1515
end
1616

17-
def for(dependencies, check = false, platforms = [nil])
17+
def for(dependencies, check = false, platforms = [nil], most_specific_locked_platform = nil)
1818
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
1919
deps = dependencies.product(platforms)
2020
specs = []
@@ -31,7 +31,7 @@ def for(dependencies, check = false, platforms = [nil])
3131

3232
handled[key] = true
3333

34-
specs_for_dep = specs_for_dependency(*dep)
34+
specs_for_dep = specs_for_dependency(*dep, most_specific_locked_platform)
3535
if specs_for_dep.any?
3636
specs.concat(specs_for_dep)
3737

@@ -130,8 +130,8 @@ def to_hash
130130
lookup.dup
131131
end
132132

133-
def materialize(deps)
134-
materialized = self.for(deps, true)
133+
def materialize(deps, most_specific_locked_platform = nil)
134+
materialized = self.for(deps, true, [nil], most_specific_locked_platform)
135135

136136
SpecSet.new(materialized, incomplete_specs)
137137
end
@@ -291,14 +291,14 @@ def tsort_each_node
291291
@specs.sort_by(&:name).each {|s| yield s }
292292
end
293293

294-
def specs_for_dependency(dep, platform)
294+
def specs_for_dependency(dep, platform, most_specific_locked_platform)
295295
specs_for_name = lookup[dep.name]
296296
return [] unless specs_for_name
297297

298298
if platform
299299
GemHelpers.select_best_platform_match(specs_for_name, platform, force_ruby: dep.force_ruby_platform)
300300
else
301-
GemHelpers.select_best_local_platform_match(specs_for_name, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
301+
GemHelpers.select_best_local_platform_match(specs_for_name, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform, most_specific_locked_platform: most_specific_locked_platform)
302302
end
303303
end
304304

0 commit comments

Comments
 (0)