diff options
author | chrismo <chrismo@clabs.org> | 2016-06-21 21:16:39 -0500 |
---|---|---|
committer | chrismo <chrismo@clabs.org> | 2016-07-08 19:35:57 -0500 |
commit | 8cbe425e39ec0d710309993956dc37fe8abbb733 (patch) | |
tree | 7d109e4bdfef7d356ec73761b15e0a2151c592db /lib/bundler/resolver.rb | |
parent | cb2f8c8f210d5fa04a1ea897fb61df0213e064bc (diff) | |
download | bundler-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.rb | 42 |
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) |