summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-05-15 22:27:18 -0500
committerSamuel Giddins <segiddins@segiddins.me>2016-06-02 16:51:13 -0500
commitcfab22c4b21aa4190c7debdd12ff69ba0dcfb893 (patch)
tree4f2d21d2300509fcfbf698702d0d9e92d84865db
parent246529fa5ef802058f7cf74adbf2342b89a71a59 (diff)
downloadbundler-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.rb16
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