From c0795b502908676f1fd62ba0a478c22adec86080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?fn=20=E2=8C=83=20=E2=8C=A5?= <70830482+FnControlOption@users.noreply.github.com> Date: Sun, 12 Sep 2021 07:56:37 -0700 Subject: [PATCH] upgrade: raise error if developer and there are cyclic dependencies --- Library/Homebrew/exceptions.rb | 10 ++++++++++ Library/Homebrew/upgrade.rb | 3 +-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index b8c5d4c622..99745cdb8b 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -758,3 +758,13 @@ class ShebangDetectionError < RuntimeError super "Cannot detect #{type} shebang: #{reason}." end end + +# Raised when one or more formulae have cyclic dependencies. +class CyclicDependencyError < RuntimeError + def initialize(strongly_connected_components) + super <<~EOS + The following packages contain cyclic dependencies: + #{strongly_connected_components.select { |packages| packages.count > 1 }.map(&:to_sentence).join("\n ")} + EOS + end +end diff --git a/Library/Homebrew/upgrade.rb b/Library/Homebrew/upgrade.rb index 8f783f079d..acd654e08e 100644 --- a/Library/Homebrew/upgrade.rb +++ b/Library/Homebrew/upgrade.rb @@ -47,8 +47,7 @@ module Homebrew begin formulae_to_install = dependency_graph.tsort & formulae_to_install rescue TSort::Cyclic - # Failed to sort formulae topologically because there are cyclic - # dependencies. Let FormulaInstaller handle it. + raise CyclicDependencyError, dependency_graph.strongly_connected_components if Homebrew::EnvConfig.developer? end formula_installers = formulae_to_install.map do |formula|