From 5194e5c65ed1588966670c4fdbc1adfe1e08cb44 Mon Sep 17 00:00:00 2001 From: Carlo Cabrera <30379873+carlocab@users.noreply.github.com> Date: Tue, 4 Apr 2023 23:58:32 +0800 Subject: [PATCH] Check for `--eval-all` before using `HOMEBREW_EVAL_ALL` --- .../dev-cmd/determine-test-runners.rb | 32 ++++++++++++++----- .../dev-cmd/determine-test-runners_spec.rb | 2 +- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/dev-cmd/determine-test-runners.rb b/Library/Homebrew/dev-cmd/determine-test-runners.rb index 19ae02829d..6059022a90 100755 --- a/Library/Homebrew/dev-cmd/determine-test-runners.rb +++ b/Library/Homebrew/dev-cmd/determine-test-runners.rb @@ -13,11 +13,15 @@ class TestRunnerFormula sig { returns(Formula) } attr_reader :formula - sig { params(formula: Formula).void } - def initialize(formula) + sig { returns(T::Boolean) } + attr_reader :eval_all + + sig { params(formula: Formula, eval_all: T::Boolean).void } + def initialize(formula, eval_all: Homebrew::EnvConfig.eval_all?) @formula = T.let(formula, Formula) @name = T.let(formula.name, String) @dependent_hash = T.let({}, T::Hash[Symbol, T::Array[TestRunnerFormula]]) + @eval_all = T.let(eval_all, T::Boolean) freeze end @@ -57,11 +61,16 @@ class TestRunnerFormula sig { params(cache_key: Symbol).returns(T::Array[TestRunnerFormula]) } def dependents(cache_key) - # TODO: Check that `--eval-all` or `HOMEBREW_EVAL_ALL` is set. - @dependent_hash[cache_key] ||= with_env(HOMEBREW_EVAL_ALL: "1") do - Formula.all + formula_selector, eval_all_env = if eval_all || Homebrew::EnvConfig.eval_all? + [:all, "1"] + else + [:installed, nil] + end + + @dependent_hash[cache_key] ||= with_env(HOMEBREW_EVAL_ALL: eval_all_env) do + Formula.send(formula_selector) .select { |candidate_f| candidate_f.deps.map(&:name).include?(name) } - .map { |f| TestRunnerFormula.new(f) } + .map { |f| TestRunnerFormula.new(f, eval_all: eval_all) } .freeze end @@ -80,8 +89,11 @@ module Homebrew Determines the runners used to test formulae or their dependents. EOS + switch "--eval-all", + description: "Evaluate all available formulae, whether installed or not, to determine testing " \ + "dependents." switch "--dependents", - description: "Determine runners for testing dependents." + description: "Determine runners for testing dependents. Requires `--eval-all` or `HOMEBREW_EVAL_ALL`." named_args min: 1, max: 2 @@ -156,10 +168,14 @@ module Homebrew def self.determine_test_runners args = determine_test_runners_args.parse + eval_all = args.eval_all? || Homebrew::EnvConfig.eval_all? + + odie "`--dependents` requires `--eval-all` or `HOMEBREW_EVAL_ALL`!" if args.dependents? && !eval_all + Formulary.enable_factory_cache! testing_formulae = args.named.first.split(",") - testing_formulae.map! { |name| TestRunnerFormula.new(Formula[name]) } + testing_formulae.map! { |name| TestRunnerFormula.new(Formula[name], eval_all: eval_all) } .freeze deleted_formulae = args.named.second&.split(",") diff --git a/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb b/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb index 6f6d870f47..f6da916c26 100644 --- a/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb +++ b/Library/Homebrew/test/dev-cmd/determine-test-runners_spec.rb @@ -167,7 +167,7 @@ describe "brew determine-test-runners" do setup_test_formula "testball" expect do - brew "determine-test-runners", "--dependents", "testball", + brew "determine-test-runners", "--eval-all", "--dependents", "testball", runner_env.merge({ "GITHUB_OUTPUT" => github_output }) end .to not_to_output.to_stdout