Merge pull request #11940 from FnControlOption/fetch-before-install

upgrade: fetch all formulae before installing
This commit is contained in:
Mike McQuaid 2021-08-31 16:54:28 +01:00 committed by GitHub
commit d429780e3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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( fi = create_and_fetch_formula_installer(
formula, formula,
flags: flags, flags: flags,
installed_on_request: installed_on_request, installed_on_request: installed_on_request,
@ -57,10 +57,17 @@ module Homebrew
quiet: quiet, quiet: quiet,
verbose: verbose, verbose: verbose,
) )
Cleanup.install_formula_clean!(formula) fi.fetch
rescue UnsatisfiedRequirements => e fi
rescue UnsatisfiedRequirements, DownloadError => 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 +89,7 @@ module Homebrew
EOS EOS
end end
def upgrade_formula( def create_and_fetch_formula_installer(
formula, formula,
flags:, flags:,
installed_on_request: false, installed_on_request: false,
@ -101,9 +108,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)
@ -114,7 +118,7 @@ module Homebrew
options |= formula.build.used_options options |= formula.build.used_options
options &= formula.options options &= formula.options
fi = FormulaInstaller.new( FormulaInstaller.new(
formula, formula,
**{ **{
options: options, options: options,
@ -132,24 +136,31 @@ module Homebrew
verbose: verbose, verbose: verbose,
}.compact, }.compact,
) )
end
private_class_method :create_and_fetch_formula_installer
print_upgrade_message(formula, fi.options) def upgrade_formula(formula_installer, verbose: false)
formula = formula_installer.formula
fi.prelude kegs = outdated_kegs(formula)
fi.fetch 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)