summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2015-10-01 23:44:14 -0500
committerSamuel Giddins <segiddins@segiddins.me>2015-10-01 23:44:14 -0500
commite36a75bc40ce5dfb49cb4d8bdcb5b5afc66137f4 (patch)
tree2e24e2f7971990ee78f4dd8d5cbdbd0f1e5236b7
parent84811218d9bdddec6b792da6b7cf4d44fa70d223 (diff)
downloadbundler-e36a75bc40ce5dfb49cb4d8bdcb5b5afc66137f4.tar.gz
[Resolver] Resolve for a given ruby version
-rw-r--r--lib/bundler/definition.rb2
-rw-r--r--lib/bundler/index.rb1
-rw-r--r--lib/bundler/resolver.rb21
-rw-r--r--lib/bundler/source/path.rb2
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
# <GemBundle>,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