Skip to content

Commit 097e2a3

Browse files
authored
Merge pull request #20296 from Homebrew/upgrade_reinstall_download_queue
Optionally use DownloadQueue for reinstall, upgrade.
2 parents dfcecbd + e10d4c4 commit 097e2a3

File tree

10 files changed

+733
-625
lines changed

10 files changed

+733
-625
lines changed

Library/Homebrew/cask/audit.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,13 +585,15 @@ def extract_artifacts
585585
}.compact
586586

587587
Homebrew::Install.perform_preinstall_checks_once
588+
valid_formula_installers = Homebrew::Install.fetch_formulae(primary_container.dependencies)
589+
588590
primary_container.dependencies.each do |dep|
591+
next unless valid_formula_installers.include?(dep)
592+
589593
fi = FormulaInstaller.new(
590594
dep,
591595
**install_options,
592596
)
593-
fi.prelude
594-
fi.fetch
595597
fi.install
596598
fi.finish
597599
end

Library/Homebrew/cask/installer.rb

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -426,14 +426,17 @@ def satisfy_cask_and_formula_dependencies
426426
end
427427

428428
ohai "Installing dependencies: #{missing_formulae_and_casks.map(&:to_s).join(", ")}"
429+
cask_installers = T.let([], T::Array[Installer])
430+
formula_installers = T.let([], T::Array[FormulaInstaller])
431+
429432
missing_formulae_and_casks.each do |cask_or_formula|
430433
if cask_or_formula.is_a?(Cask)
431434
if skip_cask_deps?
432435
opoo "`--skip-cask-deps` is set; skipping installation of #{cask_or_formula}."
433436
next
434437
end
435438

436-
Installer.new(
439+
cask_installers << Installer.new(
437440
cask_or_formula,
438441
adopt: adopt?,
439442
binaries: binaries?,
@@ -444,10 +447,9 @@ def satisfy_cask_and_formula_dependencies
444447
quiet: quiet?,
445448
require_sha: require_sha?,
446449
verbose: verbose?,
447-
).install
450+
)
448451
else
449-
Homebrew::Install.perform_preinstall_checks_once
450-
fi = FormulaInstaller.new(
452+
formula_installers << FormulaInstaller.new(
451453
cask_or_formula,
452454
**{
453455
show_header: true,
@@ -456,12 +458,18 @@ def satisfy_cask_and_formula_dependencies
456458
verbose: verbose?,
457459
}.compact,
458460
)
459-
fi.prelude
460-
fi.fetch
461-
fi.install
462-
fi.finish
463461
end
464462
end
463+
464+
cask_installers.each(&:install)
465+
return if formula_installers.blank?
466+
467+
Homebrew::Install.perform_preinstall_checks_once
468+
valid_formula_installers = Homebrew::Install.fetch_formulae(formula_installers)
469+
valid_formula_installers.each do |formula_installer|
470+
formula_installer.install
471+
formula_installer.finish
472+
end
465473
end
466474

467475
def caveats

Library/Homebrew/cmd/reinstall.rb

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def run
130130
unless formulae.empty?
131131
Install.perform_preinstall_checks_once
132132

133-
install_context = formulae.map do |formula|
133+
reinstall_contexts = formulae.filter_map do |formula|
134134
if formula.pinned?
135135
onoe "#{formula.full_name} is pinned. You must unpin it to reinstall."
136136
next
@@ -167,27 +167,18 @@ def run
167167
verbose: args.verbose?,
168168
)
169169

170-
formulae_installer = install_context.map(&:formula_installer)
170+
formulae_installers = reinstall_contexts.map(&:formula_installer)
171171

172172
# Main block: if asking the user is enabled, show dependency and size information.
173-
Install.ask_formulae(formulae_installer, dependants, args: args) if args.ask?
173+
Install.ask_formulae(formulae_installers, dependants, args: args) if args.ask?
174174

175-
install_context.each do |f|
176-
Homebrew::Reinstall.reinstall_formula(
177-
f,
178-
flags: args.flags_only,
179-
force_bottle: args.force_bottle?,
180-
build_from_source_formulae: args.build_from_source_formulae,
181-
interactive: args.interactive?,
182-
keep_tmp: args.keep_tmp?,
183-
debug_symbols: args.debug_symbols?,
184-
force: args.force?,
185-
debug: args.debug?,
186-
quiet: args.quiet?,
187-
verbose: args.verbose?,
188-
git: args.git?,
189-
)
190-
Cleanup.install_formula_clean!(f.formula)
175+
valid_formula_installers = Install.fetch_formulae(formulae_installers)
176+
177+
reinstall_contexts.each do |reinstall_context|
178+
next unless valid_formula_installers.include?(reinstall_context.formula_installer)
179+
180+
Homebrew::Reinstall.reinstall_formula(reinstall_context)
181+
Cleanup.install_formula_clean!(reinstall_context.formula)
191182
end
192183

193184
Upgrade.upgrade_dependents(

Library/Homebrew/extend/os/linux/install.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# typed: true # rubocop:todo Sorbet/StrictSigil
1+
# typed: strict
22
# frozen_string_literal: true
33

44
module OS
@@ -30,18 +30,21 @@ module ClassMethods
3030
libstdc++.so.6
3131
].freeze
3232

33+
sig { params(all_fatal: T::Boolean).void }
3334
def perform_preinstall_checks(all_fatal: false)
3435
super
3536
symlink_ld_so
3637
setup_preferred_gcc_libs
3738
end
3839

40+
sig { void }
3941
def global_post_install
4042
super
4143
symlink_ld_so
4244
setup_preferred_gcc_libs
4345
end
4446

47+
sig { void }
4548
def check_cpu
4649
return if ::Hardware::CPU.intel? && ::Hardware::CPU.is_64_bit?
4750
return if ::Hardware::CPU.arm?
@@ -56,6 +59,7 @@ def check_cpu
5659
::Kernel.abort message
5760
end
5861

62+
sig { void }
5963
def symlink_ld_so
6064
brew_ld_so = HOMEBREW_PREFIX/"lib/ld.so"
6165

@@ -75,6 +79,7 @@ def symlink_ld_so
7579
FileUtils.ln_sf ld_so, brew_ld_so
7680
end
7781

82+
sig { void }
7883
def setup_preferred_gcc_libs
7984
gcc_opt_prefix = HOMEBREW_PREFIX/"opt/#{OS::LINUX_PREFERRED_GCC_RUNTIME_FORMULA}"
8085
glibc_installed = (HOMEBREW_PREFIX/"opt/glibc/bin/ld.so").readable?

Library/Homebrew/formula_installer.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
require "development_tools"
1414
require "cache_store"
1515
require "linkage_checker"
16-
require "install"
1716
require "messages"
1817
require "cask/cask_loader"
1918
require "cmd/install"
@@ -61,8 +60,8 @@ class FormulaInstaller
6160
bottle_arch: T.nilable(String),
6261
ignore_deps: T::Boolean,
6362
only_deps: T::Boolean,
64-
include_test_formulae: T::Array[Formula],
65-
build_from_source_formulae: T::Array[Formula],
63+
include_test_formulae: T::Array[String],
64+
build_from_source_formulae: T::Array[String],
6665
env: T.nilable(String),
6766
git: T::Boolean,
6867
interactive: T::Boolean,
@@ -507,7 +506,10 @@ def install
507506
lock
508507

509508
start_time = Time.now
510-
Homebrew::Install.perform_build_from_source_checks if !pour_bottle? && DevelopmentTools.installed?
509+
if !pour_bottle? && DevelopmentTools.installed?
510+
require "install"
511+
Homebrew::Install.perform_build_from_source_checks
512+
end
511513

512514
# Warn if a more recent version of this formula is available in the tap.
513515
begin
@@ -896,6 +898,7 @@ def install_dependency(dep, inherited_options)
896898
verbose: verbose?,
897899
)
898900
oh1 "Installing #{formula.full_name} dependency: #{Formatter.identifier(dep.name)}"
901+
# prelude only needed to populate bottle_tab_runtime_dependencies, fetching has already been done.
899902
fi.prelude
900903
fi.install
901904
fi.finish
@@ -955,6 +958,7 @@ def finish
955958

956959
fix_dynamic_linkage(keg) if !@poured_bottle || !formula.bottle_specification.skip_relocation?
957960

961+
require "install"
958962
Homebrew::Install.global_post_install
959963

960964
if build_bottle? || skip_post_install?

0 commit comments

Comments
 (0)