summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrii Furmanets <furmanets.andriy@gmail.com>2026-04-30 18:46:44 +0300
committergit <svn-admin@ruby-lang.org>2026-05-08 04:32:50 +0000
commit4658d6bd78bc742942b1408b571fdec17ef784a0 (patch)
tree23b90d047dfa194c6b5ead27b12e6ad6c0d5e29d
parent834a828f9b0ee5701697bedc7bc3ddaf345855cd (diff)
[ruby/rubygems] Fix bundle config gemfile unset behavior
https://github.com/ruby/rubygems/commit/38f87aa2bc
-rw-r--r--lib/bundler/cli.rb20
-rw-r--r--spec/bundler/commands/config_spec.rb30
2 files changed, 42 insertions, 8 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb
index 9a0f756bcf..7a04f3da23 100644
--- a/lib/bundler/cli.rb
+++ b/lib/bundler/cli.rb
@@ -61,14 +61,18 @@ module Bundler
current_cmd = args.last[:current_command].name
- Bundler.configure_custom_gemfile(options[:gemfile])
-
- # lock --lockfile works differently than install --lockfile
- unless current_cmd == "lock"
- custom_lockfile = options[:lockfile] || ENV["BUNDLE_LOCKFILE"] || Bundler.settings[:lockfile]
- if custom_lockfile && !custom_lockfile.empty?
- Bundler::SharedHelpers.set_env "BUNDLE_LOCKFILE", File.expand_path(custom_lockfile)
- reset_settings = true
+ # `bundle config` manages stored settings, so avoid promoting settings
+ # like `gemfile` or `lockfile` to environment variables before it runs.
+ unless current_cmd == "config"
+ Bundler.configure_custom_gemfile(options[:gemfile])
+
+ # lock --lockfile works differently than install --lockfile
+ unless current_cmd == "lock"
+ custom_lockfile = options[:lockfile] || ENV["BUNDLE_LOCKFILE"] || Bundler.settings[:lockfile]
+ if custom_lockfile && !custom_lockfile.empty?
+ Bundler::SharedHelpers.set_env "BUNDLE_LOCKFILE", File.expand_path(custom_lockfile)
+ reset_settings = true
+ end
end
end
diff --git a/spec/bundler/commands/config_spec.rb b/spec/bundler/commands/config_spec.rb
index 954cae09d8..5cafbe3468 100644
--- a/spec/bundler/commands/config_spec.rb
+++ b/spec/bundler/commands/config_spec.rb
@@ -577,6 +577,36 @@ E
end
RSpec.describe "setting gemfile via config" do
+ context "when a default Gemfile exists" do
+ before do
+ gemfile <<-G
+ source "https://gem.repo1"
+ G
+
+ gemfile bundled_app("foo/bar_gemfile"), <<-G
+ source "https://gem.repo1"
+ G
+ end
+
+ it "reports the local gemfile setting without promoting it to the environment" do
+ bundle "config set gemfile foo/bar_gemfile"
+
+ bundle "config list"
+ expect(out).to include("Set for your local app (#{bundled_app(".bundle/config")}): \"foo/bar_gemfile\"")
+ expect(out).not_to include("Set via BUNDLE_GEMFILE")
+ end
+
+ it "unsets the local gemfile setting from the app config" do
+ bundle "config set gemfile foo/bar_gemfile"
+
+ bundle "config unset gemfile"
+ bundle "config get gemfile"
+
+ expect(out).to include("You have not configured a value for `gemfile`")
+ expect(File.read(bundled_app(".bundle/config"))).not_to include("BUNDLE_GEMFILE")
+ end
+ end
+
context "when only the non-default Gemfile exists" do
it "persists the gemfile location to .bundle/config" do
gemfile bundled_app("NotGemfile"), <<-G