summaryrefslogtreecommitdiff
path: root/lib/bundler/resolver.rb
diff options
context:
space:
mode:
authorchrismo <chrismo@clabs.org>2016-06-21 21:16:39 -0500
committerchrismo <chrismo@clabs.org>2016-07-08 19:35:57 -0500
commit8cbe425e39ec0d710309993956dc37fe8abbb733 (patch)
tree7d109e4bdfef7d356ec73761b15e0a2151c592db /lib/bundler/resolver.rb
parentcb2f8c8f210d5fa04a1ea897fb61df0213e064bc (diff)
downloadbundler-8cbe425e39ec0d710309993956dc37fe8abbb733.tar.gz
Moved GemVersionPromoter inside search_for cache.
In the process I was able to simplify some of the code inside GemVersionPromoter dealing with SpecGroups. I also attempted to implement the :major behavior into GemVersionPromoter as that would eliminate the logic to skip it in `#search_for`, however I ran into some test failures that I need to investigate further, though unit specs are working so far.
Diffstat (limited to 'lib/bundler/resolver.rb')
-rw-r--r--lib/bundler/resolver.rb42
1 files changed, 24 insertions, 18 deletions
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index 1b4e5a1eb3..eb564f5857 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -250,28 +250,34 @@ module Bundler
if vertex = @base_dg.vertex_named(dependency.name)
locked_requirement = vertex.payload.requirement
end
- if results.any?
- nested = []
- results.each do |spec|
- version, specs = nested.last
- if version == spec.version
- specs << spec
- else
- nested << [spec.version, [spec]]
+ spec_groups = begin
+ if results.any?
+ nested = []
+ results.each do |spec|
+ version, specs = nested.last
+ if version == spec.version
+ specs << spec
+ else
+ nested << [spec.version, [spec]]
+ end
end
+ nested.reduce([]) do |groups, (version, specs)|
+ next groups if locked_requirement && !locked_requirement.satisfied_by?(version)
+ groups << SpecGroup.new(specs)
+ end
+ else
+ []
end
- nested.reduce([]) do |groups, (version, specs)|
- next groups if locked_requirement && !locked_requirement.satisfied_by?(version)
- groups << SpecGroup.new(specs)
- end
- else
- []
end
+ # MODO: ideally trying to get GVP to sort by major. but some test cases aren't showing consistent order
+ # by default. (so we don't have to have this conditional here)
+ if @gem_version_promoter.level != :major
+ @gem_version_promoter.sort_versions(dependency, spec_groups)
+ else
+ spec_groups
+ end # .tap {|sg| STDERR.puts "sg>> #{sg.inspect}" }
end
- platform_results = search.select {|sg| sg.for?(platform, @ruby_version) }.each {|sg| sg.activate_platform!(platform) }
- return platform_results if @gem_version_promoter.level == :major # default behavior
- # MODO: put this inside the cache
- @gem_version_promoter.sort_versions(dependency, platform_results)
+ search.select {|sg| sg.for?(platform, @ruby_version) }.each {|sg| sg.activate_platform!(platform) }
end
def index_for(dependency)