Given a set of Gem::Dependency objects as
needed and a way to query the set of available specs via
set, calculates a set of ActivationRequest objects which
indicate all the specs that should be activated to meet the all the
requirements.
If the DEBUG_RESOLVER environment variable is set then debugging mode is enabled for the resolver. This will display information about the state of the resolver while a set of dependencies is being resolved.
Combines sets into a ComposedSet that allows specification
lookup in a uniform manner. If one of the sets is itself a ComposedSet its sets are flattened
into the result ComposedSet.
# File rubygems/resolver.rb, line 69
def self.compose_sets *sets
sets.compact!
sets = sets.map do |set|
case set
when Gem::Resolver::BestSet then
set
when Gem::Resolver::ComposedSet then
set.sets
else
set
end
end.flatten
case sets.length
when 0 then
raise ArgumentError, 'one set in the composition must be non-nil'
when 1 then
sets.first
else
Gem::Resolver::ComposedSet.new(*sets)
end
end
Creates a Resolver that queries only against
the already installed gems for the needed dependencies.
# File rubygems/resolver.rb, line 97
def self.for_current_gems needed
new needed, Gem::Resolver::CurrentSet.new
end
Create Resolver object which will resolve the
tree starting with needed Dependency objects.
set is an object that provides where to look for
specifications to satisfy the Dependencies. This defaults to IndexSet, which will query rubygems.org.
# File rubygems/resolver.rb, line 109
def initialize needed, set = nil
@set = set || Gem::Resolver::IndexSet.new
@needed = needed
@conflicts = []
@development = false
@development_shallow = false
@ignore_dependencies = false
@missing = []
@skip_gems = {}
@soft_missing = false
@stats = Gem::Resolver::Stats.new
end
Proceed with resolution! Returns an array of ActivationRequest objects.
# File rubygems/resolver.rb, line 182
def resolve
@conflicts = []
needed = Gem::Resolver::RequirementList.new
@needed.reverse_each do |n|
request = Gem::Resolver::DependencyRequest.new n, nil
needed.add request
@stats.requirement!
end
@stats.record_requirements needed
res = resolve_for needed, nil
raise Gem::DependencyResolutionError, res if
res.kind_of? Gem::Resolver::Conflict
res.to_a
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.