A Ruby versioning constraint solver implementing Semantic Versioning 2.0.0.
$ gem install solve
Create a new graph
graph = Solve::Graph.new
Add an artifact to the graph
Now add another artifact that has a dependency
graph.artifact("mysql", "1.2.4-alpha.1").depends("openssl", "~> 1.0.0")
Dependencies can be chained, too
And now solve the graph with some demands
Solve.it!(graph, [['nginx', '>= 0.100.0']])
Or, if you want a topologically sorted solution NOTE: This will raise Solve::Errors::UnsortableSolutionError if the solution contains a cycle (which can happen with ruby packages)
Solve.it!(graph, [['nginx', '>= 0.100.0']], sorted: true)
Selecting A Resolver
You can set the resolver by calling
Solve.engine= with the symbol
Solve.engine = :ruby Solve.engine = :gecode
The Ruby solver is installed and enabled by default. If you'd like to use the Gecode solver you can do so by installing the dep-selector gem or adding it to your Gemfile:
$ gem install dep_selector
Increasing the solver's timeout
By default the solver will wait 30 seconds before giving up on finding a solution. Under certain conditions a graph may be too complicated to solve within the alotted time. To increase the timeout you can set the "SOLVE_TIMEOUT" environment variable to the amount of seconds desired.
$ export SOLVE_TIMEOUT=60
This will set the timeout to 60 seconds instead of the default 30 seconds.