diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2016-05-15 22:27:18 -0500 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2016-06-02 16:51:13 -0500 |
commit | cfab22c4b21aa4190c7debdd12ff69ba0dcfb893 (patch) | |
tree | 4f2d21d2300509fcfbf698702d0d9e92d84865db | |
parent | 246529fa5ef802058f7cf74adbf2342b89a71a59 (diff) | |
download | bundler-cfab22c4b21aa4190c7debdd12ff69ba0dcfb893.tar.gz |
[Resolver] Improve calculating amount_constrained
1) changing to searching by name means getting the list is just a hash lookup
2) we care more about the absolute amount constrained than the relative
3) when there's only one spec, that's just as good as there being none
-rw-r--r-- | lib/bundler/resolver.rb | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 48f0d468b6..0c9b324203 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -252,7 +252,7 @@ module Bundler platform = dependency.__platform dependency = dependency.dep unless dependency.is_a? Gem::Dependency search = @search_for[dependency] ||= begin - index = @source_requirements[dependency.name] || @index + index = index_for(dependency) results = index.search(dependency, @base[dependency.name]) if vertex = @base_dg.vertex_named(dependency.name) locked_requirement = vertex.payload.requirement @@ -276,6 +276,10 @@ module Bundler search.select {|sg| sg.for?(platform, @ruby_version) }.each {|sg| sg.activate_platform(platform) } end + def index_for(dependency) + @source_requirements[dependency.name] || @index + end + def name_for(dependency) dependency.name end @@ -314,14 +318,12 @@ module Bundler if (base = @base[dependency.name]) && !base.empty? dependency.requirement.satisfied_by?(base.first.version) ? 0 : 1 else - base_dep = Dependency.new dependency.name, ">= 0.a" - all = search_for(DepProxy.new base_dep, dependency.__platform).size.to_f - if all.zero? - 0 - elsif (search = search_for(dependency).size.to_f) == all && all == 1 + all = index_for(dependency).search(dependency.name).size + if all <= 1 0 else - search / all + search = search_for(dependency).size + all - search end end end |