Merge pull request #20446 from Homebrew/copilot/fix-20427

Fix `brew upgrade` not linking newer versions when upgrade interrupted
This commit is contained in:
Mike McQuaid 2025-08-15 18:34:36 +00:00 committed by GitHub
commit 0d4f3419ac
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 1 deletions

View File

@ -1681,7 +1681,10 @@ class Formula
# don't consider this keg current if there's a newer formula available
next if follow_installed_alias? && new_formula_available?
# this keg is the current version of the formula, so it's not outdated
# this keg is the current version of the formula, but only consider it current
# if it's actually linked - an unlinked current version means we're outdated
next if !keg.optlinked? && !keg.linked? && !pinned?
current_version = true
break
end

View File

@ -18,6 +18,18 @@ RSpec.describe Homebrew::Cmd::UpgradeCmd do
expect(HOMEBREW_CELLAR/"testball/0.0.1").not_to exist
end
it "links newer version when upgrade was interrupted", :integration_test do
setup_test_formula "testball"
(HOMEBREW_CELLAR/"testball/0.1/foo").mkpath
expect { brew "upgrade" }.to be_a_success
expect(HOMEBREW_CELLAR/"testball/0.1").to be_a_directory
expect(HOMEBREW_PREFIX/"opt/testball").to be_a_symlink
expect(HOMEBREW_PREFIX/"var/homebrew/linked/testball").to be_a_symlink
end
it "upgrades with asking for user prompts", :integration_test do
setup_test_formula "testball"
(HOMEBREW_CELLAR/"testball/0.0.1/foo").mkpath

View File

@ -1364,6 +1364,10 @@ RSpec.describe Formula do
def setup_tab_for_prefix(prefix, options = {})
prefix.mkpath
keg = Keg.new(prefix)
keg.optlink
tab = Tab.empty
tab.tabfile = prefix/AbstractTab::FILENAME
tab.source["path"] = options[:path].to_s if options[:path]
@ -1396,6 +1400,12 @@ RSpec.describe Formula do
expect(f.outdated_kegs).not_to be_empty
end
example "outdated unlinked tap installed" do
setup_tab_for_prefix(same_prefix)
Keg.new(same_prefix).remove_opt_record
expect(f.outdated_kegs).not_to be_empty
end
example "outdated follow alias and alias unchanged" do
f.follow_installed_alias = true
f.build = setup_tab_for_prefix(same_prefix, path: alias_path)