From 3ed1d6ccfba92ce9ccde56a120e01b5c6235ce84 Mon Sep 17 00:00:00 2001 From: thibhero Date: Mon, 10 Feb 2025 20:56:58 -0500 Subject: [PATCH] option `--ask` implementation for formulae dependency and dependant --- Library/Homebrew/cmd/upgrade.rb | 59 +++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index d716178060..4af765a736 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -246,36 +246,47 @@ module Homebrew total_installed_size = 0 total_net_size = 0 formulae_to_install.each do |f| - next unless (bottle = f.bottle) - kegs_size = 0 - # keep it quiet as there could be a lot of json fetch, it’s not intuitive to show them all. - bottle.fetch_tab(quiet: !args.debug?) - total_download_size += T.must(bottle.bottle_size) if bottle.bottle_size - total_installed_size += T.must(bottle.installed_size) if bottle.installed_size - f.installed_kegs.each do |keg| - kegs_size += keg.disk_usage if keg.disk_usage - end - total_net_size += (bottle.installed_size - kegs_size) if bottle.installed_size sized_formulae.push(f) next if f.deps.empty? + outdated_dependents = f.recursive_dependencies{ |_, dep| + next :prune if dep.to_formula.deps.empty? + next :prune unless dep.to_formula.outdated? + next :prune unless dep.to_formula.bottled? + }.flatten + + sized_formulae.concat(outdated_dependents.flat_map { |dep| + dep.to_formula + }).flatten - # f.recursive_dependencies.each do |dep| - # f_dep = dep.to_formula - # kegs_dep_size = 0 - # bottle_dep = f_dep.bottle - # bottle_dep.fetch_tab(quiet: !args.debug?) - # total_download_size += bottle_dep.bottle_size if bottle_dep.bottle_size - # total_installed_size += bottle_dep.installed_size if bottle_dep.installed_size - # f_dep.installed_kegs.each do |keg| - # kegs_dep_size += keg.disk_usage if keg.disk_usage - # end - # total_net_size += (bottle_dep.installed_size - kegs_dep_size) if bottle_dep.installed_size - # end end + + # check if formulae are dependant of those formulae and add if outdated + unless Homebrew::EnvConfig.no_installed_dependents_check? + sized_formulae.concat(Formula.installed.select do |f| + f.deps.any? { |dep| + sized_formulae.include?(dep.to_formula) && f.outdated? + } + end) + end + sized_formulae = sized_formulae.uniq { |dep| + dep.to_s + } + sized_formulae.each do |f| + kegs_dep_size = 0 + next unless (bottle = f.bottle) + bottle.fetch_tab(quiet: !args.debug?) + total_download_size += bottle.bottle_size if bottle.bottle_size + total_installed_size += bottle.installed_size if bottle.installed_size + f.installed_kegs.each do |keg| + kegs_dep_size += keg.disk_usage if keg.disk_usage + end + total_net_size += (bottle.installed_size - kegs_dep_size) if bottle.installed_size + end + puts "Formulae: #{sized_formulae.join(", ")}\n\n" puts "Download Size: #{disk_usage_readable(total_download_size)}" if total_download_size - puts "Install Size: #{disk_usage_readable(total_installed_size)}\n" if total_installed_size - puts "Net Install Size: #{disk_usage_readable(total_net_size)}\n" if total_net_size + puts "Install Size: #{disk_usage_readable(total_installed_size)}" if total_installed_size + puts "Net Install Size: #{disk_usage_readable(total_net_size)}" if total_net_size ask_input.call end