summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Giddins <segiddins@segiddins.me>2016-08-10 13:28:43 -0500
committerSamuel Giddins <segiddins@segiddins.me>2016-08-23 11:50:35 -0500
commitb37eef329ca8d30fa3b7df6438d5aff6c1991264 (patch)
treec2dfd5b576b1582447c0cfc7b51ec494a86216e0
parent59ff9347f79db306898e7457c21a5375cb5e799f (diff)
downloadbundler-b37eef329ca8d30fa3b7df6438d5aff6c1991264.tar.gz
Fix resolving when the gemfile has a ruby patch requirement
-rw-r--r--lib/bundler/definition.rb20
-rw-r--r--lib/bundler/ruby_version.rb5
-rw-r--r--spec/install/gems/resolving_spec.rb2
3 files changed, 22 insertions, 5 deletions
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index 480a9e2b8d..b3bb0dc1ae 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -261,7 +261,7 @@ module Bundler
dependency_names -= pinned_spec_names(source.specs)
dependency_names.concat(source.unmet_deps).uniq!
end
- idx << Gem::Specification.new("ruby\0", RubyVersion.system.gem_version)
+ idx << Gem::Specification.new("ruby\0", RubyVersion.system.to_gem_version_with_patchlevel)
idx << Gem::Specification.new("rubygems\0", Gem::VERSION)
end
end
@@ -742,9 +742,21 @@ module Bundler
# the metadata dependencies here
def expanded_dependencies
@expanded_dependencies ||= begin
- ruby_versions = RubyVersion.system.versions
- ruby_versions += @ruby_version.versions if @ruby_version
- ruby_versions += locked_ruby_version_object.versions if locked_ruby_version_object && !@unlock[:ruby]
+ ruby_versions = []
+ add_ruby_versions = proc do |ruby_version|
+ break unless ruby_version
+ if ruby_version.patchlevel
+ ruby_versions << ruby_version.to_gem_version_with_patchlevel
+ else
+ ruby_versions += ruby_version.versions.map {|v| "~> #{v}.0" }
+ end
+ end
+ add_ruby_versions.call(@ruby_version)
+ if ruby_versions.empty? || !@ruby_version.exact?
+ add_ruby_versions.call(RubyVersion.system)
+ add_ruby_versions.call(locked_ruby_version_object) unless @unlock[:ruby]
+ end
+
metadata_dependencies = [
Dependency.new("ruby\0", ruby_versions),
Dependency.new("rubygems\0", Gem::VERSION),
diff --git a/lib/bundler/ruby_version.rb b/lib/bundler/ruby_version.rb
index 9321f94c23..8c050c6d31 100644
--- a/lib/bundler/ruby_version.rb
+++ b/lib/bundler/ruby_version.rb
@@ -128,6 +128,11 @@ module Bundler
end
end
+ def exact?
+ return @exact if defined?(@exact)
+ @exact = versions.all? {|v| Gem::Requirement.create(v).exact? }
+ end
+
private
def matches?(requirements, version)
diff --git a/spec/install/gems/resolving_spec.rb b/spec/install/gems/resolving_spec.rb
index 5939a2f875..98ebd8e11b 100644
--- a/spec/install/gems/resolving_spec.rb
+++ b/spec/install/gems/resolving_spec.rb
@@ -140,7 +140,7 @@ describe "bundle install with install-time dependencies" do
Resolving dependencies...
Bundler could not find compatible versions for gem "ruby\0":
In Gemfile:
- ruby\0 (= 2.3.1)
+ ruby\0 (~> #{RUBY_VERSION}.0)
require_ruby was resolved to 1.0, which depends on
ruby\0 (> 9000)