class Bundler::PubGrub::VersionSolver
Attributes
logger[R]
solution[R]
source[R]
Public Class Methods
new(source:, root: Package.root, logger: Bundler::PubGrub.logger)
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb, line 12 def initialize(source:, root: Package.root, logger: Bundler::PubGrub.logger) @logger = logger @source = source # { package => [incompatibility, ...]} @incompatibilities = Hash.new do |h, k| h[k] = [] end @seen_incompatibilities = {} @solution = PartialSolution.new add_incompatibility Incompatibility.new([ Term.new(VersionConstraint.any(root), false) ], cause: :root) propagate(root) end
Public Instance Methods
solve()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb, line 57 def solve work until solved? solution.decisions end
Also aliased as: result
solved?()
click to toggle source
# File bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb, line 33 def solved? solution.unsatisfied.empty? end
work()
click to toggle source
Returns true if there is more work to be done, false otherwise
# File bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb, line 38 def work return false if solved? next_package = choose_package_version propagate(next_package) if solved? logger.info { "Solution found after #{solution.attempted_solutions} attempts:" } solution.decisions.each do |package, version| next if Package.root?(package) logger.info { "* #{package} #{version}" } end false else true end end