# File lib/bundler/resolver.rb, line 39
    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
        # Order gems in order of dependencies. Every gem's dependency is at
        # a smaller index in the array.
        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