Refactor search_taps to return Formulae and Casks separately.
This commit is contained in:
parent
9e807f8fe4
commit
8b33fbef51
@ -61,18 +61,18 @@ module Homebrew
|
|||||||
results = Array(result)
|
results = Array(result)
|
||||||
rescue FormulaUnavailableError
|
rescue FormulaUnavailableError
|
||||||
_, _, name = query.split("/", 3)
|
_, _, name = query.split("/", 3)
|
||||||
results = search_taps(name)
|
results = search_taps(name).flatten.sort
|
||||||
end
|
end
|
||||||
|
|
||||||
puts Formatter.columns(results.sort) unless results.empty?
|
puts Formatter.columns(results) unless results.empty?
|
||||||
else
|
else
|
||||||
query = args.remaining.first
|
query = args.remaining.first
|
||||||
regex = query_regexp(query)
|
regex = query_regexp(query)
|
||||||
local_results = search_formulae(regex)
|
local_results = search_formulae(regex)
|
||||||
puts Formatter.columns(local_results.sort) unless local_results.empty?
|
puts Formatter.columns(local_results.sort) unless local_results.empty?
|
||||||
|
|
||||||
tap_results = search_taps(query)
|
tap_results = search_taps(query).flatten.sort
|
||||||
puts Formatter.columns(tap_results.sort) unless tap_results.empty?
|
puts Formatter.columns(tap_results) unless tap_results.empty?
|
||||||
|
|
||||||
if $stdout.tty?
|
if $stdout.tty?
|
||||||
count = local_results.length + tap_results.length
|
count = local_results.length + tap_results.length
|
||||||
@ -116,30 +116,36 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
|
|
||||||
def search_taps(query, silent: false)
|
def search_taps(query, silent: false)
|
||||||
return [] if ENV["HOMEBREW_NO_GITHUB_API"]
|
return [], [] if ENV["HOMEBREW_NO_GITHUB_API"]
|
||||||
|
|
||||||
# Use stderr to avoid breaking parsed output
|
|
||||||
unless silent
|
unless silent
|
||||||
|
# Use stderr to avoid breaking parsed output
|
||||||
$stderr.puts Formatter.headline("Searching taps on GitHub...", color: :blue)
|
$stderr.puts Formatter.headline("Searching taps on GitHub...", color: :blue)
|
||||||
end
|
end
|
||||||
|
|
||||||
matches = begin
|
matches = GitHub.search_code(
|
||||||
GitHub.search_code(
|
user: "Homebrew",
|
||||||
user: "Homebrew",
|
path: ["Formula", "Casks", "."],
|
||||||
path: ["Formula", "HomebrewFormula", "Casks", "."],
|
filename: query,
|
||||||
filename: query,
|
extension: "rb",
|
||||||
extension: "rb",
|
)
|
||||||
)
|
|
||||||
rescue GitHub::Error => error
|
matches.inject([[], []]) do |(formulae, casks), match|
|
||||||
opoo "Error searching on GitHub: #{error}\n"
|
name = File.basename(match["path"], ".rb")
|
||||||
[]
|
|
||||||
end
|
|
||||||
matches.map do |match|
|
|
||||||
filename = File.basename(match["path"], ".rb")
|
|
||||||
tap = Tap.fetch(match["repository"]["full_name"])
|
tap = Tap.fetch(match["repository"]["full_name"])
|
||||||
next if tap.installed? && !tap.name.start_with?("homebrew/cask")
|
full_name = "#{tap.name}/#{name}"
|
||||||
"#{tap.name}/#{filename}"
|
|
||||||
end.compact
|
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
|
end
|
||||||
|
|
||||||
def search_formulae(regex)
|
def search_formulae(regex)
|
||||||
|
|||||||
@ -19,6 +19,6 @@ describe Homebrew do
|
|||||||
allow(GitHub).to receive(:open_api).and_yield(json_response)
|
allow(GitHub).to receive(:open_api).and_yield(json_response)
|
||||||
|
|
||||||
expect(described_class.search_taps("some-formula"))
|
expect(described_class.search_taps("some-formula"))
|
||||||
.to match(["homebrew/foo/some-formula"])
|
.to match([["homebrew/foo/some-formula"], []])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user