From 0a2f0ab4563f4d438aac9137deae2b1cf15366c5 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Mon, 12 Mar 2018 09:20:24 +0000 Subject: [PATCH] Fix formula/linkage_checker infinite recursion --- Library/Homebrew/formula.rb | 40 ++++++++++++++--------------- Library/Homebrew/linkage_checker.rb | 3 ++- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index dbe74b5848..29f6c728da 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -1491,6 +1491,26 @@ class Formula declared_runtime_dependencies | undeclared_runtime_dependencies end + def declared_runtime_dependencies + recursive_dependencies do |_, dependency| + Dependency.prune if dependency.build? + Dependency.prune if !dependency.required? && build.without?(dependency) + end + end + + def undeclared_runtime_dependencies + if optlinked? + keg = Keg.new(opt_prefix) + elsif prefix.directory? + keg = Keg.new(prefix) + else + return [] + end + + linkage_checker = LinkageChecker.new(keg, self) + linkage_checker.undeclared_deps.map { |n| Dependency.new(n) } + end + # Returns a list of formulae depended on by this formula that aren't # installed def missing_dependencies(hide: nil) @@ -1833,26 +1853,6 @@ class Formula private - def declared_runtime_dependencies - recursive_dependencies do |_, dependency| - Dependency.prune if dependency.build? - Dependency.prune if !dependency.required? && build.without?(dependency) - end - end - - def undeclared_runtime_dependencies - if optlinked? - keg = Keg.new(opt_prefix) - elsif prefix.directory? - keg = Keg.new(prefix) - else - return [] - end - - linkage_checker = LinkageChecker.new(keg, self) - linkage_checker.undeclared_deps.map { |n| Dependency.new(n) } - end - # Returns the prefix for a given formula version number. # @private def versioned_prefix(v) diff --git a/Library/Homebrew/linkage_checker.rb b/Library/Homebrew/linkage_checker.rb index cf6c12f22c..345fde47e6 100644 --- a/Library/Homebrew/linkage_checker.rb +++ b/Library/Homebrew/linkage_checker.rb @@ -63,7 +63,8 @@ class LinkageChecker formula.build.without?(dep) end declared_deps = formula.deps.reject { |dep| filter_out.call(dep) }.map(&:name) - recursive_deps = keg.to_formula.runtime_dependencies.map { |dep| dep.to_formula.full_name } + recursive_deps = keg.to_formula.declared_runtime_dependencies + .map { |dep| dep.to_formula.full_name } declared_dep_names = declared_deps.map { |dep| dep.split("/").last } indirect_deps = [] undeclared_deps = []