diff options
author | Matt Brictson <matt@mattbrictson.com> | 2017-11-07 12:09:11 -0800 |
---|---|---|
committer | Matt Brictson <matt@mattbrictson.com> | 2017-11-08 07:29:12 -0800 |
commit | d4037909f473cbe6d5b41ba6465b651e6c58a914 (patch) | |
tree | 3c0292e613721d36d56a10f51bb1280a3abf0b27 /spec | |
parent | e0ee155508cc13500f0c3d4aafcd9ee5dd8a49c6 (diff) | |
download | bundler-d4037909f473cbe6d5b41ba6465b651e6c58a914.tar.gz |
Fix NoMethodError during `bundle update --group`
The `bundler` gem does not participate in the lockfile, but it can still
be included in the list of dependencies that are being updated by
`bundle update` if `--group` is specified.
For example, if a Gemfile contains `bundler-audit` (which depends on
`bundler`) in the `:development` group, then updating with the option
`--group=development` will naturally include `bundler` in the list of
gems to evaluate for updating.
The trouble is that since `bundler` is excluded from the lockfile,
searching the locked gems for a gemspec for bundler will return `nil`.
This caused the following error during `bundle update`:
NoMethodError: undefined method `version' for nil:NilClass
This commit solves this bug by skipping over gems (i.e `bundler`) that
are not in the lockfile when comparing gem versions at the conclusion of
the upgrade command.
Diffstat (limited to 'spec')
-rw-r--r-- | spec/commands/update_spec.rb | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/spec/commands/update_spec.rb b/spec/commands/update_spec.rb index a8283cf593..a2842f0998 100644 --- a/spec/commands/update_spec.rb +++ b/spec/commands/update_spec.rb @@ -195,6 +195,23 @@ RSpec.describe "bundle update" do expect(the_bundle).not_to include_gems "foo 2.0" end end + + context "when bundler itself is a transitive dependency" do + it "executes without error" do + install_gemfile <<-G + source "file://#{gem_repo1}" + gem "activesupport", :group => :development + gem "rack" + G + update_repo2 do + build_gem "activesupport", "3.0" + end + bundle "update --group development" + expect(the_bundle).to include_gems "activesupport 2.3.5" + expect(the_bundle).to include_gems "bundler #{Bundler::VERSION}" + expect(the_bundle).not_to include_gems "rack 1.2" + end + end end describe "in a frozen bundle" do |