From 0606c9fd824a03dfb0ff84eff3ff7beab021edab Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Thu, 5 Nov 2020 20:33:51 +0000 Subject: [PATCH] outdated/upgrade: fix upgrade alias edge case. If you're going to follow an alias to find the outdated formula then ensure that the latest one isn't already installed. Fixes https://github.com/Homebrew/homebrew-core/issues/63971 --- Library/Homebrew/cmd/outdated.rb | 2 +- Library/Homebrew/cmd/upgrade.rb | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/outdated.rb b/Library/Homebrew/cmd/outdated.rb index d5c5458ad9..623f434729 100644 --- a/Library/Homebrew/cmd/outdated.rb +++ b/Library/Homebrew/cmd/outdated.rb @@ -97,7 +97,7 @@ module Homebrew if verbose? outdated_kegs = f.outdated_kegs(fetch_head: args.fetch_HEAD?) - current_version = if f.alias_changed? + current_version = if f.alias_changed? && !f.latest_formula.latest_version_installed? latest = f.latest_formula "#{latest.name} (#{latest.pkg_version})" elsif f.head? && outdated_kegs.any? { |k| k.version.to_s == f.pkg_version.to_s } diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index c2ece9f42e..b7a53cbd40 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -137,7 +137,14 @@ module Homebrew pinned = outdated.select(&:pinned?) outdated -= pinned - formulae_to_install = outdated.map(&:latest_formula) + formulae_to_install = outdated.map do |f| + f_latest = f.latest_formula + if f_latest.latest_version_installed? + f + else + f_latest + end + end if !pinned.empty? && !args.ignore_pinned? ofail "Not upgrading #{pinned.count} pinned #{"package".pluralize(pinned.count)}:"