From 15e8852128bfe0da12c02d105fabccbed3758b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Fri, 10 Sep 2021 08:31:53 -0700 Subject: [PATCH] upgrade: add install_formula helper method --- Library/Homebrew/install.rb | 28 ++++++---------------------- Library/Homebrew/upgrade.rb | 30 +++++++++++++++++++----------- 2 files changed, 25 insertions(+), 33 deletions(-) diff --git a/Library/Homebrew/install.rb b/Library/Homebrew/install.rb index 191ad6f0b5..5c563b4e46 100644 --- a/Library/Homebrew/install.rb +++ b/Library/Homebrew/install.rb @@ -212,7 +212,10 @@ module Homebrew elsif f.linked? message = "#{f.name} #{f.linked_version} is already installed" if f.outdated? && !head - return true unless Homebrew::EnvConfig.no_install_upgrade? + unless Homebrew::EnvConfig.no_install_upgrade? + puts "#{message} but outdated" + return true + end onoe <<~EOS #{message} @@ -315,28 +318,9 @@ module Homebrew f.print_tap_action - if f.linked? && f.outdated? && !f.head? && !Homebrew::EnvConfig.no_install_upgrade? - puts "#{f.full_name} #{f.linked_version} is installed but outdated" - kegs = Upgrade.outdated_kegs(f) - linked_kegs = kegs.select(&:linked?) - Upgrade.print_upgrade_message(f, formula_installer.options) - end + upgrade = f.linked? && f.outdated? && !f.head? && !Homebrew::EnvConfig.no_install_upgrade? - kegs.each(&:unlink) if kegs.present? - - formula_installer.install - formula_installer.finish - rescue FormulaInstallationAlreadyAttemptedError - # We already attempted to install f as part of the dependency tree of - # another formula. In that case, don't generate an error, just move on. - nil - ensure - # Re-link kegs if upgrade fails - begin - linked_kegs.each(&:link) if linked_kegs.present? && !f.latest_version_installed? - rescue - nil - end + Upgrade.install_formula(formula_installer, upgrade: upgrade) end private_class_method :install_formula end diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index e203045090..dd9071f170 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -164,9 +164,6 @@ module Homebrew def upgrade_formula(formula_installer, dry_run: false, verbose: false) formula = formula_installer.formula - kegs = outdated_kegs(formula) - linked_kegs = kegs.select(&:linked?) - if dry_run print_dry_run_dependencies(formula, formula_installer.compute_dependencies) return @@ -174,12 +171,28 @@ module Homebrew formula_installer.check_installation_already_attempted - print_upgrade_message(formula, formula_installer.options) + install_formula(formula_installer, upgrade: true) + rescue BuildError => e + e.dump(verbose: verbose) + puts + Homebrew.failed = true + end + private_class_method :upgrade_formula + + def install_formula(formula_installer, upgrade:) + formula = formula_installer.formula + + if upgrade + print_upgrade_message(formula, formula_installer.options) + + kegs = outdated_kegs(formula) + linked_kegs = kegs.select(&:linked?) + end # first we unlink the currently active keg for this formula otherwise it is # possible for the existing build to interfere with the build we are about to # do! Seriously, it happens! - kegs.each(&:unlink) + kegs.each(&:unlink) if kegs.present? formula_installer.install formula_installer.finish @@ -187,19 +200,14 @@ module Homebrew # We already attempted to upgrade f as part of the dependency tree of # another formula. In that case, don't generate an error, just move on. nil - rescue BuildError => e - e.dump(verbose: verbose) - puts - Homebrew.failed = true ensure # restore previous installation state if build failed begin - linked_kegs.each(&:link) unless formula.latest_version_installed? + linked_kegs.each(&:link) if linked_kegs.present? && !f.latest_version_installed? rescue nil end end - private_class_method :upgrade_formula def check_broken_dependents(installed_formulae) CacheStoreDatabase.use(:linkage) do |db|