aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllen Marie Dash <the@smallest.dog>2022-03-31 23:44:31 +0000
committergit <svn-admin@ruby-lang.org>2022-06-01 19:01:18 +0900
commit1177665e6224f8491db82997c8774e9485564e41 (patch)
tree6459500e449bf862d3d34c33531a4e22c747fd1a
parent0a6b9924bd1b45bd8ad29b1eb3c8a65835f5864d (diff)
downloadruby-1177665e6224f8491db82997c8774e9485564e41.tar.gz
[rubygems/rubygems] 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. https://github.com/rubygems/rubygems/commit/aa0794d6a9
-rw-r--r--lib/bundler/injector.rb4
-rw-r--r--spec/bundler/commands/remove_spec.rb30
2 files changed, 34 insertions, 0 deletions
diff --git a/lib/bundler/injector.rb b/lib/bundler/injector.rb
index 42f837a919..f6550abe88 100644
--- a/lib/bundler/injector.rb
+++ b/lib/bundler/injector.rb
@@ -72,6 +72,10 @@ module Bundler
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/spec/bundler/commands/remove_spec.rb b/spec/bundler/commands/remove_spec.rb
index 95d6e75e9f..ceba6c5ede 100644
--- a/spec/bundler/commands/remove_spec.rb
+++ b/spec/bundler/commands/remove_spec.rb
@@ -13,6 +13,36 @@ RSpec.describe "bundle remove" do
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