Consolidate shared install and upgrade logic

This commit is contained in:
Connor Mann 2021-06-15 10:11:40 -04:00
parent 11d030e897
commit 13e1457249
No known key found for this signature in database
GPG Key ID: 5886083015754F6F
2 changed files with 31 additions and 28 deletions

View File

@ -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

View File

@ -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