From 69c31d275f617ed19c9625137d1ddb9a366c4ab2 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Wed, 17 Apr 2024 23:42:09 +0100 Subject: [PATCH] Only `brew desc --search` needs `--eval-all` - It was suggested in https://github.com/Homebrew/brew/issues/ 16733 that `brew desc ` should work like `brew info ` and print the description of the package without needing `--eval-all`. - Looking at the code, it seems like it's only searching that needs `--eval-all`, so limit the check to that. Before: ```shell $ brew desc hello Error: `brew desc` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set! ``` After: ```shell $ brew desc hello hello: Program providing model for GNU coding standards and practices $ brew desc --search hello Error: Invalid usage: `brew desc --search` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set! $ brew desc --search --eval-all hello ==> Formulae dsh: Dancer's shell, or distributed shell hello: Program providing model for GNU coding standards and practices ``` --- Library/Homebrew/cmd/desc.rb | 38 +++++++++++++------------- Library/Homebrew/test/cmd/desc_spec.rb | 18 +++++++++++- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/Library/Homebrew/cmd/desc.rb b/Library/Homebrew/cmd/desc.rb index 7e963e21cb..70088f5a99 100644 --- a/Library/Homebrew/cmd/desc.rb +++ b/Library/Homebrew/cmd/desc.rb @@ -38,10 +38,6 @@ module Homebrew sig { override.void } def run - if !args.eval_all? && !Homebrew::EnvConfig.eval_all? - raise UsageError, "`brew desc` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!" - end - search_type = if args.search? :either elsif args.name? @@ -50,25 +46,29 @@ module Homebrew :desc end - if search_type.blank? - desc = {} - args.named.to_formulae_and_casks.each do |formula_or_cask| - case formula_or_cask - when Formula - desc[formula_or_cask.full_name] = formula_or_cask.desc - when Cask::Cask - description = formula_or_cask.desc.presence || Formatter.warning("[no description]") - desc[formula_or_cask.full_name] = "(#{formula_or_cask.name.join(", ")}) #{description}" - else - raise TypeError, "Unsupported formula_or_cask type: #{formula_or_cask.class}" - end + if search_type.present? + if !args.eval_all? && !Homebrew::EnvConfig.eval_all? + raise UsageError, "`brew desc --search` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!" end - Descriptions.new(desc).print - else + query = args.named.join(" ") string_or_regex = Search.query_regexp(query) - Search.search_descriptions(string_or_regex, args, search_type:) + return Search.search_descriptions(string_or_regex, args, search_type:) end + + desc = {} + args.named.to_formulae_and_casks.each do |formula_or_cask| + case formula_or_cask + when Formula + desc[formula_or_cask.full_name] = formula_or_cask.desc + when Cask::Cask + description = formula_or_cask.desc.presence || Formatter.warning("[no description]") + desc[formula_or_cask.full_name] = "(#{formula_or_cask.name.join(", ")}) #{description}" + else + raise TypeError, "Unsupported formula_or_cask type: #{formula_or_cask.class}" + end + end + Descriptions.new(desc).print end end end diff --git a/Library/Homebrew/test/cmd/desc_spec.rb b/Library/Homebrew/test/cmd/desc_spec.rb index 0bd9a87840..1ceb790260 100644 --- a/Library/Homebrew/test/cmd/desc_spec.rb +++ b/Library/Homebrew/test/cmd/desc_spec.rb @@ -9,9 +9,25 @@ RSpec.describe Homebrew::Cmd::Desc do it "shows a given Formula's description", :integration_test do setup_test_formula "testball" - expect { brew "desc", "--eval-all", "testball" } + expect { brew "desc", "testball" } .to output("testball: Some test\n").to_stdout .and not_to_output.to_stderr .and be_a_success end + + it "errors when searching without --eval-all", :integration_test do + setup_test_formula "testball" + + expect { brew "desc", "--search", "testball" } + .to output(/`brew desc --search` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!/).to_stderr + .and be_a_failure + end + + it "successfully searches with --search --eval-all", :integration_test do + setup_test_formula "testball" + + expect { brew "desc", "--search", "--eval-all", "ball" } + .to output(/testball: Some test/).to_stdout + .and not_to_output.to_stderr + end end