Merge pull request #11940 from FnControlOption/fetch-before-install
upgrade: fetch all formulae before installing
This commit is contained in:
commit
d429780e3f
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user