mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
74 lines
2.0 KiB
Ruby
74 lines
2.0 KiB
Ruby
module Homebrew
|
|
module Search
|
|
def query_regexp(query)
|
|
if m = query.match(%r{^/(.*)/$})
|
|
Regexp.new(m[1])
|
|
else
|
|
/.*#{Regexp.escape(query)}.*/i
|
|
end
|
|
rescue RegexpError
|
|
raise "#{query} is not a valid regex."
|
|
end
|
|
|
|
def search_taps(query, silent: false)
|
|
return [], [] if ENV["HOMEBREW_NO_GITHUB_API"]
|
|
|
|
unless silent
|
|
# Use stderr to avoid breaking parsed output
|
|
$stderr.puts Formatter.headline("Searching taps on GitHub...", color: :blue)
|
|
end
|
|
|
|
matches = GitHub.search_code(
|
|
user: "Homebrew",
|
|
path: ["Formula", "Casks", "."],
|
|
filename: query,
|
|
extension: "rb",
|
|
)
|
|
|
|
matches.inject([[], []]) do |(formulae, casks), match|
|
|
name = File.basename(match["path"], ".rb")
|
|
tap = Tap.fetch(match["repository"]["full_name"])
|
|
full_name = "#{tap.name}/#{name}"
|
|
|
|
if tap.installed?
|
|
[formulae, casks]
|
|
elsif match["path"].start_with?("Casks/")
|
|
[formulae, [*casks, full_name].sort]
|
|
else
|
|
[[*formulae, full_name].sort, casks]
|
|
end
|
|
end
|
|
rescue GitHub::Error => error
|
|
opoo "Error searching on GitHub: #{error}\n"
|
|
[[], []]
|
|
end
|
|
|
|
def search_formulae(regex)
|
|
# Use stderr to avoid breaking parsed output
|
|
$stderr.puts Formatter.headline("Searching local taps...", color: :blue)
|
|
|
|
aliases = Formula.alias_full_names
|
|
results = (Formula.full_names + aliases).grep(regex).sort
|
|
|
|
results.map do |name|
|
|
begin
|
|
formula = Formulary.factory(name)
|
|
canonical_name = formula.name
|
|
canonical_full_name = formula.full_name
|
|
rescue
|
|
canonical_name = canonical_full_name = name
|
|
end
|
|
|
|
# Ignore aliases from results when the full name was also found
|
|
next if aliases.include?(name) && results.include?(canonical_full_name)
|
|
|
|
if (HOMEBREW_CELLAR/canonical_name).directory?
|
|
pretty_installed(name)
|
|
else
|
|
name
|
|
end
|
|
end.compact
|
|
end
|
|
end
|
|
end
|