brew/Library/Homebrew/extend/os/linux/dev-cmd/determine-test-runners.rb

50 lines
1.9 KiB
Ruby
Executable File

# typed: strict
# frozen_string_literal: true
class TestRunnerFormula
extend T::Sig
sig { returns(T::Array[TestRunnerFormula]) }
def dependents
@dependent_hash[ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"].present?] ||= with_env(HOMEBREW_STDERR: "1") do
Utils.safe_popen_read(
HOMEBREW_BREW_FILE, "uses", "--formulae", "--eval-all", "--include-build", "--include-test", name
).split("\n").map { |dependent| TestRunnerFormula.new(dependent) }.freeze
end
@dependent_hash.fetch(ENV["HOMEBREW_SIMULATE_MACOS_ON_LINUX"].present?)
end
end
module Homebrew
extend T::Sig
sig {
params(
testing_formulae: T::Array[TestRunnerFormula],
reject_platform: T.nilable(Symbol),
reject_arch: T.nilable(Symbol),
select_macos_version: T.nilable(MacOS::Version),
).returns(T::Boolean)
}
def self.formulae_have_untested_dependents?(testing_formulae, reject_platform:, reject_arch:, select_macos_version:)
testing_formulae.any? do |formula|
# If the formula has a platform/arch/macOS version requirement, then its
# dependents don't need to be tested if these requirements are not satisfied.
next false if reject_platform && formula.send(:"#{reject_platform}_only?")
next false if reject_arch && formula.send(:"#{reject_arch}_only?")
next false if select_macos_version && !formula.compatible_with?(select_macos_version)
compatible_dependents = formula.dependents.dup
compatible_dependents.reject! { |dependent_f| dependent_f.send(:"#{reject_arch}_only?") } if reject_arch
compatible_dependents.reject! { |dependent_f| dependent_f.send(:"#{reject_platform}_only?") } if reject_platform
if select_macos_version
compatible_dependents.select! { |dependent_f| dependent_f.compatible_with?(select_macos_version) }
end
(compatible_dependents - testing_formulae).present?
end
end
end