From e4933e1d93218ff740ea6ac552b309eca03ba5d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Thu, 29 May 2025 20:49:29 +0200 Subject: [PATCH] [rubygems/rubygems] Fix `bundle update --bundler` when restarts disabled There's no reason why we should not update bundler as requested, even if restarts are disabled. https://github.com/rubygems/rubygems/commit/e59acd2a0d --- lib/bundler/self_manager.rb | 11 ++--------- spec/bundler/commands/update_spec.rb | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/lib/bundler/self_manager.rb b/lib/bundler/self_manager.rb index 53eb2c1859..72bcb264ab 100644 --- a/lib/bundler/self_manager.rb +++ b/lib/bundler/self_manager.rb @@ -31,8 +31,6 @@ module Bundler end def update_bundler_and_restart_with_it_if_needed(target) - return unless autoswitching_applies? - spec = resolve_update_version_from(target) return unless spec @@ -40,7 +38,7 @@ module Bundler Bundler.ui.info "Updating bundler to #{version}." - install(spec) + install(spec) unless installed?(version) restart_with(version) end @@ -102,8 +100,7 @@ module Bundler def needs_switching?(restart_version) autoswitching_applies? && released?(restart_version) && - !running?(restart_version) && - !updating? + !running?(restart_version) end def autoswitching_applies? @@ -172,10 +169,6 @@ module Bundler $PROGRAM_NAME != "-e" end - def updating? - "update".start_with?(ARGV.first || " ") && ARGV[1..-1].any? {|a| a.start_with?("--bundler") } - end - def installed?(restart_version) Bundler.configure diff --git a/spec/bundler/commands/update_spec.rb b/spec/bundler/commands/update_spec.rb index faf9db32d4..d4fdc56037 100644 --- a/spec/bundler/commands/update_spec.rb +++ b/spec/bundler/commands/update_spec.rb @@ -1684,6 +1684,24 @@ RSpec.describe "bundle update --bundler" do expect(err).to eq("The `bundle update --bundler` target version (999.999.999) does not exist") end + it "errors if the explicit target version does not exist, even if auto switching is disabled" do + pristine_system_gems "bundler-9.9.9" + + build_repo4 do + build_gem "myrack", "1.0" + end + + install_gemfile <<-G + source "https://gem.repo4" + gem "myrack" + G + + bundle :update, bundler: "999.999.999", raise_on_error: false, env: { "BUNDLER_VERSION" => "9.9.9" } + + expect(last_command).to be_failure + expect(err).to eq("The `bundle update --bundler` target version (999.999.999) does not exist") + end + it "allows updating to development versions if already installed locally" do system_gems "bundler-9.9.9"