lib/bundler/definition.rb in bundler-2.4.3 vs lib/bundler/definition.rb in bundler-2.4.4
- old
+ new
@@ -157,17 +157,10 @@
@remote = false
sources.local_only!
resolve
end
- def resolve_prefering_local!
- @prefer_local = true
- @remote = true
- sources.remote!
- resolve
- end
-
def resolve_with_cache!
sources.cached!
resolve
end
@@ -175,10 +168,27 @@
@remote = true
sources.remote!
resolve
end
+ def resolution_mode=(options)
+ if options["local"]
+ @remote = false
+ else
+ @remote = true
+ @prefer_local = options["prefer-local"]
+ end
+ end
+
+ def setup_sources_for_resolve
+ if @remote == false
+ sources.cached!
+ else
+ sources.remote!
+ end
+ end
+
# For given dependency list returns a SpecSet with Gemspec of all the required
# dependencies.
# 1. The method first resolves the dependencies specified in Gemfile
# 2. After that it tries and fetches gemspec of resolved dependencies
#
@@ -471,35 +481,23 @@
end
private
def resolver
- @resolver ||= begin
- last_resolve = converge_locked_specs
- remove_ruby_from_platforms_if_necessary!(current_dependencies)
- Resolver.new(source_requirements, last_resolve, gem_version_promoter, additional_base_requirements_for_resolve(last_resolve))
- end
+ @resolver ||= Resolver.new(resolution_packages, gem_version_promoter)
end
def expanded_dependencies
@expanded_dependencies ||= dependencies + metadata_dependencies
end
def resolution_packages
@resolution_packages ||= begin
- packages = Hash.new do |h, k|
- h[k] = Resolver::Package.new(k, @platforms, @originally_locked_specs, @unlock[:gems])
- end
-
- expanded_dependencies.each do |dep|
- name = dep.name
- platforms = dep.gem_platforms(@platforms)
-
- packages[name] = Resolver::Package.new(name, platforms, @originally_locked_specs, @unlock[:gems], :dependency => dep)
- end
-
- packages
+ last_resolve = converge_locked_specs
+ remove_ruby_from_platforms_if_necessary!(current_dependencies)
+ packages = Resolver::Base.new(source_requirements, expanded_dependencies, last_resolve, @platforms, :locked_specs => @originally_locked_specs, :unlock => @unlock[:gems], :prerelease => gem_version_promoter.pre?)
+ additional_base_requirements_for_resolve(packages, last_resolve)
end
end
def filter_specs(specs, deps)
SpecSet.new(specs).for(deps, false, platforms)
@@ -529,17 +527,19 @@
incomplete_specs = specs.incomplete_specs
loop do
break if incomplete_specs.empty?
Bundler.ui.debug("The lockfile does not have all gems needed for the current platform though, Bundler will still re-resolve dependencies")
- @resolve = start_resolution(:exclude_specs => incomplete_specs)
+ setup_sources_for_resolve
+ resolution_packages.delete(incomplete_specs)
+ @resolve = start_resolution
specs = resolve.materialize(dependencies)
still_incomplete_specs = specs.incomplete_specs
if still_incomplete_specs == incomplete_specs
- package = resolution_packages[incomplete_specs.first.name]
+ package = resolution_packages.get_package(incomplete_specs.first.name)
resolver.raise_not_found! package
end
incomplete_specs = still_incomplete_specs
end
@@ -548,12 +548,12 @@
specs["bundler"] = bundler
specs
end
- def start_resolution(exclude_specs: [])
- result = resolver.start(expanded_dependencies, resolution_packages, :exclude_specs => exclude_specs)
+ def start_resolution
+ result = resolver.start(expanded_dependencies)
SpecSet.new(SpecSet.new(result).for(dependencies, false, @platforms))
end
def precompute_source_requirements_for_indirect_dependencies?
@@ -883,14 +883,15 @@
proposed = proposed.gsub(pattern, "\n").gsub(whitespace_cleanup, "\n\n").strip
end
current == proposed
end
- def additional_base_requirements_for_resolve(last_resolve)
- return [] unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
- converge_specs(@originally_locked_specs - last_resolve).map do |locked_spec|
- Dependency.new(locked_spec.name, ">= #{locked_spec.version}")
- end.uniq
+ def additional_base_requirements_for_resolve(resolution_packages, last_resolve)
+ return resolution_packages unless @locked_gems && unlocking? && !sources.expired_sources?(@locked_gems.sources)
+ converge_specs(@originally_locked_specs - last_resolve).each do |locked_spec|
+ resolution_packages.base_requirements[locked_spec.name] = Gem::Requirement.new(">= #{locked_spec.version}")
+ end
+ resolution_packages
end
def remove_ruby_from_platforms_if_necessary!(dependencies)
return if Bundler.frozen_bundle? ||
Bundler.local_platform == Gem::Platform::RUBY ||