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
formulae_to_install.each do |formula|
formula_installers = formulae_to_install.map do |formula|
Migrator.migrate_if_needed(formula, force: force)
begin
upgrade_formula(
fi = create_and_fetch_formula_installer(
formula,
flags: flags,
installed_on_request: installed_on_request,
@ -57,10 +57,17 @@ module Homebrew
quiet: quiet,
verbose: verbose,
)
Cleanup.install_formula_clean!(formula)
rescue UnsatisfiedRequirements => e
fi.fetch
fi
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 +89,7 @@ module Homebrew
EOS
end
def upgrade_formula(
def create_and_fetch_formula_installer(
formula,
flags:,
installed_on_request: false,
@ -101,9 +108,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)
@ -114,7 +118,7 @@ module Homebrew
options |= formula.build.used_options
options &= formula.options
fi = FormulaInstaller.new(
FormulaInstaller.new(
formula,
**{
options: options,
@ -132,24 +136,31 @@ module Homebrew
verbose: verbose,
}.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
fi.fetch
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)