diff options
Diffstat (limited to 'lib/bundler/resolver_algorithm/sat_resolver.rb')
-rw-r--r-- | lib/bundler/resolver_algorithm/sat_resolver.rb | 28 |
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 |