From 4b36a0eee5ede55bbf1947d89c9c2bd3b7793211 Mon Sep 17 00:00:00 2001 From: Carlo Cabrera <30379873+carlocab@users.noreply.github.com> Date: Sat, 27 Nov 2021 15:51:57 +0800 Subject: [PATCH] upgrade: don't upgrade unbottled dependents of upgraded formulae We upgrade dependents of upgraded formulae to make sure that an upgrade doesn't break anything. However, this reasoning applies only when a dependent is bottled, since attempting a source build is just as likely to break things, if not more. I've opted not to restrict this to, say, users only on outdated versions of macOS in order to cleanly handle other cases where this change should also apply: Linux, or current versions of macOS in a non-default prefix. --- Library/Homebrew/upgrade.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index eec5ba567b..19fb0e14e6 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -276,6 +276,20 @@ module Homebrew installed_formulae.flat_map(&:runtime_installed_formula_dependents) .uniq .select(&:outdated?) + + # Ensure we never attempt a source build for outdated dependents of upgraded formulae. + outdated_dependents, skipped_dependents = outdated_dependents.partition do |dependent| + dependent.bottled? && dependent.deps.all?(&:bottled?) + end + + if skipped_dependents.present? + opoo <<~EOS + The following dependents of upgraded formulae are outdated but will not + be upgraded: + #{skipped_dependents * "\n "} + EOS + end + return if outdated_dependents.blank? && already_broken_dependents.blank? outdated_dependents -= installed_formulae if dry_run