diff --git a/Library/Homebrew/cmd/readall.rb b/Library/Homebrew/cmd/readall.rb index 410ce894bd..2eedf9cb59 100644 --- a/Library/Homebrew/cmd/readall.rb +++ b/Library/Homebrew/cmd/readall.rb @@ -11,10 +11,10 @@ module Homebrew usage_banner <<~EOS `readall` [] [] - Import all formulae from the specified , or from all installed taps if none is provided. - This can be useful for debugging issues across all formulae when making + Import all items from the specified , or from all installed taps if none is provided. + This can be useful for debugging issues across all items when making significant changes to `formula.rb`, testing the performance of loading - all formulae or checking if any current formulae have Ruby issues. + all items or checking if any current formulae/casks have Ruby issues. EOS switch "--aliases", description: "Verify any alias symlinks in each tap." @@ -30,7 +30,7 @@ module Homebrew if args.syntax? scan_files = "#{HOMEBREW_LIBRARY_PATH}/**/*.rb" - ruby_files = Dir.glob(scan_files).reject { |file| file =~ %r{/(vendor|cask)/} } + ruby_files = Dir.glob(scan_files).reject { |file| file =~ %r{/(vendor)/} } Homebrew.failed = true unless Readall.valid_ruby_syntax?(ruby_files) end diff --git a/Library/Homebrew/extend/os/linux/readall.rb b/Library/Homebrew/extend/os/linux/readall.rb new file mode 100644 index 0000000000..e9278821e0 --- /dev/null +++ b/Library/Homebrew/extend/os/linux/readall.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module Readall + class << self + def valid_casks?(*) + true + end + end +end diff --git a/Library/Homebrew/extend/os/readall.rb b/Library/Homebrew/extend/os/readall.rb new file mode 100644 index 0000000000..6ddbc3e6d7 --- /dev/null +++ b/Library/Homebrew/extend/os/readall.rb @@ -0,0 +1,3 @@ +# frozen_string_literal: true + +require "extend/os/linux/readall" if OS.linux? diff --git a/Library/Homebrew/readall.rb b/Library/Homebrew/readall.rb index 54c74c01aa..491c406cbb 100644 --- a/Library/Homebrew/readall.rb +++ b/Library/Homebrew/readall.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "formula" +require "cask/cask_loader" module Readall class << self @@ -35,28 +36,43 @@ module Readall end def valid_formulae?(formulae) - failed = false + success = true formulae.each do |file| Formulary.factory(file) rescue Interrupt raise rescue Exception => e # rubocop:disable Lint/RescueException onoe "Invalid formula: #{file}" - puts e - failed = true + $stderr.puts e + success = false end - !failed + success + end + + def valid_casks?(casks) + success = true + casks.each do |file| + Cask::CaskLoader.load(file) + rescue Interrupt + raise + rescue Exception => e # rubocop:disable Lint/RescueException + onoe "Invalid cask: #{file}" + $stderr.puts e + success = false + end + success end def valid_tap?(tap, options = {}) - failed = false + success = true if options[:aliases] valid_aliases = valid_aliases?(tap.alias_dir, tap.formula_dir) - failed = true unless valid_aliases + success = false unless valid_aliases end valid_formulae = valid_formulae?(tap.formula_files) - failed = true unless valid_formulae - !failed + valid_casks = valid_casks?(tap.cask_files) + success = false if !valid_formulae || !valid_casks + success end private @@ -79,3 +95,5 @@ module Readall end end end + +require "extend/os/readall" diff --git a/Library/Homebrew/test/cmd/search_spec.rb b/Library/Homebrew/test/cmd/search_spec.rb index 40932a5c43..43b1cf9a39 100644 --- a/Library/Homebrew/test/cmd/search_spec.rb +++ b/Library/Homebrew/test/cmd/search_spec.rb @@ -8,7 +8,7 @@ describe "Homebrew.search_args" do end describe "brew search", :integration_test do - it "falls back to a GitHub tap search when no formula is found", :needs_network do + it "falls back to a GitHub tap search when no formula is found", :needs_macos, :needs_network do setup_test_formula "testball" setup_remote_tap "homebrew/cask" @@ -16,4 +16,13 @@ describe "brew search", :integration_test do .to output(/firefox/).to_stdout .and be_a_success end + + # doesn't actually need Linux but only want one integration test per-OS. + it "finds formula in search", :need_linux do + setup_test_formula "testball" + + expect { brew "search", "testball" } + .to output(/testball/).to_stdout + .and be_a_success + end end diff --git a/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb b/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb index cbc933817d..7ecb936ec8 100644 --- a/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb +++ b/Library/Homebrew/test/support/helper/spec/shared_context/integration_test.rb @@ -46,7 +46,7 @@ RSpec.shared_context "integration test" do example.run ensure - FileUtils.rm_r HOMEBREW_PREFIX/"bin" + FileUtils.rm_rf HOMEBREW_PREFIX/"bin" end # Generate unique ID to be able to diff --git a/docs/Manpage.md b/docs/Manpage.md index dab65bd9f9..a95886ff5e 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -369,10 +369,10 @@ Rerun the post-install steps for *`formula`*. ### `readall` [*`options`*] [*`tap`*] -Import all formulae from the specified *`tap`*, or from all installed taps if none -is provided. This can be useful for debugging issues across all formulae when -making significant changes to `formula.rb`, testing the performance of loading -all formulae or checking if any current formulae have Ruby issues. +Import all items from the specified *`tap`*, or from all installed taps if none is +provided. This can be useful for debugging issues across all items when making +significant changes to `formula.rb`, testing the performance of loading all +items or checking if any current formulae/casks have Ruby issues. * `--aliases`: Verify any alias symlinks in each tap. diff --git a/manpages/brew.1 b/manpages/brew.1 index 74cc73bc50..c65e7cf4ed 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -486,7 +486,7 @@ Pin the specified \fIformula\fR, preventing them from being upgraded when issuin Rerun the post\-install steps for \fIformula\fR\. . .SS "\fBreadall\fR [\fIoptions\fR] [\fItap\fR]" -Import all formulae from the specified \fItap\fR, or from all installed taps if none is provided\. This can be useful for debugging issues across all formulae when making significant changes to \fBformula\.rb\fR, testing the performance of loading all formulae or checking if any current formulae have Ruby issues\. +Import all items from the specified \fItap\fR, or from all installed taps if none is provided\. This can be useful for debugging issues across all items when making significant changes to \fBformula\.rb\fR, testing the performance of loading all items or checking if any current formulae/casks have Ruby issues\. . .TP \fB\-\-aliases\fR