From d1b09a90da17e53d2c8d5fae5d170b25deba538b Mon Sep 17 00:00:00 2001 From: Bevan Kay Date: Tue, 28 Feb 2023 18:54:27 +1100 Subject: [PATCH] cask/auditor: only audit 10 languages by default on casks with many languages --- Library/Homebrew/cask/auditor.rb | 12 +++- Library/Homebrew/test/cask/cmd/audit_spec.rb | 8 +++ .../cask/Casks/with-many-languages.rb | 55 +++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 Library/Homebrew/test/support/fixtures/cask/Casks/with-many-languages.rb diff --git a/Library/Homebrew/cask/auditor.rb b/Library/Homebrew/cask/auditor.rb index a450040dcc..72c104953a 100644 --- a/Library/Homebrew/cask/auditor.rb +++ b/Library/Homebrew/cask/auditor.rb @@ -48,12 +48,22 @@ module Cask @except = except end + LANGUAGE_BLOCK_LIMIT = 10 + def audit warnings = Set.new errors = Set.new if !language && language_blocks - language_blocks.each_key do |l| + if language_blocks.length > LANGUAGE_BLOCK_LIMIT && !@audit_new_cask + sample_keys = language_blocks.keys.sample(LANGUAGE_BLOCK_LIMIT) + sample_languages = language_blocks.select { |k| sample_keys.include?(k) } + ohai "Auditing a sample of available languages: #{sample_keys.map { |lang| lang[0].to_s }.to_sentence}" + else + sample_languages = language_blocks + end + + sample_languages.each_key do |l| audit = audit_languages(l) summary = audit.summary(include_passed: output_passed?, include_warnings: output_warnings?) if summary.present? && output_summary?(audit) diff --git a/Library/Homebrew/test/cask/cmd/audit_spec.rb b/Library/Homebrew/test/cask/cmd/audit_spec.rb index fb5d2b3873..1c48cc123f 100644 --- a/Library/Homebrew/test/cask/cmd/audit_spec.rb +++ b/Library/Homebrew/test/cask/cmd/audit_spec.rb @@ -5,6 +5,7 @@ require "cask/auditor" describe Cask::Cmd::Audit, :cask do let(:cask) { Cask::Cask.new("cask") } + let(:cask_with_many_languages) { Cask::CaskLoader.load(cask_path("with-many-languages")) } let(:result) { { warnings: Set.new, errors: Set.new } } describe "selection of Casks to audit" do @@ -160,4 +161,11 @@ describe Cask::Cmd::Audit, :cask do described_class.run("casktoken") end + + it "audits a sample of language when cask contains more than 10 languages" do + allow(Cask::CaskLoader).to receive(:load).and_return(cask_with_many_languages) + expect { + described_class.run("with-many-languages") + }.to output(/==> auditing a sample of available languages/im).to_stdout + end end diff --git a/Library/Homebrew/test/support/fixtures/cask/Casks/with-many-languages.rb b/Library/Homebrew/test/support/fixtures/cask/Casks/with-many-languages.rb new file mode 100644 index 0000000000..3e88465e06 --- /dev/null +++ b/Library/Homebrew/test/support/fixtures/cask/Casks/with-many-languages.rb @@ -0,0 +1,55 @@ +cask "with-many-languages" do + version "1.2.3" + + language "en", default: true do + sha256 :no_check + "en" + end + language "cs" do + sha256 :no_check + "cs" + end + language "es-AR" do + sha256 :no_check + "es-AR" + end + language "ff" do + sha256 :no_check + "ff" + end + language "fi" do + sha256 :no_check + "fi" + end + language "gn" do + sha256 :no_check + "gn" + end + language "gu" do + sha256 :no_check + "gu" + end + language "ko" do + sha256 :no_check + "ko" + end + language "ru" do + sha256 :no_check + "ru" + end + language "sv" do + sha256 :no_check + "sv" + end + language "th" do + sha256 :no_check + "th" + end + + name "Caffeine" + desc "Keep your mac awake" + url "file://#{TEST_FIXTURE_DIR}/cask/caffeine#{version}.zip" + homepage "https://brew.sh/" + + app "Caffeine.app" +end