From 42bb19a6317172804cd149024115f6973fa2fd4f Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Tue, 21 Feb 2017 21:29:32 +0000 Subject: [PATCH] formula_installer: detect recursive dependencies. Detect recursive dependencies and refuse to install them providing instruction on exactly what is depending on what. Fixes #1933. --- Library/Homebrew/formula_installer.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index c9f478bb1a..1f91ad5c4f 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -151,6 +151,28 @@ class FormulaInstaller recursive_deps = formula.recursive_dependencies recursive_formulae = recursive_deps.map(&:to_formula) + recursive_dependencies = [] + recursive_formulae.each do |dep| + dep_recursive_dependencies = dep.recursive_dependencies.map(&:to_s) + if dep_recursive_dependencies.include?(formula.name) + recursive_dependencies << "#{formula.full_name} depends on #{dep.full_name}" + recursive_dependencies << "#{dep.full_name} depends on #{formula.full_name}" + end + end + + unless recursive_dependencies.empty? + raise CannotInstallFormulaError, <<-EOS.undent + #{formula.full_name} contains a recursive dependency on itself: + #{recursive_dependencies.join("\n ")} + EOS + end + + if recursive_formulae.flat_map(&:recursive_dependencies).map(&:to_s).include?(formula.name) + raise CannotInstallFormulaError, <<-EOS.undent + #{formula.full_name} contains a recursive dependency on itself! + EOS + end + if ENV["HOMEBREW_CHECK_RECURSIVE_VERSION_DEPENDENCIES"] version_hash = {} version_conflicts = Set.new