def self.resolve(requirements, sources)
source_requirements = {}
requirements.each do |r|
next unless r.source
source_requirements[r.name] = r.source
end
resolver = new(sources, source_requirements)
result = catch(:success) do
resolver.resolve(requirements, {})
output = resolver.errors.inject("") do |o, (conflict, (origin, requirement))|
o << " Conflict on: #{conflict.inspect}:\n"
o << " * #{conflict} (#{origin.version}) activated by #{origin.required_by.first}\n"
o << " * #{requirement} required by #{requirement.required_by.first}\n"
o << " All possible versions of origin requirements conflict."
end
raise VersionConflict, "No compatible versions could be found for required dependencies:\n #{output}"
nil
end
if result
ordered = []
result.values.each do |spec1|
spec1.no_bundle = true if source_requirements[spec1.name] == SystemGemSource.instance
index = nil
place = ordered.detect do |spec2|
spec1.dependencies.any? { |d| d.name == spec2.name }
end
place ?
ordered.insert(ordered.index(place), spec1) :
ordered << spec1
end
ordered.reverse
end
end