Check for --eval-all before using HOMEBREW_EVAL_ALL

This commit is contained in:
Carlo Cabrera 2023-04-04 23:58:32 +08:00
parent a4ebb96fe6
commit 5194e5c65e
No known key found for this signature in database
GPG Key ID: C74D447FC549A1D0
2 changed files with 25 additions and 9 deletions

View File

@ -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(",")

View File

@ -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