diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2016-08-10 13:28:43 -0500 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2016-08-23 11:50:35 -0500 |
commit | b37eef329ca8d30fa3b7df6438d5aff6c1991264 (patch) | |
tree | c2dfd5b576b1582447c0cfc7b51ec494a86216e0 | |
parent | 59ff9347f79db306898e7457c21a5375cb5e799f (diff) | |
download | bundler-b37eef329ca8d30fa3b7df6438d5aff6c1991264.tar.gz |
Fix resolving when the gemfile has a ruby patch requirement
-rw-r--r-- | lib/bundler/definition.rb | 20 | ||||
-rw-r--r-- | lib/bundler/ruby_version.rb | 5 | ||||
-rw-r--r-- | spec/install/gems/resolving_spec.rb | 2 |
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) |