Port Homebrew::Cmd::Search
This commit is contained in:
parent
d875c970e9
commit
5495ff1eea
@ -1,15 +1,15 @@
|
||||
# typed: true
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "abstract_command"
|
||||
require "formula"
|
||||
require "missing_formula"
|
||||
require "descriptions"
|
||||
require "cli/parser"
|
||||
require "search"
|
||||
|
||||
module Homebrew
|
||||
module_function
|
||||
|
||||
module Cmd
|
||||
class SearchCmd < AbstractCommand
|
||||
PACKAGE_MANAGERS = {
|
||||
repology: ->(query) { "https://repology.org/projects/?search=#{query}" },
|
||||
macports: ->(query) { "https://ports.macports.org/search/?q=#{query}" },
|
||||
@ -25,9 +25,7 @@ module Homebrew
|
||||
},
|
||||
}.freeze
|
||||
|
||||
sig { returns(CLI::Parser) }
|
||||
def search_args
|
||||
Homebrew::CLI::Parser.new do
|
||||
cmd_args do
|
||||
description <<~EOS
|
||||
Perform a substring search of cask tokens and formula names for <text>. If <text>
|
||||
is flanked by slashes, it is interpreted as a regular expression.
|
||||
@ -63,12 +61,10 @@ module Homebrew
|
||||
|
||||
named_args :text_or_regex, min: 1
|
||||
end
|
||||
end
|
||||
|
||||
def search
|
||||
args = search_args.parse
|
||||
|
||||
return if search_package_manager(args)
|
||||
sig { override.void }
|
||||
def run
|
||||
return if search_package_manager
|
||||
|
||||
query = args.named.join(" ")
|
||||
string_or_regex = Search.query_regexp(query)
|
||||
@ -80,7 +76,7 @@ module Homebrew
|
||||
|
||||
Search.search_descriptions(string_or_regex, args)
|
||||
elsif args.pull_request?
|
||||
search_pull_requests(query, args)
|
||||
search_pull_requests(query)
|
||||
else
|
||||
formulae, casks = Search.search_names(string_or_regex, args)
|
||||
print_results(formulae, casks, query)
|
||||
@ -88,10 +84,12 @@ module Homebrew
|
||||
|
||||
puts "Use `brew desc` to list packages with a short description." if args.verbose?
|
||||
|
||||
print_regex_help(args)
|
||||
print_regex_help
|
||||
end
|
||||
|
||||
def print_regex_help(args)
|
||||
private
|
||||
|
||||
def print_regex_help
|
||||
return unless $stdout.tty?
|
||||
|
||||
metacharacters = %w[\\ | ( ) [ ] { } ^ $ * + ?].freeze
|
||||
@ -107,7 +105,7 @@ module Homebrew
|
||||
EOS
|
||||
end
|
||||
|
||||
def search_package_manager(args)
|
||||
def search_package_manager
|
||||
package_manager = PACKAGE_MANAGERS.find { |name,| args[:"#{name}?"] }
|
||||
return false if package_manager.nil?
|
||||
|
||||
@ -116,7 +114,7 @@ module Homebrew
|
||||
true
|
||||
end
|
||||
|
||||
def search_pull_requests(query, args)
|
||||
def search_pull_requests(query)
|
||||
only = if args.open? && !args.closed?
|
||||
"open"
|
||||
elsif args.closed? && !args.open?
|
||||
@ -162,4 +160,6 @@ module Homebrew
|
||||
end
|
||||
puts reason
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
require "cmd/search"
|
||||
require "cmd/shared_examples/args_parse"
|
||||
|
||||
RSpec.describe "brew search" do
|
||||
RSpec.describe Homebrew::Cmd::SearchCmd do
|
||||
it_behaves_like "parseable arguments"
|
||||
|
||||
it "finds formula in search", :integration_test do
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user