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/docs/Manpage.md b/docs/Manpage.md index 0b746685a1..e242f36fc7 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -367,10 +367,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 49bf5bd86e..768ffb6b4d 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -482,7 +482,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