From e36a75bc40ce5dfb49cb4d8bdcb5b5afc66137f4 Mon Sep 17 00:00:00 2001 From: Samuel Giddins Date: Thu, 1 Oct 2015 23:44:14 -0500 Subject: [Resolver] Resolve for a given ruby version --- lib/bundler/definition.rb | 2 +- lib/bundler/index.rb | 1 + lib/bundler/resolver.rb | 21 ++++++++++++++------- lib/bundler/source/path.rb | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index d1849e484a..cb527de739 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -196,7 +196,7 @@ module Bundler last_resolve else # Run a resolve against the locally available gems - last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve) + last_resolve.merge Resolver.resolve(expanded_dependencies, index, source_requirements, last_resolve, ruby_version.version) end end end diff --git a/lib/bundler/index.rb b/lib/bundler/index.rb index d3753f0c66..77ef4b85eb 100644 --- a/lib/bundler/index.rb +++ b/lib/bundler/index.rb @@ -79,6 +79,7 @@ module Bundler when Gem::Specification, RemoteSpecification, LazySpecification, EndpointSpecification then search_by_spec(query) when String then specs_by_name(query) when Gem::Dependency then search_by_dependency(query, base) + when DepProxy then search_by_dependency(query.dep, base) else raise "You can't search for a #{query.inspect}." end diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb index 439f7d4962..cf3bdd333f 100644 --- a/lib/bundler/resolver.rb +++ b/lib/bundler/resolver.rb @@ -108,7 +108,7 @@ module Bundler def activate_platform(platform) unless @activated.include?(platform) - if for?(platform) + if for?(platform, nil) @activated << platform return __dependencies[platform] || [] end @@ -128,8 +128,14 @@ module Bundler @source ||= first.source end - def for?(platform) - @specs[platform] + def for?(platform, required_ruby_version) + if spec = @specs[platform] + if required_ruby_version && spec_required_ruby_version = spec.required_ruby_version + spec_required_ruby_version.satisfied_by?(required_ruby_version) + else + true + end + end end def to_s @@ -173,14 +179,14 @@ module Bundler # ==== Returns # ,nil:: If the list of dependencies can be resolved, a # collection of gemspecs is returned. Otherwise, nil is returned. - def self.resolve(requirements, index, source_requirements = {}, base = []) + def self.resolve(requirements, index, source_requirements = {}, base = [], ruby_version = nil) base = SpecSet.new(base) unless base.is_a?(SpecSet) - resolver = new(index, source_requirements, base) + resolver = new(index, source_requirements, base, ruby_version) result = resolver.start(requirements) SpecSet.new(result) end - def initialize(index, source_requirements, base) + def initialize(index, source_requirements, base, ruby_version) @index = index @source_requirements = source_requirements @base = base @@ -188,6 +194,7 @@ module Bundler @search_for = {} @base_dg = Molinillo::DependencyGraph.new @base.each {|ls| @base_dg.add_vertex(ls.name, Dependency.new(ls.name, ls.version), true) } + @ruby_version = Gem::Version.create(ruby_version) if ruby_version end def start(requirements) @@ -267,7 +274,7 @@ module Bundler [] end end - search.select {|sg| sg.for?(platform) }.each {|sg| sg.activate_platform(platform) } + search.select {|sg| sg.for?(platform, @ruby_version) }.each {|sg| sg.activate_platform(platform) } end def name_for(dependency) diff --git a/lib/bundler/source/path.rb b/lib/bundler/source/path.rb index d47fe0dea6..292412044c 100644 --- a/lib/bundler/source/path.rb +++ b/lib/bundler/source/path.rb @@ -49,7 +49,7 @@ module Bundler end def to_s - "source at #{@path}" + "source at `#{@path}`" end def hash -- cgit v1.2.1