From bdfaaf7940bc5dfe2577b9208520f02b03cd3a56 Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Wed, 26 Aug 2020 08:53:47 -0700 Subject: [PATCH 1/2] 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 87ac4d4c3312f..078203c003f30 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -124,10 +124,22 @@ def check_installed_dependents(args:) 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? From 24e7f55a4c046463b3f2b8ae2c0383a67897c20d Mon Sep 17 00:00:00 2001 From: Steve Peters Date: Sun, 30 Aug 2020 01:24:42 -0700 Subject: [PATCH 2/2] Create check_broken_dependents method --- Library/Homebrew/upgrade.rb | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 078203c003f30..ee7827a88422b 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -120,11 +120,8 @@ def upgrade_formula(f, args:) end private_class_method :upgrade_formula - def check_installed_dependents(args:) - installed_formulae = FormulaInstaller.installed.to_a - return if installed_formulae.empty? - - already_broken_dependents = CacheStoreDatabase.use(:linkage) do |db| + def check_broken_dependents(installed_formulae) + CacheStoreDatabase.use(:linkage) do |db| installed_formulae.flat_map(&:runtime_installed_formula_dependents) .uniq .select do |f| @@ -135,6 +132,13 @@ def check_installed_dependents(args:) .broken_library_linkage? end.compact end + end + + def check_installed_dependents(args:) + installed_formulae = FormulaInstaller.installed.to_a + return if installed_formulae.empty? + + already_broken_dependents = check_broken_dependents(installed_formulae) outdated_dependents = installed_formulae.flat_map(&:runtime_installed_formula_dependents) @@ -180,17 +184,7 @@ def check_installed_dependents(args:) # Assess the dependents tree again now we've upgraded. oh1 "Checking for dependents of upgraded formulae..." unless args.dry_run? - 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 + broken_dependents = check_broken_dependents(installed_formulae) if broken_dependents.blank? if args.dry_run? ohai "No currently broken dependents found!"