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
|
||||||
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user