# typed: strict # frozen_string_literal: true require "abstract_command" require "readall" require "env_config" module Homebrew module Cmd class ReadallCmd < AbstractCommand cmd_args do description <<~EOS 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 items or checking if any current formulae/casks have Ruby issues. EOS flag "--os=", description: "Read using the given operating system. (Pass `all` to simulate all operating systems.)" flag "--arch=", description: "Read using the given CPU architecture. (Pass `all` to simulate all architectures.)" switch "--aliases", description: "Verify any alias symlinks in each tap." switch "--syntax", description: "Syntax-check all of Homebrew's Ruby files (if no is passed)." switch "--eval-all", description: "Evaluate all available formulae and casks, whether installed or not.", env: :eval_all, odeprecated: true switch "--no-simulate", description: "Don't simulate other system configurations when checking formulae and casks." named_args :tap end sig { override.void } def run Homebrew.with_no_api_env do if args.syntax? && args.no_named? scan_files = "#{HOMEBREW_LIBRARY_PATH}/**/*.rb" ruby_files = Dir.glob(scan_files).grep_v(%r{/(vendor)/}).map { Pathname(it) } Homebrew.failed = true unless Readall.valid_ruby_syntax?(ruby_files) end options = { aliases: args.aliases?, no_simulate: args.no_simulate?, } options[:os_arch_combinations] = args.os_arch_combinations if args.os || args.arch eval_all = args.eval_all? eval_all ||= args.no_named? && Homebrew::EnvConfig.tap_trust_configured? taps = if args.no_named? unless eval_all raise UsageError, "`brew readall` needs a tap, `HOMEBREW_REQUIRE_TAP_TRUST=1` or " \ "`HOMEBREW_NO_REQUIRE_TAP_TRUST=1` set!" end Tap.installed else args.named.to_installed_taps end taps.each do |tap| Homebrew.failed = true unless Readall.valid_tap?(tap, **options) end end end end end end