From 057f561d2c35dc7c0f4d000e8776b051b504fa82 Mon Sep 17 00:00:00 2001 From: Douglas Eichelberger Date: Mon, 1 Apr 2024 10:05:02 -0700 Subject: [PATCH] Port Homebrew::Cmd::Readall --- Library/Homebrew/cmd/readall.rb | 108 +++++++++++----------- Library/Homebrew/extend/os/mac/readall.rb | 2 + Library/Homebrew/test/cmd/readall_spec.rb | 3 +- 3 files changed, 57 insertions(+), 56 deletions(-) diff --git a/Library/Homebrew/cmd/readall.rb b/Library/Homebrew/cmd/readall.rb index 530c41e3ee..7d12ef53a4 100644 --- a/Library/Homebrew/cmd/readall.rb +++ b/Library/Homebrew/cmd/readall.rb @@ -1,69 +1,67 @@ -# typed: true +# typed: strict # frozen_string_literal: true +require "abstract_command" require "readall" -require "cli/parser" require "env_config" module Homebrew - module_function + 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. " \ + "Implied if `HOMEBREW_EVAL_ALL` is set." + switch "--no-simulate", + description: "Don't simulate other system configurations when checking formulae and casks." - sig { returns(CLI::Parser) } - def readall_args - Homebrew::CLI::Parser.new 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. " \ - "Implied if `HOMEBREW_EVAL_ALL` is set." - switch "--no-simulate", - description: "Don't simulate other system configurations when checking formulae and casks." - - named_args :tap - end - end - - def readall - args = readall_args.parse - - 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)/}) - - Homebrew.failed = true unless Readall.valid_ruby_syntax?(ruby_files) + named_args :tap end - options = { - aliases: args.aliases?, - no_simulate: args.no_simulate?, - } - options[:os_arch_combinations] = args.os_arch_combinations if args.os || args.arch + 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)/}) - taps = if args.no_named? - if !args.eval_all? && !Homebrew::EnvConfig.eval_all? - raise UsageError, "`brew readall` needs a tap or `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!" + 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 + + taps = if args.no_named? + if !args.eval_all? && !Homebrew::EnvConfig.eval_all? + raise UsageError, "`brew readall` needs a tap or `--eval-all` passed or `HOMEBREW_EVAL_ALL` 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 - - 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 diff --git a/Library/Homebrew/extend/os/mac/readall.rb b/Library/Homebrew/extend/os/mac/readall.rb index 1701f909d1..31ef4ebb92 100644 --- a/Library/Homebrew/extend/os/mac/readall.rb +++ b/Library/Homebrew/extend/os/mac/readall.rb @@ -3,6 +3,8 @@ module Readall class << self + undef valid_casks? + def valid_casks?(tap, os_name: nil, arch: Hardware::CPU.type) return true if os_name == :linux diff --git a/Library/Homebrew/test/cmd/readall_spec.rb b/Library/Homebrew/test/cmd/readall_spec.rb index a16c3669c4..00e2b78875 100644 --- a/Library/Homebrew/test/cmd/readall_spec.rb +++ b/Library/Homebrew/test/cmd/readall_spec.rb @@ -1,8 +1,9 @@ # frozen_string_literal: true +require "cmd/readall" require "cmd/shared_examples/args_parse" -RSpec.describe "brew readall" do +RSpec.describe Homebrew::Cmd::ReadallCmd do it_behaves_like "parseable arguments" it "imports all Formulae for a given Tap", :integration_test do