We compare UnwindDetails when choosing which state to unwind to. If two options have the same state_index we prefer the one most removed from a requirement that caused the conflict. Both options would unwind to the same state, but a `grandparent` option will filter out fewer of its possibilities after doing so - where a state is both a `parent` and a `grandparent` to requirements that have caused a conflict this is the correct behaviour. @param [UnwindDetail] other UnwindDetail to be compared @return [Integer] integer specifying ordering
# File bundler/vendor/molinillo/lib/molinillo/resolution.rb, line 83 def <=>(other) if state_index > other.state_index 1 elsif state_index == other.state_index reversed_requirement_tree_index <=> other.reversed_requirement_tree_index else -1 end end
@return [Array] array of all the requirements that led to the need for
this unwind
# File bundler/vendor/molinillo/lib/molinillo/resolution.rb, line 126 def all_requirements @all_requirements ||= requirement_trees.flatten(1) end
@return [Integer] index of state requirement in reversed requirement tree
(the conflicting requirement itself will be at position 0)
# File bundler/vendor/molinillo/lib/molinillo/resolution.rb, line 95 def reversed_requirement_tree_index @reversed_requirement_tree_index ||= if state_requirement requirement_tree.reverse.index(state_requirement) else 999_999 end end
@return [Array] array of sub-dependencies to avoid when choosing a
new possibility for the state we've unwound to. Only relevant for non-primary unwinds
# File bundler/vendor/molinillo/lib/molinillo/resolution.rb, line 116 def sub_dependencies_to_avoid @requirements_to_avoid ||= requirement_trees.map do |tree| index = tree.index(state_requirement) tree[index + 1] if index end.compact end
@return [Boolean] where the requirement of the state we’re unwinding
to directly caused the conflict. Note: in this case, it is impossible for the state we're unwinding to to be a parent of any of the other conflicting requirements (or we would have circularity)
# File bundler/vendor/molinillo/lib/molinillo/resolution.rb, line 109 def unwinding_to_primary_requirement? requirement_tree.last == state_requirement end