From f45c1146fcef24b7ff0ddeaaca62d31ffb937c18 Mon Sep 17 00:00:00 2001 From: FnControlOption <70830482+FnControlOption@users.noreply.github.com> Date: Mon, 30 Aug 2021 07:47:47 -0700 Subject: [PATCH 1/3] upgrade: fetch all formulae before installing --- Library/Homebrew/upgrade.rb | 40 ++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 4db35588eb..8da0d2096b 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -41,10 +41,10 @@ module Homebrew end end - formulae_to_install.each do |formula| + formula_installers = formulae_to_install.map do |formula| Migrator.migrate_if_needed(formula, force: force) begin - upgrade_formula( + fetch_formula_installer( formula, flags: flags, installed_on_request: installed_on_request, @@ -57,10 +57,15 @@ module Homebrew quiet: quiet, verbose: verbose, ) - Cleanup.install_formula_clean!(formula) - rescue UnsatisfiedRequirements => e + rescue UnsatisfiedRequirements, DownloadError => e ofail "#{formula}: #{e}" + nil end + end.compact + + formula_installers.each do |fi| + upgrade_formula(fi, verbose: verbose) + Cleanup.install_formula_clean!(fi.formula) end end @@ -82,7 +87,7 @@ module Homebrew EOS end - def upgrade_formula( + def fetch_formula_installer( formula, flags:, installed_on_request: false, @@ -101,9 +106,6 @@ module Homebrew keg_was_linked = keg.linked? end - kegs = outdated_kegs(formula) - linked_kegs = kegs.select(&:linked?) - if formula.opt_prefix.directory? keg = Keg.new(formula.opt_prefix.resolved_path) tab = Tab.for_keg(keg) @@ -133,23 +135,33 @@ module Homebrew }.compact, ) - print_upgrade_message(formula, fi.options) - - fi.prelude fi.fetch + fi + end + private_class_method :fetch_formula_installer + + def upgrade_formula(formula_installer, verbose: false) + formula = formula_installer.formula + + kegs = outdated_kegs(formula) + linked_kegs = kegs.select(&:linked?) + + print_upgrade_message(formula, formula_installer.options) + + formula_installer.prelude # 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) - fi.install - fi.finish + formula_installer.install + formula_installer.finish rescue FormulaInstallationAlreadyAttemptedError # 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 CannotInstallFormulaError, DownloadError => e + rescue CannotInstallFormulaError => e ofail e rescue BuildError => e e.dump(verbose: verbose) From 16594c552134d45541bb4cdafc624de79f161e5b Mon Sep 17 00:00:00 2001 From: FnControlOption <70830482+FnControlOption@users.noreply.github.com> Date: Tue, 31 Aug 2021 07:06:39 -0700 Subject: [PATCH 2/3] upgrade: fetch_formula_installer -> create_formula_installer --- Library/Homebrew/upgrade.rb | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 8da0d2096b..742f004c63 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -44,7 +44,7 @@ module Homebrew formula_installers = formulae_to_install.map do |formula| Migrator.migrate_if_needed(formula, force: force) begin - fetch_formula_installer( + fi = create_formula_installer( formula, flags: flags, installed_on_request: installed_on_request, @@ -57,6 +57,8 @@ module Homebrew quiet: quiet, verbose: verbose, ) + fi.fetch + fi rescue UnsatisfiedRequirements, DownloadError => e ofail "#{formula}: #{e}" nil @@ -87,7 +89,7 @@ module Homebrew EOS end - def fetch_formula_installer( + def create_formula_installer( formula, flags:, installed_on_request: false, @@ -116,7 +118,7 @@ module Homebrew options |= formula.build.used_options options &= formula.options - fi = FormulaInstaller.new( + FormulaInstaller.new( formula, **{ options: options, @@ -134,11 +136,8 @@ module Homebrew verbose: verbose, }.compact, ) - - fi.fetch - fi end - private_class_method :fetch_formula_installer + private_class_method :create_formula_installer def upgrade_formula(formula_installer, verbose: false) formula = formula_installer.formula From 3e1c8ea8778d1a33f15212e33a701c969e5dfe34 Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Tue, 31 Aug 2021 16:35:09 +0100 Subject: [PATCH 3/3] Apply suggestions from code review --- Library/Homebrew/upgrade.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 742f004c63..4bea28e8a2 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -44,7 +44,7 @@ module Homebrew formula_installers = formulae_to_install.map do |formula| Migrator.migrate_if_needed(formula, force: force) begin - fi = create_formula_installer( + fi = create_and_fetch_formula_installer( formula, flags: flags, installed_on_request: installed_on_request, @@ -89,7 +89,7 @@ module Homebrew EOS end - def create_formula_installer( + def create_and_fetch_formula_installer( formula, flags:, installed_on_request: false, @@ -137,7 +137,7 @@ module Homebrew }.compact, ) end - private_class_method :create_formula_installer + private_class_method :create_and_fetch_formula_installer def upgrade_formula(formula_installer, verbose: false) formula = formula_installer.formula