From a2939be08a75842da297f20176c4b8d891277192 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Tue, 19 May 2020 19:12:47 +0100 Subject: [PATCH 1/3] formula_installer: don't propagate --include-test unless requested --- Library/Homebrew/cli/args.rb | 6 ++++++ Library/Homebrew/formula_installer.rb | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb index 202b5557db..b4dfc2b9cb 100644 --- a/Library/Homebrew/cli/args.rb +++ b/Library/Homebrew/cli/args.rb @@ -175,6 +175,12 @@ module Homebrew formulae.any? { |args_f| args_f.full_name == f.full_name } end + def include_formula_test_deps?(f) + return false unless include_test? + + formulae.any? { |args_f| args_f.full_name == f.full_name } + end + private def option_to_name(option) diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index affeae46ef..691432ff5c 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -490,7 +490,7 @@ class FormulaInstaller Dependency.prune elsif dep.test? || (dep.build? && install_bottle_for?(dependent, build)) keep = false - keep ||= dep.test? && include_test? && dependent == formula + keep ||= dep.test? && include_test? && Homebrew.args.include_formula_test_deps?(dependent) keep ||= dep.build? && !install_bottle_for?(dependent, build) Dependency.prune unless keep elsif dep.prune_if_build_and_not_dependent?(dependent) @@ -569,6 +569,7 @@ class FormulaInstaller fi.build_from_source = Homebrew.args.build_formula_from_source?(df) fi.force_bottle = false + fi.include_test = Homebrew.args.include_formula_test_deps?(df) fi.verbose = verbose? fi.quiet = quiet? fi.debug = debug? @@ -611,6 +612,7 @@ class FormulaInstaller fi.options &= df.options fi.build_from_source = Homebrew.args.build_formula_from_source?(df) fi.force_bottle = false + fi.include_test = Homebrew.args.include_formula_test_deps?(df) fi.verbose = verbose? fi.quiet = quiet? fi.debug = debug? From b8ba083e12d51b9689ced835e094c3f418030b95 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Tue, 19 May 2020 19:14:40 +0100 Subject: [PATCH 2/3] dependencies: fix recursive_includes not handling deps of test deps --- Library/Homebrew/dependencies.rb | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb index 3ef90b2ed1..512a06a09b 100644 --- a/Library/Homebrew/dependencies.rb +++ b/Library/Homebrew/dependencies.rb @@ -100,16 +100,11 @@ module Homebrew klass.prune if ignores.include?("recommended?") || dependent.build.without?(dep) elsif dep.optional? klass.prune if !includes.include?("optional?") && !dependent.build.with?(dep) - elsif dep.test? - if includes.include?("test?") - Dependency.keep_but_prune_recursive_deps if type == :dependencies - elsif dep.build? - klass.prune unless includes.include?("build?") - else - klass.prune - end - elsif dep.build? - klass.prune unless includes.include?("build?") + elsif dep.build? || dep.test? + keep = false + keep ||= dep.test? && includes.include?("test?") && dependent == formula + keep ||= dep.build? && includes.include?("build?") + klass.prune unless keep end # If a tap isn't installed, we can't find the dependencies of one of From 5b5833c33b7681acadcf7c49c0ecdbe254b3a934 Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Tue, 19 May 2020 19:17:13 +0100 Subject: [PATCH 3/3] dependency: return test deps on all levels Filtering for this is now handled properly in places where this function is used. In some scenarios, we _want_ test deps on more than the first level (Homebrew.args.include_formula_test_deps?). --- Library/Homebrew/dependency.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/Library/Homebrew/dependency.rb b/Library/Homebrew/dependency.rb index 21b8c778e7..d97a5a22a1 100644 --- a/Library/Homebrew/dependency.rb +++ b/Library/Homebrew/dependency.rb @@ -89,9 +89,6 @@ class Dependency deps.each do |dep| next if dependent.name == dep.name - # we only care about one level of test dependencies. - next if dep.test? && @expand_stack.length > 1 - case action(dependent, dep, &block) when :prune next