From aa0794d6a9385e6f4bb18cd943be9e54b853d70c Mon Sep 17 00:00:00 2001 From: Ellen Marie Dash Date: Thu, 31 Mar 2022 23:44:31 +0000 Subject: [PATCH] Fix `bundle remove` by invalidating cached `Bundle.defintion`. Prior to this commit, `bundle add GEM_NAME` updated the lockfile, but `bundle remove GEM_NAME` left GEM_NAME in the lockfile. By invalidating the cached `Bundle.definition`, the existing code handles that without a problem. --- bundler/lib/bundler/injector.rb | 4 ++++ bundler/spec/commands/remove_spec.rb | 30 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/bundler/lib/bundler/injector.rb b/bundler/lib/bundler/injector.rb index 42f837a919c1..f6550abe88f2 100644 --- a/bundler/lib/bundler/injector.rb +++ b/bundler/lib/bundler/injector.rb @@ -72,6 +72,10 @@ def remove(gemfile_path, lockfile_path) deps.each {|dep| Bundler.ui.confirm "#{SharedHelpers.pretty_dependency(dep, false)} was removed." } end + + # Invalidate the cached Bundler.definition. + # This prevents e.g. `bundle remove ...` from using outdated information. + Bundler.reset_paths! end private diff --git a/bundler/spec/commands/remove_spec.rb b/bundler/spec/commands/remove_spec.rb index 95d6e75e9fc2..ceba6c5edebc 100644 --- a/bundler/spec/commands/remove_spec.rb +++ b/bundler/spec/commands/remove_spec.rb @@ -13,6 +13,36 @@ end end + context "after 'bundle install' is run" do + describe "running 'bundle remove GEM_NAME'" do + it "removes it from the lockfile" do + rack_dep = <<~L + + DEPENDENCIES + rack + + L + + gemfile <<-G + source "#{file_uri_for(gem_repo1)}" + + gem "rack" + G + + bundle "install" + + expect(lockfile).to include(rack_dep) + + bundle "remove rack" + + expect(gemfile).to eq <<~G + source "#{file_uri_for(gem_repo1)}" + G + expect(lockfile).to_not include(rack_dep) + end + end + end + context "when --install flag is specified", :bundler => "< 3" do it "removes gems from .bundle" do gemfile <<-G