From efb200e825d87a637642a516796e986db7b203fb Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" <13498015+amyspark@users.noreply.github.com> Date: Thu, 22 Aug 2019 12:38:28 +0000 Subject: [PATCH 1/2] breadth-first search for dependents upgrade Fixes Homebrew/brew#6386 --- Library/Homebrew/cmd/upgrade.rb | 53 ++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index ae432c7b57..314e91e4e5 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -213,37 +213,42 @@ module Homebrew formulae_to_upgrade = Set.new formulae_pinned = Set.new - formulae.each do |formula| + formulae_to_check = formulae + checked_formulae = Set.new + + until formulae_to_check.empty? descendants = Set.new - dependents = kegs.select do |keg| - keg.runtime_dependencies - .any? { |d| d["full_name"] == formula.full_name } - end + formulae_to_check.each do |formula| + next if checked_formulae.include?(formula) - next if dependents.empty? - - dependent_formulae = dependents.map(&:to_formula) - - dependent_formulae.each do |f| - next if formulae_to_upgrade.include?(f) - next if formulae_pinned.include?(f) - - if f.outdated?(fetch_head: args.fetch_HEAD?) - if f.pinned? - formulae_pinned << f - else - formulae_to_upgrade << f - end + dependents = kegs.select do |keg| + keg.runtime_dependencies + .any? { |d| d["full_name"] == formula.full_name } end - descendants << f + next if dependents.empty? + + dependent_formulae = dependents.map(&:to_formula) + + dependent_formulae.each do |f| + next if formulae_to_upgrade.include?(f) + next if formulae_pinned.include?(f) + if f.outdated?(fetch_head: args.fetch_HEAD?) + if f.pinned? + formulae_pinned << f + else + formulae_to_upgrade << f + end + end + + descendants << f + end + + checked_formulae << formula end - upgradable_descendants, pinned_descendants = upgradable_dependents(kegs, descendants) - - formulae_to_upgrade.merge upgradable_descendants - formulae_pinned.merge pinned_descendants + formulae_to_check = descendants end [formulae_to_upgrade, formulae_pinned] From b3a1f34b7bd4793d277e1671781703790add5436 Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" <13498015+amyspark@users.noreply.github.com> Date: Fri, 23 Aug 2019 01:51:06 +0000 Subject: [PATCH 2/2] upgrade: style fixes --- Library/Homebrew/cmd/upgrade.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index 314e91e4e5..941638e8bc 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -234,6 +234,7 @@ module Homebrew dependent_formulae.each do |f| next if formulae_to_upgrade.include?(f) next if formulae_pinned.include?(f) + if f.outdated?(fetch_head: args.fetch_HEAD?) if f.pinned? formulae_pinned << f