upgrade: fetch all formulae before installing

This commit is contained in:
FnControlOption 2021-08-30 07:47:47 -07:00
parent ab2118a402
commit f45c1146fc

View File

@ -41,10 +41,10 @@ module Homebrew
end end
end end
formulae_to_install.each do |formula| formula_installers = formulae_to_install.map do |formula|
Migrator.migrate_if_needed(formula, force: force) Migrator.migrate_if_needed(formula, force: force)
begin begin
upgrade_formula( fetch_formula_installer(
formula, formula,
flags: flags, flags: flags,
installed_on_request: installed_on_request, installed_on_request: installed_on_request,
@ -57,10 +57,15 @@ module Homebrew
quiet: quiet, quiet: quiet,
verbose: verbose, verbose: verbose,
) )
Cleanup.install_formula_clean!(formula) rescue UnsatisfiedRequirements, DownloadError => e
rescue UnsatisfiedRequirements => e
ofail "#{formula}: #{e}" ofail "#{formula}: #{e}"
nil
end end
end.compact
formula_installers.each do |fi|
upgrade_formula(fi, verbose: verbose)
Cleanup.install_formula_clean!(fi.formula)
end end
end end
@ -82,7 +87,7 @@ module Homebrew
EOS EOS
end end
def upgrade_formula( def fetch_formula_installer(
formula, formula,
flags:, flags:,
installed_on_request: false, installed_on_request: false,
@ -101,9 +106,6 @@ module Homebrew
keg_was_linked = keg.linked? keg_was_linked = keg.linked?
end end
kegs = outdated_kegs(formula)
linked_kegs = kegs.select(&:linked?)
if formula.opt_prefix.directory? if formula.opt_prefix.directory?
keg = Keg.new(formula.opt_prefix.resolved_path) keg = Keg.new(formula.opt_prefix.resolved_path)
tab = Tab.for_keg(keg) tab = Tab.for_keg(keg)
@ -133,23 +135,33 @@ module Homebrew
}.compact, }.compact,
) )
print_upgrade_message(formula, fi.options)
fi.prelude
fi.fetch 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 # 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 # possible for the existing build to interfere with the build we are about to
# do! Seriously, it happens! # do! Seriously, it happens!
kegs.each(&:unlink) kegs.each(&:unlink)
fi.install formula_installer.install
fi.finish formula_installer.finish
rescue FormulaInstallationAlreadyAttemptedError rescue FormulaInstallationAlreadyAttemptedError
# We already attempted to upgrade f as part of the dependency tree of # 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. # another formula. In that case, don't generate an error, just move on.
nil nil
rescue CannotInstallFormulaError, DownloadError => e rescue CannotInstallFormulaError => e
ofail e ofail e
rescue BuildError => e rescue BuildError => e
e.dump(verbose: verbose) e.dump(verbose: verbose)