A specific resolution from a given {Resolver}

Constants

A conflict that the resolution process encountered @attr [Object] requirement the requirement that immediately led to the conflict @attr [{String,Nil=>}] requirements the requirements that caused the conflict @attr [Object, nil] existing the existing spec that was in conflict with

the {#possibility}

@attr [Object] possibility the spec that was unable to be activated due

to a conflict

@attr [Object] locked_requirement the relevant locking requirement. @attr [Array<Array<Object>>] requirement_trees the different requirement

trees that led to every requirement for the conflicting name.

@attr [{String=>Object}] activated_by_name the already-activated specs.

Attributes

@return [SpecificationProvider] the provider that knows about

dependencies, requirements, specifications, versions, etc.

@return [UI] the UI that knows how to communicate feedback about the

resolution process back to the user
Read

@return [DependencyGraph] the base dependency graph to which

dependencies should be 'locked'

@return [Array] the dependencies that were explicitly required

Read & Write

@return [Integer] the number of resolver iterations in between calls to

{#resolver_ui}'s {UI#indicate_progress} method
Read & Write

@return [Time] the time at which resolution began

Read & Write

@return [Array<ResolutionState>] the stack of states for the resolution

Class Methods

Initializes a new resolution. @param [SpecificationProvider] specification_provider

see {#specification_provider}

@param [UI] resolver_ui see {#resolver_ui} @param [Array] requested see {#original_requested} @param [DependencyGraph] base see {#base}

Instance Methods

Add the current {#possibility} to the dependency graph of the current {#state} @return [void]

Attempts to activate the current {#possibility} @return [void]

Attempts to activate the current {#possibility} (given that it has already been activated) @return [void]

Attempts to activate the current {#possibility} (given that it hasn’t already been activated) @return [void]

Attempts to swp the current {#possibility} with the already-activated spec with the given name @return [Boolean] Whether the possibility was swapped into {#activated}

@return [Conflict] a {Conflict} that reflects the failure to activate

the {#possibility} in conjunction with the current {#state}

Calls the {#resolver_ui}‘s {UI#debug} method @param [Integer] depth the depth of the {#states} stack @param [Proc] block a block that yields a {#to_s} @return [void]

Ends the resolution process @return [void]

@return [ResolutionState] the state whose ‘requirement` is the given

`requirement`.

Ensures there are no orphaned successors to the given {vertex}. @param [DependencyGraph::Vertex] vertex the vertex to fix up. @return [void]

Pushes a new {DependencyState}. If the {#specification_provider} says to {SpecificationProvider#allow_missing?} that particular requirement, and there are no possibilities for that requirement, then ‘state` is not pushed, and the node in {#activated} is removed, and we continue resolving the remaining requirements. @param [DependencyState] state @return [void]

Indicates progress roughly once every second @return [void]

Creates the initial state for the resolution, based upon the {#requested} dependencies @return [DependencyState] the initial state for the resolution

@param [String] requirement_name the spec name to search for @return [Object] the locked spec named ‘requirement_name`, if one

is found on {#base}

@return [Boolean] whether the current spec is satisfied as a new possibility.

@return [Object] the requirement that led to ‘requirement` being added

to the list of requirements.

@return [Object] the current possibility that the resolution is trying

to activate

Processes the topmost available {RequirementState} on the stack @return [void]

Pushes a new {DependencyState} that encapsulates both existing and new requirements @param [Array] new_requirements @return [void]

Requires the dependencies that the recently activated spec has @param [Object] activated_spec the specification that has just been

activated

@return [void]

@return [Object] the requirement that led to a version of a possibility

with the given name being activated.

@return [Array<Object>] the list of requirements that led to

`requirement` being required.

@return [Array<Array<Object>>] The different requirement

trees that led to every requirement for the current spec.

Resolves the {#original_requested} dependencies into a full dependency

graph

@raise [ResolverError] if successful resolution is impossible @return [DependencyGraph] the dependency graph of successfully resolved

dependencies

Sets up the resolution process @return [void]

@return [RequirementState] the current state the resolution is

operating upon

@return [Boolean] whether or not the given state has any possibilities

left.

@return [Integer] The index to which the resolution should unwind in the

case of conflict.

Unwinds the states stack because a conflict has been encountered @return [void]