From f4707a8041181133c92b2beca88a39ec92137e19 Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" <13498015+amyspark@users.noreply.github.com> Date: Sat, 12 Oct 2019 15:53:21 +0000 Subject: [PATCH 1/2] upgrade: reject formulae checked in earlier levels --- Library/Homebrew/cmd/upgrade.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index e1488c2fd7..1797f872cb 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -255,7 +255,7 @@ module Homebrew [formulae_to_upgrade, formulae_pinned] end - def broken_dependents(kegs, formulae) + def broken_dependents(kegs, formulae, scanned = []) formulae_to_reinstall = Set.new formulae_pinned_and_outdated = Set.new @@ -266,6 +266,8 @@ module Homebrew dependents = kegs.select do |keg| keg.runtime_dependencies .any? { |d| d["full_name"] == formula.full_name } + end.reject do |keg| + scanned.include?(keg) end next if dependents.empty? @@ -290,7 +292,9 @@ module Homebrew descendants << f end - descendants_to_reinstall, descendants_pinned = broken_dependents(kegs, descendants) + scanned << dependents + + descendants_to_reinstall, descendants_pinned = broken_dependents(kegs, descendants, scanned) formulae_to_reinstall.merge descendants_to_reinstall formulae_pinned_and_outdated.merge descendants_pinned From 024007f9e280c544475f3b74228aaf2b28ece43b Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" <13498015+amyspark@users.noreply.github.com> Date: Sat, 12 Oct 2019 22:06:08 +0000 Subject: [PATCH 2/2] upgrade: address @MikeMcQuaid's comments --- Library/Homebrew/cmd/upgrade.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/cmd/upgrade.rb b/Library/Homebrew/cmd/upgrade.rb index 1797f872cb..781f425425 100644 --- a/Library/Homebrew/cmd/upgrade.rb +++ b/Library/Homebrew/cmd/upgrade.rb @@ -255,7 +255,7 @@ module Homebrew [formulae_to_upgrade, formulae_pinned] end - def broken_dependents(kegs, formulae, scanned = []) + def broken_dependents(kegs, formulae, scanned = Set.new) formulae_to_reinstall = Set.new formulae_pinned_and_outdated = Set.new @@ -264,10 +264,9 @@ module Homebrew descendants = Set.new dependents = kegs.select do |keg| - keg.runtime_dependencies - .any? { |d| d["full_name"] == formula.full_name } - end.reject do |keg| - scanned.include?(keg) + keg = keg.runtime_dependencies + .any? { |d| d["full_name"] == formula.full_name } + keg unless scanned.include?(keg) end next if dependents.empty? @@ -292,7 +291,7 @@ module Homebrew descendants << f end - scanned << dependents + scanned.merge dependents descendants_to_reinstall, descendants_pinned = broken_dependents(kegs, descendants, scanned)