Update resolver

parent 81b6113b
......@@ -33,7 +33,7 @@ group :development do
cp_gem 'cocoapods-stats', 'cocoapods-stats'
cp_gem 'cocoapods-trunk', 'cocoapods-trunk'
cp_gem 'cocoapods-try', 'cocoapods-try'
cp_gem 'molinillo', 'Molinillo'
cp_gem 'molinillo', 'Molinillo', path: true
cp_gem 'nanaimo', 'Nanaimo'
cp_gem 'xcodeproj', 'Xcodeproj'
......
......@@ -15,13 +15,6 @@ GIT
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
GIT
remote: https://github.com/CocoaPods/Molinillo.git
revision: c2f655cd697812574a8537cc7c9cf68a0c0357b3
branch: master
specs:
molinillo (0.5.7)
GIT
remote: https://github.com/CocoaPods/Nanaimo.git
revision: c9b1cf5734523cf523497fd6de11f7240fd18944
......@@ -99,6 +92,11 @@ GIT
specs:
json (1.7.7)
PATH
remote: ../Molinillo
specs:
molinillo (0.5.7)
PATH
remote: .
specs:
......@@ -293,4 +291,4 @@ DEPENDENCIES
xcodeproj!
BUNDLED WITH
1.15.1
1.15.2
......@@ -179,21 +179,33 @@ module Pod
# @param [Specification] spec the specification in question.
#
def requirement_satisfied_by?(requirement, activated, spec)
existing_vertices = activated.vertices.values.select do |v|
Specification.root_name(v.name) == requirement.root_name
version = spec.version
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
existing = existing_vertices.map(&:payload).compact.first
requirement_satisfied =
if existing
existing.version == spec.version && requirement.requirement.satisfied_by?(spec.version)
def possibility_versions_for_root_name(requirement, activated)
prerelease_requirement = requirement.prerelease? || requirement.external_source
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
requirement.requirement.satisfied_by? spec.version
vertex.payload.version
end
requirement_satisfied && !(
spec.version.prerelease? &&
existing_vertices.flat_map(&:requirements).none? { |r| r.prerelease? || r.external_source }
) && spec_is_platform_compatible?(activated, requirement, spec)
end.compact
[existing, prerelease_requirement]
end
private :possibility_versions_for_root_name
# Sort dependencies so that the ones that are easiest to resolve are first.
# Easiest to resolve is (usually) defined by:
......@@ -414,7 +426,7 @@ module Pod
'version requirement to your Podfile ' \
"(e.g. `pod '#{name}', '#{lockfile_reqs.map(&:requirement).join("', '")}'`) " \
"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.
# Tell user to use `pod update`.
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