diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index 8a5c2997ab..986f8a713f 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -203,13 +203,12 @@ module Homebrew def puts_deps_tree(dependents, args:, recursive: false) dependents.each do |d| puts d.full_name - @dep_stack = [] - recursive_deps_tree(d, "", recursive, args: args) + recursive_deps_tree(d, dep_stack: [], prefix: "", recursive: recursive, args: args) puts end end - def recursive_deps_tree(f, prefix, recursive, args:) + def recursive_deps_tree(f, dep_stack:, prefix:, recursive:, args:) includes, ignores = args_includes_ignores(args) dependables = @use_runtime_dependencies ? f.runtime_dependencies : f.deps deps = reject_ignores(dependables, ignores, includes) @@ -217,7 +216,7 @@ module Homebrew dependables = reqs + deps max = dependables.length - 1 - @dep_stack.push f.name + dep_stack.push f.name dependables.each_with_index do |dep, i| next if !args.include_requirements? && dep.is_a?(Requirement) @@ -228,7 +227,7 @@ module Homebrew end display_s = "#{tree_lines} #{dep_display_name(dep, args: args)}" - is_circular = @dep_stack.include?(dep.name) + is_circular = dep_stack.include?(dep.name) display_s = "#{display_s} (CIRCULAR DEPENDENCY)" if is_circular puts "#{prefix}#{display_s}" @@ -240,11 +239,15 @@ module Homebrew "│ " end - if dep.is_a? Dependency - recursive_deps_tree(Formulary.factory(dep.name), prefix + prefix_addition, true, args: args) - end + next unless dep.is_a? Dependency + + recursive_deps_tree(Formulary.factory(dep.name), + dep_stack: dep_stack, + prefix: prefix + prefix_addition, + recursive: true, + args: args) end - @dep_stack.pop + dep_stack.pop end end diff --git a/Library/Homebrew/utils/topological_hash.rb b/Library/Homebrew/utils/topological_hash.rb index c6a88b3268..cac774c857 100644 --- a/Library/Homebrew/utils/topological_hash.rb +++ b/Library/Homebrew/utils/topological_hash.rb @@ -20,7 +20,7 @@ module Utils packages = Array(packages) packages.each do |cask_or_formula| - next accumulator if accumulator.key?(cask_or_formula) + next if accumulator.key?(cask_or_formula) if cask_or_formula.is_a?(Cask::Cask) formula_deps = cask_or_formula.depends_on @@ -39,9 +39,7 @@ module Utils .map { |c| Cask::CaskLoader.load(c, config: nil) } end - accumulator[cask_or_formula] ||= [] - accumulator[cask_or_formula] += formula_deps - accumulator[cask_or_formula] += cask_deps + accumulator[cask_or_formula] = formula_deps + cask_deps graph_package_dependencies(formula_deps, accumulator) graph_package_dependencies(cask_deps, accumulator)