diff options
| author | Andrii Furmanets <furmanets.andriy@gmail.com> | 2026-04-30 18:46:44 +0300 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2026-05-08 04:32:50 +0000 |
| commit | 4658d6bd78bc742942b1408b571fdec17ef784a0 (patch) | |
| tree | 23b90d047dfa194c6b5ead27b12e6ad6c0d5e29d | |
| parent | 834a828f9b0ee5701697bedc7bc3ddaf345855cd (diff) | |
[ruby/rubygems] Fix bundle config gemfile unset behavior
https://github.com/ruby/rubygems/commit/38f87aa2bc
| -rw-r--r-- | lib/bundler/cli.rb | 20 | ||||
| -rw-r--r-- | spec/bundler/commands/config_spec.rb | 30 |
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 |
