summaryrefslogtreecommitdiff
path: root/lib/bundler/resolver_algorithm/sat_resolver.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bundler/resolver_algorithm/sat_resolver.rb')
-rw-r--r--lib/bundler/resolver_algorithm/sat_resolver.rb28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/bundler/resolver_algorithm/sat_resolver.rb b/lib/bundler/resolver_algorithm/sat_resolver.rb
new file mode 100644
index 0000000000..5de884c837
--- /dev/null
+++ b/lib/bundler/resolver_algorithm/sat_resolver.rb
@@ -0,0 +1,28 @@
+module Bundler
+ module ResolverAlgorithm
+ class SatResolver < Base
+ attr_reader :solver
+ def start(reqs)
+ activated = {}
+ @sat_variables = {}
+ @gems_size = Hash[reqs.map { |r| [r, gems_size(r)] }]
+ @solver = MiniSat::Solver.new
+ resolve(reqs, activated)
+ end
+
+ def resolve(reqs, activated, depth = 0)
+ reqs.each do |current|
+ matching_versions = search(current)
+ solver << build_cnf_graph(matching_versions)
+ end
+ end
+
+ private
+ def build_cnf_graph(matching_versions)
+ matching_versions.each do |dep|
+ @sat_variables[dep] = solver.new_var
+ end
+ end
+ end
+ end
+end