diff options
author | André Arko <mail@arko.net> | 2015-05-16 14:33:24 -0700 |
---|---|---|
committer | André Arko <mail@arko.net> | 2015-05-16 14:33:24 -0700 |
commit | 724af3839ed20aa9a219229492cff760fac5837d (patch) | |
tree | 66db872319027b269b4e152436e222b5ac5ac22e | |
parent | 1fec5997520e04fb456f885b042f784257ff9486 (diff) | |
parent | 88d7cde22c51ab1b22448919d29cbc7a3962a424 (diff) | |
download | bundler-724af3839ed20aa9a219229492cff760fac5837d.tar.gz |
Merge pull request #3654 from bundler/seg-resolver-constrained
[Resolver] Modify sorting heuristic to check how constraining the req…
-rw-r--r-- | lib/bundler/resolver.rb | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 3cbe73979e..0673c2af54 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -190,7 +190,6 @@ module Bundler @base = base @resolver = Molinillo::Resolver.new(self, self) @search_for = {} - @prereleases_cache = Hash.new { |h,k| h[k] = k.prerelease? } @base_dg = Molinillo::DependencyGraph.new @base.each { |ls| @base_dg.add_root_vertex ls.name, Dependency.new(ls.name, ls.version) } end @@ -296,14 +295,23 @@ module Bundler name = name_for(dependency) [ activated.vertex_named(name).payload ? 0 : 1, - @prereleases_cache[dependency.requirement] ? 0 : 1, - dependency.requirements_list.size, + amount_constrained(dependency), conflicts[name] ? 0 : 1, activated.vertex_named(name).payload ? 0 : search_for(dependency).count, ] end end + def amount_constrained(dependency) + @amount_constrained ||= {} + @amount_constrained[dependency.name] ||= begin + base_dep = Dependency.new dependency.name, '>= 0.a' + all = search_for(DepProxy.new base_dep, dependency.__platform) + return 0 if all.empty? + search_for(dependency).size.to_f / all.size.to_f + end + end + def verify_gemfile_dependencies_are_found!(requirements) requirements.each do |requirement| next if requirement.name == 'bundler' |