mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
[rubygems/rubygems] Reduce global state
https://github.com/rubygems/rubygems/commit/43c0c41c6b
This commit is contained in:
parent
ebf07f7a9c
commit
4d83f37ff7
@ -255,12 +255,6 @@ module Bundler
|
||||
end
|
||||
end
|
||||
|
||||
def most_specific_locked_platform?(platform)
|
||||
return false unless defined?(@definition) && @definition
|
||||
|
||||
definition.most_specific_locked_platform == platform
|
||||
end
|
||||
|
||||
def ruby_scope
|
||||
"#{Bundler.rubygems.ruby_engine}/#{RbConfig::CONFIG["ruby_version"]}"
|
||||
end
|
||||
|
||||
@ -211,7 +211,7 @@ module Bundler
|
||||
end
|
||||
|
||||
def missing_specs
|
||||
resolve.materialize(requested_dependencies).missing_specs
|
||||
resolve.materialize(requested_dependencies, most_specific_locked_platform).missing_specs
|
||||
end
|
||||
|
||||
def missing_specs?
|
||||
@ -593,7 +593,7 @@ module Bundler
|
||||
incorrect_spec = nil
|
||||
|
||||
specs = begin
|
||||
resolve.materialize(dependencies)
|
||||
resolve.materialize(dependencies, most_specific_locked_platform)
|
||||
rescue IncorrectLockfileDependencies => e
|
||||
spec = e.spec
|
||||
raise "Infinite loop while fixing lockfile dependencies" if incorrect_spec == spec
|
||||
@ -639,7 +639,7 @@ module Bundler
|
||||
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
|
||||
sources.remote!
|
||||
reresolve_without(incomplete_specs)
|
||||
specs = resolve.materialize(dependencies)
|
||||
specs = resolve.materialize(dependencies, most_specific_locked_platform)
|
||||
|
||||
still_incomplete_specs = specs.incomplete_specs
|
||||
|
||||
|
||||
@ -62,8 +62,8 @@ module Bundler
|
||||
end
|
||||
module_function :select_best_platform_match
|
||||
|
||||
def select_best_local_platform_match(specs, force_ruby: false)
|
||||
select_best_platform_match(specs, local_platform, force_ruby: force_ruby).map(&:materialize_for_installation).compact
|
||||
def select_best_local_platform_match(specs, force_ruby: false, most_specific_locked_platform: nil)
|
||||
select_best_platform_match(specs, local_platform, force_ruby: force_ruby).map {|spec| spec.materialize_for_installation(most_specific_locked_platform) }.compact
|
||||
end
|
||||
module_function :select_best_local_platform_match
|
||||
|
||||
|
||||
@ -99,16 +99,16 @@ module Bundler
|
||||
out
|
||||
end
|
||||
|
||||
def materialize_for_installation
|
||||
def materialize_for_installation(most_specific_locked_platform = nil)
|
||||
source.local!
|
||||
|
||||
matching_specs = source.specs.search(use_exact_resolved_specifications? ? self : [name, version])
|
||||
matching_specs = source.specs.search(use_exact_resolved_specifications?(most_specific_locked_platform) ? self : [name, version])
|
||||
return self if matching_specs.empty?
|
||||
|
||||
candidates = if use_exact_resolved_specifications?
|
||||
candidates = if use_exact_resolved_specifications?(most_specific_locked_platform)
|
||||
matching_specs
|
||||
else
|
||||
target_platform = ruby_platform_materializes_to_ruby_platform? ? platform : local_platform
|
||||
target_platform = ruby_platform_materializes_to_ruby_platform?(most_specific_locked_platform) ? platform : local_platform
|
||||
|
||||
installable_candidates = GemHelpers.select_best_platform_match(matching_specs, target_platform)
|
||||
|
||||
@ -165,8 +165,8 @@ module Bundler
|
||||
|
||||
private
|
||||
|
||||
def use_exact_resolved_specifications?
|
||||
@use_exact_resolved_specifications ||= !source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?
|
||||
def use_exact_resolved_specifications?(most_specific_locked_platform)
|
||||
!source.is_a?(Source::Path) && ruby_platform_materializes_to_ruby_platform?(most_specific_locked_platform)
|
||||
end
|
||||
|
||||
#
|
||||
@ -179,10 +179,10 @@ module Bundler
|
||||
# on newer bundlers unless users generate the lockfile from scratch or
|
||||
# explicitly add a more specific platform.
|
||||
#
|
||||
def ruby_platform_materializes_to_ruby_platform?
|
||||
def ruby_platform_materializes_to_ruby_platform?(most_specific_locked_platform)
|
||||
generic_platform = generic_local_platform == Gem::Platform::JAVA ? Gem::Platform::JAVA : Gem::Platform::RUBY
|
||||
|
||||
!Bundler.most_specific_locked_platform?(generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
|
||||
(most_specific_locked_platform != generic_platform) || force_ruby_platform || Bundler.settings[:force_ruby_platform]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -14,7 +14,7 @@ module Bundler
|
||||
@incomplete_specs = incomplete_specs
|
||||
end
|
||||
|
||||
def for(dependencies, check = false, platforms = [nil])
|
||||
def for(dependencies, check = false, platforms = [nil], most_specific_locked_platform = nil)
|
||||
handled = ["bundler"].product(platforms).map {|k| [k, true] }.to_h
|
||||
deps = dependencies.product(platforms)
|
||||
specs = []
|
||||
@ -31,7 +31,7 @@ module Bundler
|
||||
|
||||
handled[key] = true
|
||||
|
||||
specs_for_dep = specs_for_dependency(*dep)
|
||||
specs_for_dep = specs_for_dependency(*dep, most_specific_locked_platform)
|
||||
if specs_for_dep.any?
|
||||
specs.concat(specs_for_dep)
|
||||
|
||||
@ -130,8 +130,8 @@ module Bundler
|
||||
lookup.dup
|
||||
end
|
||||
|
||||
def materialize(deps)
|
||||
materialized = self.for(deps, true)
|
||||
def materialize(deps, most_specific_locked_platform = nil)
|
||||
materialized = self.for(deps, true, [nil], most_specific_locked_platform)
|
||||
|
||||
SpecSet.new(materialized, incomplete_specs)
|
||||
end
|
||||
@ -291,14 +291,14 @@ module Bundler
|
||||
@specs.sort_by(&:name).each {|s| yield s }
|
||||
end
|
||||
|
||||
def specs_for_dependency(dep, platform)
|
||||
def specs_for_dependency(dep, platform, most_specific_locked_platform)
|
||||
specs_for_name = lookup[dep.name]
|
||||
return [] unless specs_for_name
|
||||
|
||||
if platform
|
||||
GemHelpers.select_best_platform_match(specs_for_name, platform, force_ruby: dep.force_ruby_platform)
|
||||
else
|
||||
GemHelpers.select_best_local_platform_match(specs_for_name, force_ruby: dep.force_ruby_platform || dep.default_force_ruby_platform)
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user