diff --git a/Library/Homebrew/install.rb b/Library/Homebrew/install.rb index 50347a3884..48f75516d0 100644 --- a/Library/Homebrew/install.rb +++ b/Library/Homebrew/install.rb @@ -5,6 +5,7 @@ require "diagnostic" require "fileutils" require "hardware" require "development_tools" +require "upgrade" module Homebrew # Helper module for performing (pre-)install checks. @@ -249,20 +250,6 @@ module Homebrew f.print_tap_action build_options = f.build - if !Homebrew::EnvConfig.no_install_upgrade? && f.outdated? && !f.head? - outdated_formulae = [f, *f.old_installed_formulae] - version_upgrade = "#{f.linked_version} -> #{f.pkg_version}" - - oh1 <<~EOS - #{f.name} #{f.linked_version} is installed but outdated - Upgrading #{Formatter.identifier(f.name)} #{version_upgrade} - EOS - outdated_kegs = outdated_formulae.map(&:linked_keg) - .select(&:directory?) - .map { |k| Keg.new(k.resolved_path) } - linked_kegs = outdated_kegs.select(&:linked?) - end - fi = FormulaInstaller.new( f, options: build_options.used_options, @@ -282,10 +269,17 @@ module Homebrew quiet: quiet, verbose: verbose, ) + + if !Homebrew::EnvConfig.no_install_upgrade? && f.outdated? && !f.head? + kegs = Upgrade.outdated_kegs(f) + linked_kegs = kegs.select(&:linked?) + Upgrade.print_upgrade_message(f, fi.options) + end + fi.prelude fi.fetch - outdated_kegs.each(&:unlink) if outdated_kegs.present? + kegs.each(&:unlink) if kegs.present? fi.install fi.finish diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 8c0f60b99c..4db35588eb 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -64,6 +64,24 @@ module Homebrew end end + def outdated_kegs(formula) + [formula, *formula.old_installed_formulae].map(&:linked_keg) + .select(&:directory?) + .map { |k| Keg.new(k.resolved_path) } + end + + def print_upgrade_message(formula, fi_options) + version_upgrade = if formula.optlinked? + "#{Keg.new(formula.opt_prefix).version} -> #{formula.pkg_version}" + else + "-> #{formula.pkg_version}" + end + oh1 <<~EOS + Upgrading #{Formatter.identifier(formula.full_specified_name)} + #{version_upgrade} #{fi_options.to_a.join(" ")} + EOS + end + def upgrade_formula( formula, flags:, @@ -83,11 +101,8 @@ module Homebrew keg_was_linked = keg.linked? end - formulae_maybe_with_kegs = [formula] + formula.old_installed_formulae - outdated_kegs = formulae_maybe_with_kegs.map(&:linked_keg) - .select(&:directory?) - .map { |k| Keg.new(k.resolved_path) } - linked_kegs = outdated_kegs.select(&:linked?) + kegs = outdated_kegs(formula) + linked_kegs = kegs.select(&:linked?) if formula.opt_prefix.directory? keg = Keg.new(formula.opt_prefix.resolved_path) @@ -118,13 +133,7 @@ module Homebrew }.compact, ) - upgrade_version = if formula.optlinked? - "#{Keg.new(formula.opt_prefix).version} -> #{formula.pkg_version}" - else - "-> #{formula.pkg_version}" - end - oh1 "Upgrading #{Formatter.identifier(formula.full_specified_name)} " \ - "#{upgrade_version} #{fi.options.to_a.join(" ")}" + print_upgrade_message(formula, fi.options) fi.prelude fi.fetch @@ -132,7 +141,7 @@ module Homebrew # 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! - outdated_kegs.each(&:unlink) + kegs.each(&:unlink) fi.install fi.finish