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
- 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