Consolidate shared install and upgrade logic
This commit is contained in:
parent
11d030e897
commit
13e1457249
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user