Merge pull request #17582 from rrotter/desc_search
This commit is contained in:
commit
3aeef5aef2
@ -47,7 +47,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
if search_type.present?
|
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!"
|
raise UsageError, "`brew desc --search` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ module Homebrew
|
|||||||
string_or_regex = Search.query_regexp(query)
|
string_or_regex = Search.query_regexp(query)
|
||||||
|
|
||||||
if args.desc?
|
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!"
|
raise UsageError, "`brew search --desc` needs `--eval-all` passed or `HOMEBREW_EVAL_ALL` set!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -8,8 +8,10 @@ require "search"
|
|||||||
# Helper class for printing and searching descriptions.
|
# Helper class for printing and searching descriptions.
|
||||||
class Descriptions
|
class Descriptions
|
||||||
# Given a regex, find all formulae whose specified fields contain a match.
|
# 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?)
|
def self.search(string_or_regex, field, cache_store,
|
||||||
cache_store.populate_if_empty!(eval_all:)
|
eval_all = Homebrew::EnvConfig.eval_all?, cache_store_hash: false)
|
||||||
|
|
||||||
|
cache_store.populate_if_empty!(eval_all:) unless cache_store_hash
|
||||||
|
|
||||||
results = case field
|
results = case field
|
||||||
when :name
|
when :name
|
||||||
|
@ -22,9 +22,19 @@ module Homebrew
|
|||||||
|
|
||||||
if args.formula? || both
|
if args.formula? || both
|
||||||
ohai "Formulae"
|
ohai "Formulae"
|
||||||
CacheStoreDatabase.use(:descriptions) do |db|
|
if eval_all
|
||||||
cache_store = DescriptionCacheStore.new(db)
|
CacheStoreDatabase.use(:descriptions) do |db|
|
||||||
Descriptions.search(string_or_regex, search_type, cache_store, eval_all).print
|
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
|
||||||
end
|
end
|
||||||
return if !args.cask? && !both
|
return if !args.cask? && !both
|
||||||
@ -32,9 +42,19 @@ module Homebrew
|
|||||||
puts if both
|
puts if both
|
||||||
|
|
||||||
ohai "Casks"
|
ohai "Casks"
|
||||||
CacheStoreDatabase.use(:cask_descriptions) do |db|
|
if eval_all
|
||||||
cache_store = CaskDescriptionCacheStore.new(db)
|
CacheStoreDatabase.use(:cask_descriptions) do |db|
|
||||||
Descriptions.search(string_or_regex, search_type, cache_store, eval_all).print
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -30,4 +30,11 @@ RSpec.describe Homebrew::Cmd::Desc do
|
|||||||
.to output(/testball: Some test/).to_stdout
|
.to output(/testball: Some test/).to_stdout
|
||||||
.and not_to_output.to_stderr
|
.and not_to_output.to_stderr
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "successfully searches without --eval-all, with API", :integration_test do
|
||||||
|
setup_test_formula "testball"
|
||||||
|
|
||||||
|
expect { brew "desc", "--search", "testball", "HOMEBREW_NO_INSTALL_FROM_API" => nil }
|
||||||
|
.to be_a_success
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "search"
|
require "search"
|
||||||
|
require "descriptions"
|
||||||
|
require "cmd/desc"
|
||||||
|
|
||||||
RSpec.describe Homebrew::Search do
|
RSpec.describe Homebrew::Search do
|
||||||
describe "#query_regexp" do
|
describe "#query_regexp" do
|
||||||
@ -57,4 +59,34 @@ RSpec.describe Homebrew::Search do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#search_descriptions" do
|
||||||
|
let(:args) { Homebrew::Cmd::Desc.new(["min_arg_placeholder"]).args }
|
||||||
|
|
||||||
|
context "with api" do
|
||||||
|
let(:api_formulae) do
|
||||||
|
{ "testball" => { "desc" => "Some test" } }
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:api_casks) do
|
||||||
|
{ "testball" => { "desc" => "Some test", "name" => ["Test Ball"] } }
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(Homebrew::API::Formula).to receive(:all_formulae).and_return(api_formulae)
|
||||||
|
allow(Homebrew::API::Cask).to receive(:all_casks).and_return(api_casks)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "searches formula descriptions" do
|
||||||
|
expect { described_class.search_descriptions(described_class.query_regexp("some"), args) }
|
||||||
|
.to output(/testball: Some test/).to_stdout
|
||||||
|
end
|
||||||
|
|
||||||
|
it "searches cask descriptions", :needs_macos do
|
||||||
|
expect { described_class.search_descriptions(described_class.query_regexp("ball"), args) }
|
||||||
|
.to output(/testball: \(Test Ball\) Some test/).to_stdout
|
||||||
|
.and not_to_output(/testball: Some test/).to_stdout
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user