install: check if formula is already linked before fetching

This commit is contained in:
fn ⌃ ⌥ 2021-09-10 06:06:02 -07:00
parent d649f15d6d
commit a96e286400

View File

@ -209,6 +209,25 @@ module Homebrew
Or to force-install it, run:
brew install #{f} --force
EOS
elsif f.linked?
message = "#{f.name} #{f.linked_version} is already installed"
if f.outdated? && !head
return true unless Homebrew::EnvConfig.no_install_upgrade?
onoe <<~EOS
#{message}
To upgrade to #{f.pkg_version}, run:
brew upgrade #{f.full_name}
EOS
elsif only_dependencies
return true
else
onoe <<~EOS
#{message}
To install #{f.pkg_version}, first run:
brew unlink #{f.name}
EOS
end
else
# If none of the above is true and the formula is linked, then
# FormulaInstaller will handle this case.
@ -281,41 +300,23 @@ module Homebrew
end.compact
formula_installers.each do |fi|
install_formula(fi, only_deps: only_deps)
install_formula(fi)
Cleanup.install_formula_clean!(fi.formula)
end
end
def install_formula(formula_installer, only_deps: false)
def install_formula(formula_installer)
f = formula_installer.formula
formula_installer.prelude
f.print_tap_action
if f.linked_keg.directory?
if Homebrew::EnvConfig.no_install_upgrade?
message = <<~EOS
#{f.name} #{f.linked_version} is already installed
EOS
message += if f.outdated? && !f.head?
<<~EOS
To upgrade to #{f.pkg_version}, run:
brew upgrade #{f.full_name}
EOS
else
<<~EOS
To install #{f.pkg_version}, first run:
brew unlink #{f.name}
EOS
end
raise CannotInstallFormulaError, message unless only_deps
elsif f.outdated? && !f.head?
puts "#{f.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
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
kegs.each(&:unlink) if kegs.present?