Update resolver

parent 81b6113b
...@@ -33,7 +33,7 @@ group :development do ...@@ -33,7 +33,7 @@ group :development do
cp_gem 'cocoapods-stats', 'cocoapods-stats' cp_gem 'cocoapods-stats', 'cocoapods-stats'
cp_gem 'cocoapods-trunk', 'cocoapods-trunk' cp_gem 'cocoapods-trunk', 'cocoapods-trunk'
cp_gem 'cocoapods-try', 'cocoapods-try' cp_gem 'cocoapods-try', 'cocoapods-try'
cp_gem 'molinillo', 'Molinillo' cp_gem 'molinillo', 'Molinillo', path: true
cp_gem 'nanaimo', 'Nanaimo' cp_gem 'nanaimo', 'Nanaimo'
cp_gem 'xcodeproj', 'Xcodeproj' cp_gem 'xcodeproj', 'Xcodeproj'
......
...@@ -15,13 +15,6 @@ GIT ...@@ -15,13 +15,6 @@ GIT
fuzzy_match (~> 2.0.4) fuzzy_match (~> 2.0.4)
nap (~> 1.0) nap (~> 1.0)
GIT
remote: https://github.com/CocoaPods/Molinillo.git
revision: c2f655cd697812574a8537cc7c9cf68a0c0357b3
branch: master
specs:
molinillo (0.5.7)
GIT GIT
remote: https://github.com/CocoaPods/Nanaimo.git remote: https://github.com/CocoaPods/Nanaimo.git
revision: c9b1cf5734523cf523497fd6de11f7240fd18944 revision: c9b1cf5734523cf523497fd6de11f7240fd18944
...@@ -99,6 +92,11 @@ GIT ...@@ -99,6 +92,11 @@ GIT
specs: specs:
json (1.7.7) json (1.7.7)
PATH
remote: ../Molinillo
specs:
molinillo (0.5.7)
PATH PATH
remote: . remote: .
specs: specs:
...@@ -293,4 +291,4 @@ DEPENDENCIES ...@@ -293,4 +291,4 @@ DEPENDENCIES
xcodeproj! xcodeproj!
BUNDLED WITH BUNDLED WITH
1.15.1 1.15.2
...@@ -179,21 +179,33 @@ module Pod ...@@ -179,21 +179,33 @@ module Pod
# @param [Specification] spec the specification in question. # @param [Specification] spec the specification in question.
# #
def requirement_satisfied_by?(requirement, activated, spec) def requirement_satisfied_by?(requirement, activated, spec)
existing_vertices = activated.vertices.values.select do |v| version = spec.version
Specification.root_name(v.name) == requirement.root_name return false unless requirement.requirement.satisfied_by?(version)
shared_possibility_versions, prerelease_requirement = possibility_versions_for_root_name(requirement, activated)
return false if !shared_possibility_versions.empty? && !shared_possibility_versions.include?(version)
return false if version.prerelease? && !prerelease_requirement
return false unless spec_is_platform_compatible?(activated, requirement, spec)
true
end end
existing = existing_vertices.map(&:payload).compact.first
requirement_satisfied = def possibility_versions_for_root_name(requirement, activated)
if existing prerelease_requirement = requirement.prerelease? || requirement.external_source
existing.version == spec.version && requirement.requirement.satisfied_by?(spec.version) existing = activated.vertices.values.flat_map do |vertex|
next unless vertex.payload
next unless Specification.root_name(vertex.name) == requirement.root_name
prerelease_requirement ||= vertex.requirements.any? { |r| r.prerelease? || r.external_source }
if vertex.payload.respond_to?(:possibilities)
vertex.payload.possibilities.map(&:version)
else else
requirement.requirement.satisfied_by? spec.version vertex.payload.version
end end
requirement_satisfied && !( end.compact
spec.version.prerelease? &&
existing_vertices.flat_map(&:requirements).none? { |r| r.prerelease? || r.external_source } [existing, prerelease_requirement]
) && spec_is_platform_compatible?(activated, requirement, spec)
end end
private :possibility_versions_for_root_name
# Sort dependencies so that the ones that are easiest to resolve are first. # Sort dependencies so that the ones that are easiest to resolve are first.
# Easiest to resolve is (usually) defined by: # Easiest to resolve is (usually) defined by:
...@@ -414,7 +426,7 @@ module Pod ...@@ -414,7 +426,7 @@ module Pod
'version requirement to your Podfile ' \ 'version requirement to your Podfile ' \
"(e.g. `pod '#{name}', '#{lockfile_reqs.map(&:requirement).join("', '")}'`) " \ "(e.g. `pod '#{name}', '#{lockfile_reqs.map(&:requirement).join("', '")}'`) " \
"or revert to a stable version by running `pod update #{name}`." "or revert to a stable version by running `pod update #{name}`."
elsif local_pod_parent && !specifications_for_dependency(conflict.requirement).empty? && !conflict.possibility elsif local_pod_parent && !specifications_for_dependency(conflict.requirement).empty? && !conflict.possibility && conflict.locked_requirement
# Conflict was caused by a requirement from a local dependency. # Conflict was caused by a requirement from a local dependency.
# Tell user to use `pod update`. # Tell user to use `pod update`.
message << "\n\nIt seems like you've changed the constraints of dependency `#{name}` " \ message << "\n\nIt seems like you've changed the constraints of dependency `#{name}` " \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment