diff --git a/Library/Homebrew/install.rb b/Library/Homebrew/install.rb index 52e630ab00..798bd99047 100644 --- a/Library/Homebrew/install.rb +++ b/Library/Homebrew/install.rb @@ -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?