upgrade: add install_formula helper method
This commit is contained in:
parent
0c3afa5837
commit
15e8852128
@ -212,7 +212,10 @@ module Homebrew
|
||||
elsif f.linked?
|
||||
message = "#{f.name} #{f.linked_version} is already installed"
|
||||
if f.outdated? && !head
|
||||
return true unless Homebrew::EnvConfig.no_install_upgrade?
|
||||
unless Homebrew::EnvConfig.no_install_upgrade?
|
||||
puts "#{message} but outdated"
|
||||
return true
|
||||
end
|
||||
|
||||
onoe <<~EOS
|
||||
#{message}
|
||||
@ -315,28 +318,9 @@ module Homebrew
|
||||
|
||||
f.print_tap_action
|
||||
|
||||
if f.linked? && f.outdated? && !f.head? && !Homebrew::EnvConfig.no_install_upgrade?
|
||||
puts "#{f.full_name} #{f.linked_version} is installed but outdated"
|
||||
kegs = Upgrade.outdated_kegs(f)
|
||||
linked_kegs = kegs.select(&:linked?)
|
||||
Upgrade.print_upgrade_message(f, formula_installer.options)
|
||||
end
|
||||
upgrade = f.linked? && f.outdated? && !f.head? && !Homebrew::EnvConfig.no_install_upgrade?
|
||||
|
||||
kegs.each(&:unlink) if kegs.present?
|
||||
|
||||
formula_installer.install
|
||||
formula_installer.finish
|
||||
rescue FormulaInstallationAlreadyAttemptedError
|
||||
# We already attempted to install f as part of the dependency tree of
|
||||
# another formula. In that case, don't generate an error, just move on.
|
||||
nil
|
||||
ensure
|
||||
# Re-link kegs if upgrade fails
|
||||
begin
|
||||
linked_kegs.each(&:link) if linked_kegs.present? && !f.latest_version_installed?
|
||||
rescue
|
||||
nil
|
||||
end
|
||||
Upgrade.install_formula(formula_installer, upgrade: upgrade)
|
||||
end
|
||||
private_class_method :install_formula
|
||||
end
|
||||
|
||||
@ -164,9 +164,6 @@ module Homebrew
|
||||
def upgrade_formula(formula_installer, dry_run: false, verbose: false)
|
||||
formula = formula_installer.formula
|
||||
|
||||
kegs = outdated_kegs(formula)
|
||||
linked_kegs = kegs.select(&:linked?)
|
||||
|
||||
if dry_run
|
||||
print_dry_run_dependencies(formula, formula_installer.compute_dependencies)
|
||||
return
|
||||
@ -174,12 +171,28 @@ module Homebrew
|
||||
|
||||
formula_installer.check_installation_already_attempted
|
||||
|
||||
print_upgrade_message(formula, formula_installer.options)
|
||||
install_formula(formula_installer, upgrade: true)
|
||||
rescue BuildError => e
|
||||
e.dump(verbose: verbose)
|
||||
puts
|
||||
Homebrew.failed = true
|
||||
end
|
||||
private_class_method :upgrade_formula
|
||||
|
||||
def install_formula(formula_installer, upgrade:)
|
||||
formula = formula_installer.formula
|
||||
|
||||
if upgrade
|
||||
print_upgrade_message(formula, formula_installer.options)
|
||||
|
||||
kegs = outdated_kegs(formula)
|
||||
linked_kegs = kegs.select(&:linked?)
|
||||
end
|
||||
|
||||
# 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)
|
||||
kegs.each(&:unlink) if kegs.present?
|
||||
|
||||
formula_installer.install
|
||||
formula_installer.finish
|
||||
@ -187,19 +200,14 @@ module Homebrew
|
||||
# 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 BuildError => e
|
||||
e.dump(verbose: verbose)
|
||||
puts
|
||||
Homebrew.failed = true
|
||||
ensure
|
||||
# restore previous installation state if build failed
|
||||
begin
|
||||
linked_kegs.each(&:link) unless formula.latest_version_installed?
|
||||
linked_kegs.each(&:link) if linked_kegs.present? && !f.latest_version_installed?
|
||||
rescue
|
||||
nil
|
||||
end
|
||||
end
|
||||
private_class_method :upgrade_formula
|
||||
|
||||
def check_broken_dependents(installed_formulae)
|
||||
CacheStoreDatabase.use(:linkage) do |db|
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user