diff options
author | Samuel Giddins <segiddins@segiddins.me> | 2016-06-05 19:27:45 -0500 |
---|---|---|
committer | Samuel Giddins <segiddins@segiddins.me> | 2016-06-05 19:27:45 -0500 |
commit | aca91b66ed0c1e7644d35202c5930ff3475a1fff (patch) | |
tree | df709859a67ed17aaef8211cae30ba523f56e610 | |
parent | 1c48ad2d1b77e470d1127c6494c68fdf1b129031 (diff) | |
download | bundler-seg-ruby-rubygems-version-fail-fast.tar.gz |
[Installer] Fail fast when required_ruby(gems)?_version doesn't matchseg-ruby-rubygems-version-fail-fast
-rw-r--r-- | lib/bundler/installer.rb | 19 | ||||
-rw-r--r-- | spec/install/gems/resolving_spec.rb | 23 |
2 files changed, 39 insertions, 3 deletions
diff --git a/lib/bundler/installer.rb b/lib/bundler/installer.rb index fcf68928e4..c19b2edbc0 100644 --- a/lib/bundler/installer.rb +++ b/lib/bundler/installer.rb @@ -68,6 +68,7 @@ module Bundler end resolve_if_need(options) + ensure_specs_are_compatible! install(options) lock unless Bundler.settings[:frozen] @@ -156,6 +157,24 @@ module Bundler install_in_parallel jobs, options[:standalone], force end + def ensure_specs_are_compatible! + system_ruby = Bundler::RubyVersion.system + rubygems_version = Gem::Version.create(Gem::VERSION) + specs.each do |spec| + if required_ruby_version = spec.required_ruby_version + unless required_ruby_version.satisfied_by?(system_ruby.gem_version) + raise InstallError, "#{spec.full_name} requires ruby version #{required_ruby_version}, " \ + "which is incompatible with the current version, #{system_ruby}" + end + end + next unless required_rubygems_version = spec.required_rubygems_version + unless required_rubygems_version.satisfied_by?(rubygems_version) + raise InstallError, "#{spec.full_name} requires rubygems version #{required_rubygems_version}, " \ + "which is incompatible with the current version, #{rubygems_version}" + end + end + end + def can_install_in_parallel? if Bundler.rubygems.provides?(">= 2.1.0") true diff --git a/spec/install/gems/resolving_spec.rb b/spec/install/gems/resolving_spec.rb index 49d160063d..74acf9a918 100644 --- a/spec/install/gems/resolving_spec.rb +++ b/spec/install/gems/resolving_spec.rb @@ -105,20 +105,37 @@ describe "bundle install with gem sources" do describe "when some gems require a different version of ruby" do it "does not try to install those gems" do - pending "waiting for a rubygems index that includes ruby version" - update_repo gem_repo1 do build_gem "require_ruby" do |s| s.required_ruby_version = "> 9000" end end - install_gemfile <<-G + install_gemfile <<-G, :artifice => "compact_index" source "file://#{gem_repo1}" gem 'require_ruby' G expect(out).to_not include("Gem::InstallError: require_ruby requires Ruby version > 9000") + expect(out).to include("require_ruby-1.0 requires ruby version > 9000, which is incompatible with the current version, #{Bundler::RubyVersion.system}") + end + end + + describe "when some gems require a different version of rubygems" do + it "does not try to install those gems" do + update_repo gem_repo1 do + build_gem "require_rubygems" do |s| + s.required_rubygems_version = "> 9000" + end + end + + install_gemfile <<-G, :artifice => "compact_index" + source "file://#{gem_repo1}" + gem 'require_rubygems' + G + + expect(out).to_not include("Gem::InstallError: require_rubygems requires RubyGems version > 9000") + expect(out).to include("require_rubygems-1.0 requires rubygems version > 9000, which is incompatible with the current version, #{Gem::VERSION}") end end end |