In Files
- rubygems/resolver.rb
- rubygems/resolver/activation_request.rb
- rubygems/resolver/api_set.rb
- rubygems/resolver/api_specification.rb
- rubygems/resolver/best_set.rb
- rubygems/resolver/composed_set.rb
- rubygems/resolver/conflict.rb
- rubygems/resolver/current_set.rb
- rubygems/resolver/dependency_request.rb
- rubygems/resolver/git_set.rb
- rubygems/resolver/git_specification.rb
- rubygems/resolver/index_set.rb
- rubygems/resolver/index_specification.rb
- rubygems/resolver/installed_specification.rb
- rubygems/resolver/installer_set.rb
- rubygems/resolver/local_specification.rb
- rubygems/resolver/lock_set.rb
- rubygems/resolver/lock_specification.rb
- rubygems/resolver/molinillo/lib/molinillo.rb
- rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb
- rubygems/resolver/molinillo/lib/molinillo/errors.rb
- rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb
- rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb
- rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb
- rubygems/resolver/molinillo/lib/molinillo/resolution.rb
- rubygems/resolver/molinillo/lib/molinillo/resolver.rb
- rubygems/resolver/molinillo/lib/molinillo/state.rb
- rubygems/resolver/requirement_list.rb
- rubygems/resolver/set.rb
- rubygems/resolver/source_set.rb
- rubygems/resolver/spec_specification.rb
- rubygems/resolver/specification.rb
- rubygems/resolver/stats.rb
- rubygems/resolver/vendor_set.rb
- rubygems/resolver/vendor_specification.rb
- rubygems/source.rb
- rubygems/test_case.rb
Parent
Namespace
- MODULE Gem::Resolver::Molinillo
- CLASS Gem::Resolver::APISet
- CLASS Gem::Resolver::APISpecification
- CLASS Gem::Resolver::ActivationRequest
- CLASS Gem::Resolver::BestSet
- CLASS Gem::Resolver::ComposedSet
- CLASS Gem::Resolver::Conflict
- CLASS Gem::Resolver::CurrentSet
- CLASS Gem::Resolver::DependencyRequest
- CLASS Gem::Resolver::GitSet
- CLASS Gem::Resolver::GitSpecification
- CLASS Gem::Resolver::IndexSet
- CLASS Gem::Resolver::IndexSpecification
- CLASS Gem::Resolver::InstalledSpecification
- CLASS Gem::Resolver::InstallerSet
- CLASS Gem::Resolver::LocalSpecification
- CLASS Gem::Resolver::LockSet
- CLASS Gem::Resolver::LockSpecification
- CLASS Gem::Resolver::RequirementList
- CLASS Gem::Resolver::Set
- CLASS Gem::Resolver::SourceSet
- CLASS Gem::Resolver::SpecSpecification
- CLASS Gem::Resolver::Specification
- CLASS Gem::Resolver::Stats
- CLASS Gem::Resolver::VendorSet
- CLASS Gem::Resolver::VendorSpecification
Methods
Class/Module Index
![show/hide quicksearch [+]](../images/find.png)
- Gem::AvailableSet
- Gem::BasicSpecification
- Gem::Command
- Gem::CommandLineError
- Gem::CommandManager
- Gem::Commands
- Gem::Commands::BuildCommand
- Gem::Commands::CertCommand
- Gem::Commands::CheckCommand
- Gem::Commands::CleanupCommand
- Gem::Commands::ContentsCommand
- Gem::Commands::DependencyCommand
- Gem::Commands::EnvironmentCommand
- Gem::Commands::FetchCommand
- Gem::Commands::GenerateIndexCommand
- Gem::Commands::HelpCommand
- Gem::Commands::InstallCommand
- Gem::Commands::ListCommand
- Gem::Commands::LockCommand
- Gem::Commands::MirrorCommand
- Gem::Commands::OpenCommand
- Gem::Commands::OutdatedCommand
- Gem::Commands::OwnerCommand
- Gem::Commands::PristineCommand
- Gem::Commands::PushCommand
- Gem::Commands::QueryCommand
- Gem::Commands::RdocCommand
- Gem::Commands::SearchCommand
- Gem::Commands::ServerCommand
- Gem::Commands::SetupCommand
- Gem::Commands::SourcesCommand
- Gem::Commands::SpecificationCommand
- Gem::Commands::StaleCommand
- Gem::Commands::UninstallCommand
- Gem::Commands::UnpackCommand
- Gem::Commands::UpdateCommand
- Gem::Commands::WhichCommand
- Gem::Commands::YankCommand
- Gem::ConfigFile
- Gem::ConflictError
- Gem::ConsoleUI
- Gem::DefaultUserInteraction
- Gem::Dependency
- Gem::DependencyError
- Gem::DependencyInstaller
- Gem::DependencyList
- Gem::DependencyRemovalException
- Gem::DependencyResolutionError
- Gem::Deprecate
- Gem::Doctor
- Gem::DocumentError
- Gem::EndOfYAMLException
- Gem::ErrorReason
- Gem::Exception
- Gem::Ext
- Gem::Ext::BuildError
- Gem::Ext::Builder
- Gem::Ext::CmakeBuilder
- Gem::Ext::ConfigureBuilder
- Gem::Ext::ExtConfBuilder
- Gem::Ext::RakeBuilder
- Gem::FakeFetcher
- Gem::FilePermissionError
- Gem::FormatException
- Gem::GemNotFoundException
- Gem::GemNotInHomeException
- Gem::GemRunner
- Gem::GemcutterUtilities
- Gem::ImpossibleDependenciesError
- Gem::Indexer
- Gem::InstallError
- Gem::InstallUpdateOptions
- Gem::Installer
- Gem::Installer::FakePackage
- Gem::InstallerTestCase
- Gem::InvalidSpecificationException
- Gem::Licenses
- Gem::List
- Gem::LoadError
- Gem::LocalRemoteOptions
- Gem::MockGemUi
- Gem::MockGemUi::InputEOFError
- Gem::MockGemUi::SystemExitException
- Gem::MockGemUi::TTY
- Gem::MockGemUi::TermError
- Gem::NameTuple
- Gem::NoAliasYAMLTree
- Gem::OperationNotSupportedError
- Gem::Package::DigestIO
- Gem::Package::Error
- Gem::Package::FormatError
- Gem::Package::NonSeekableIO
- Gem::Package::Old
- Gem::Package::PathError
- Gem::Package::TarHeader
- Gem::Package::TarInvalidError
- Gem::Package::TarReader
- Gem::Package::TarReader::Entry
- Gem::Package::TarReader::UnexpectedEOF
- Gem::Package::TarTestCase
- Gem::Package::TarWriter
- Gem::Package::TarWriter::BoundedStream
- Gem::Package::TarWriter::FileOverflow
- Gem::Package::TarWriter::RestrictedStream
- Gem::Package::TooLongFileName
- Gem::PackageTask
- Gem::PathSupport
- Gem::Platform
- Gem::PlatformMismatch
- Gem::RemoteError
- Gem::RemoteFetcher
- Gem::RemoteFetcher::FetchError
- Gem::RemoteFetcher::UnknownHostError
- Gem::RemoteInstallationCancelled
- Gem::RemoteInstallationSkipped
- Gem::RemoteSourceException
- Gem::Request::ConnectionPools
- Gem::Request::ConnectionPools::Net
- Gem::RequestSet
- Gem::RequestSet::GemDependencyAPI
- Gem::RequestSet::Lockfile
- Gem::RequestSet::Lockfile::ParseError
- Gem::RequestSet::Lockfile::Parser
- Gem::RequestSet::Lockfile::Tokenizer
- Gem::Requirement
- Gem::Requirement::BadRequirementError
- Gem::Resolver
- Gem::Resolver::APISet
- Gem::Resolver::APISpecification
- Gem::Resolver::ActivationRequest
- Gem::Resolver::BestSet
- Gem::Resolver::ComposedSet
- Gem::Resolver::Conflict
- Gem::Resolver::CurrentSet
- Gem::Resolver::DependencyRequest
- Gem::Resolver::GitSet
- Gem::Resolver::GitSpecification
- Gem::Resolver::IndexSet
- Gem::Resolver::IndexSpecification
- Gem::Resolver::InstalledSpecification
- Gem::Resolver::InstallerSet
- Gem::Resolver::LocalSpecification
- Gem::Resolver::LockSet
- Gem::Resolver::LockSpecification
- Gem::Resolver::Molinillo
- Gem::Resolver::Molinillo::CircularDependencyError
- Gem::Resolver::Molinillo::DependencyGraph
- Gem::Resolver::Molinillo::DependencyGraph::Vertex
- Gem::Resolver::Molinillo::DependencyState
- Gem::Resolver::Molinillo::NoSuchDependencyError
- Gem::Resolver::Molinillo::PossibilityState
- Gem::Resolver::Molinillo::ResolutionState
- Gem::Resolver::Molinillo::Resolver
- Gem::Resolver::Molinillo::Resolver::Resolution
- Gem::Resolver::Molinillo::ResolverError
- Gem::Resolver::Molinillo::SpecificationProvider
- Gem::Resolver::Molinillo::UI
- Gem::Resolver::Molinillo::VersionConflict
- Gem::Resolver::RequirementList
- Gem::Resolver::Set
- Gem::Resolver::SourceSet
- Gem::Resolver::SpecSpecification
- Gem::Resolver::Specification
- Gem::Resolver::Stats
- Gem::Resolver::VendorSet
- Gem::Resolver::VendorSpecification
- Gem::RubyVersionMismatch
- Gem::Security
- Gem::Security::Exception
- Gem::Security::Policy
- Gem::Security::Signer
- Gem::Security::TrustDir
- Gem::Server
- Gem::SilentUI
- Gem::Source
- Gem::Source::Git
- Gem::Source::Installed
- Gem::Source::Local
- Gem::Source::Lock
- Gem::Source::SpecificFile
- Gem::Source::Vendor
- Gem::SourceFetchProblem
- Gem::SourceList
- Gem::SpecFetcher
- Gem::SpecificGemNotFoundException
- Gem::Specification
- Gem::StreamUI
- Gem::StreamUI::SilentDownloadReporter
- Gem::StreamUI::SilentProgressReporter
- Gem::StreamUI::SimpleProgressReporter
- Gem::StreamUI::VerboseDownloadReporter
- Gem::StreamUI::VerboseProgressReporter
- Gem::StubSpecification
- Gem::SystemExitException
- Gem::TestCase
- Gem::TestCase::SpecFetcherSetup
- Gem::TestCase::StaticSet
- Gem::Text
- Gem::Uninstaller
- Gem::UnsatisfiableDependencyError
- Gem::UriFormatter
- Gem::UserInteraction
- Gem::Util
- Gem::Validator
- Gem::VerificationError
- Gem::Version
- Gem::VersionOption
- Kernel
- Object
- OpenSSL
- TempIO
- YAML::Syck
- YAML::Syck
Gem::Resolver
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.
Constants
- DEBUG_RESOLVER
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.
Attributes
Public Class Methods
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 65
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 93
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 105
def initialize needed, set = nil
@set = set || Gem::Resolver::IndexSet.new
@needed = needed
@development = false
@development_shallow = false
@ignore_dependencies = false
@missing = []
@skip_gems = {}
@soft_missing = false
@stats = Gem::Resolver::Stats.new
end
Public Instance Methods
# File rubygems/resolver.rb, line 254
def allow_missing?(dependency)
@missing << dependency
@soft_missing
end
# File rubygems/resolver.rb, line 240
def dependencies_for(specification)
return [] if @ignore_dependencies
spec = specification.spec
requests(spec, specification)
end
# File rubygems/resolver.rb, line 250
def name_for(dependency)
dependency.name
end
# File rubygems/resolver.rb, line 176
def output
@output ||= debug? ? $stdout : File.open(Gem::Util::NULL_DEVICE, 'w')
end
# File rubygems/resolver.rb, line 246
def requirement_satisfied_by?(requirement, activated, spec)
requirement.matches_spec? spec
end
Proceed with resolution! Returns an array of ActivationRequest objects.
# File rubygems/resolver.rb, line 189
def resolve
locking_dg = Molinillo::DependencyGraph.new
Molinillo::Resolver.new(self, self).resolve(@needed.map { |d| DependencyRequest.new d, nil }, locking_dg).tsort.map(&:payload).compact
rescue Molinillo::VersionConflict => e
conflict = e.conflicts.values.first
raise Gem::DependencyResolutionError, Conflict.new(conflict.requirement_trees.first.first, conflict.existing, conflict.requirement)
ensure
@output.close if @output and !debug?
end
# File rubygems/resolver.rb, line 228
def search_for(dependency)
possibles, all = find_possible(dependency)
if !@soft_missing && possibles.empty?
@missing << dependency
exc = Gem::UnsatisfiableDependencyError.new dependency, all
exc.errors = @set.errors
raise exc
end
possibles.sort_by { |s| [s.source, s.version, s.platform.to_s == Gem::Platform.local.to_s ? 1 : 0] }.
map { |s| ActivationRequest.new s, dependency, [] }
end