From bdfaaf7940bc5dfe2577b9208520f02b03cd3a56 Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Wed, 26 Aug 2020 08:53:47 -0700 Subject: [PATCH] upgrade: check for already broken dependents After upgrading a formula, it currently checks for broken dependents after upgrading any outdated dependents. If there are no outdated dependents, it exits early and doesn't check for broken dependents. This adds an earlier check for already broken dependents so they can be fixed even if there are no outdated dependents. --- Library/Homebrew/upgrade.rb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 87ac4d4c33..078203c003 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -124,10 +124,22 @@ module Homebrew installed_formulae = FormulaInstaller.installed.to_a return if installed_formulae.empty? + already_broken_dependents = CacheStoreDatabase.use(:linkage) do |db| + installed_formulae.flat_map(&:runtime_installed_formula_dependents) + .uniq + .select do |f| + keg = f.opt_or_installed_prefix_keg + next unless keg + + LinkageChecker.new(keg, cache_db: db) + .broken_library_linkage? + end.compact + end + outdated_dependents = installed_formulae.flat_map(&:runtime_installed_formula_dependents) .select(&:outdated?) - return if outdated_dependents.blank? + return if outdated_dependents.blank? && already_broken_dependents.blank? outdated_dependents -= installed_formulae if args.dry_run?