diff --git a/Library/Homebrew/cmd/desc.rb b/Library/Homebrew/cmd/desc.rb index 70088f5a99832..b43d9235f8f7b 100644 --- a/Library/Homebrew/cmd/desc.rb +++ b/Library/Homebrew/cmd/desc.rb @@ -47,7 +47,7 @@ def run end if search_type.present? - if !args.eval_all? && !Homebrew::EnvConfig.eval_all? + if !args.eval_all? && !Homebrew::EnvConfig.eval_all? && Homebrew::EnvConfig.no_install_from_api? raise UsageError, "`brew desc --search` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!" end diff --git a/Library/Homebrew/cmd/search.rb b/Library/Homebrew/cmd/search.rb index ccdefd308d018..8c6d89a34414f 100644 --- a/Library/Homebrew/cmd/search.rb +++ b/Library/Homebrew/cmd/search.rb @@ -70,7 +70,7 @@ def run string_or_regex = Search.query_regexp(query) if args.desc? - if !args.eval_all? && !Homebrew::EnvConfig.eval_all? + if !args.eval_all? && !Homebrew::EnvConfig.eval_all? && Homebrew::EnvConfig.no_install_from_api? raise UsageError, "`brew search --desc` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!" end diff --git a/Library/Homebrew/descriptions.rb b/Library/Homebrew/descriptions.rb index 309ff26cc95e1..967c0d7c22010 100644 --- a/Library/Homebrew/descriptions.rb +++ b/Library/Homebrew/descriptions.rb @@ -8,8 +8,10 @@ # Helper class for printing and searching descriptions. class Descriptions # Given a regex, find all formulae whose specified fields contain a match. - def self.search(string_or_regex, field, cache_store, eval_all = Homebrew::EnvConfig.eval_all?) - cache_store.populate_if_empty!(eval_all:) + def self.search(string_or_regex, field, cache_store, + eval_all = Homebrew::EnvConfig.eval_all?, cache_store_hash: false) + + cache_store.populate_if_empty!(eval_all:) unless cache_store_hash results = case field when :name diff --git a/Library/Homebrew/search.rb b/Library/Homebrew/search.rb index 8c04f4356156d..3e78204d09962 100644 --- a/Library/Homebrew/search.rb +++ b/Library/Homebrew/search.rb @@ -22,9 +22,19 @@ def self.search_descriptions(string_or_regex, args, search_type: :desc) if args.formula? || both ohai "Formulae" - CacheStoreDatabase.use(:descriptions) do |db| - cache_store = DescriptionCacheStore.new(db) - Descriptions.search(string_or_regex, search_type, cache_store, eval_all).print + if eval_all + CacheStoreDatabase.use(:descriptions) do |db| + cache_store = DescriptionCacheStore.new(db) + Descriptions.search(string_or_regex, search_type, cache_store, eval_all).print + end + else + unofficial = Tap.all.sum { |tap| tap.official? ? 0 : tap.formula_files.size } + if unofficial.positive? + opoo "Use `--eval-all` to search #{unofficial} additional " \ + "#{Utils.pluralize("formula", unofficial, plural: "e")} in third party taps." + end + descriptions = Homebrew::API::Formula.all_formulae.transform_values { |data| data["desc"] } + Descriptions.search(string_or_regex, search_type, descriptions, eval_all, cache_store_hash: true).print end end return if !args.cask? && !both @@ -32,9 +42,19 @@ def self.search_descriptions(string_or_regex, args, search_type: :desc) puts if both ohai "Casks" - CacheStoreDatabase.use(:cask_descriptions) do |db| - cache_store = CaskDescriptionCacheStore.new(db) - Descriptions.search(string_or_regex, search_type, cache_store, eval_all).print + if eval_all + CacheStoreDatabase.use(:cask_descriptions) do |db| + cache_store = CaskDescriptionCacheStore.new(db) + Descriptions.search(string_or_regex, search_type, cache_store, eval_all).print + end + else + unofficial = Tap.all.sum { |tap| tap.official? ? 0 : tap.cask_files.size } + if unofficial.positive? + opoo "Use `--eval-all` to search #{unofficial} additional " \ + "#{Utils.pluralize("cask", unofficial)} in third party taps." + end + descriptions = Homebrew::API::Cask.all_casks.transform_values { |c| [c["name"].join(", "), c["desc"]] } + Descriptions.search(string_or_regex, search_type, descriptions, eval_all, cache_store_hash: true).print end end