Merge pull request #20496 from Homebrew/update-report-desc-non-api

cmd/update-report: show new formula/cask desc for non-API users too
This commit is contained in:
Mike McQuaid 2025-08-19 07:25:39 +00:00 committed by GitHub
commit e29749fcc2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 31 deletions

View File

@ -869,8 +869,13 @@ class ReporterHub
return if formulae.blank? return if formulae.blank?
ohai "New Formulae" ohai "New Formulae"
should_display_descriptions = if Homebrew::EnvConfig.no_install_from_api?
formulae.size <= 100
else
true
end
formulae.each do |formula| formulae.each do |formula|
if (desc = description(formula)) if should_display_descriptions && (desc = description(formula))
puts "#{formula}: #{desc}" puts "#{formula}: #{desc}"
else else
puts formula puts formula
@ -882,17 +887,21 @@ class ReporterHub
def dump_new_cask_report def dump_new_cask_report
return unless Cask::Caskroom.any_casks_installed? return unless Cask::Caskroom.any_casks_installed?
casks = select_formula_or_cask(:AC).sort.filter_map do |name| casks = select_formula_or_cask(:AC).sort.reject { |name| cask_installed?(name) }
name.split("/").last unless cask_installed?(name)
end
return if casks.blank? return if casks.blank?
ohai "New Casks" ohai "New Casks"
should_display_descriptions = if Homebrew::EnvConfig.no_install_from_api?
casks.size <= 100
else
true
end
casks.each do |cask| casks.each do |cask|
if (desc = cask_description(cask)) cask_token = T.must(cask.split("/").last)
puts "#{cask}: #{desc}" if should_display_descriptions && (desc = cask_description(cask))
puts "#{cask_token}: #{desc}"
else else
puts cask puts cask_token
end end
end end
end end
@ -930,25 +939,11 @@ class ReporterHub
(HOMEBREW_CELLAR/formula.split("/").last).directory? (HOMEBREW_CELLAR/formula.split("/").last).directory?
end end
sig { params(formula: String).returns(T::Boolean) }
def outdated?(formula)
Formula[formula].outdated?
rescue FormulaUnavailableError
false
end
sig { params(cask: String).returns(T::Boolean) } sig { params(cask: String).returns(T::Boolean) }
def cask_installed?(cask) def cask_installed?(cask)
(Cask::Caskroom.path/cask).directory? (Cask::Caskroom.path/cask).directory?
end end
sig { params(cask: String).returns(T::Boolean) }
def cask_outdated?(cask)
Cask::CaskLoader.load(cask).outdated?
rescue Cask::CaskError
false
end
sig { returns(T::Array[T.untyped]) } sig { returns(T::Array[T.untyped]) }
def all_formula_json def all_formula_json
return @all_formula_json if @all_formula_json return @all_formula_json if @all_formula_json
@ -971,19 +966,29 @@ class ReporterHub
sig { params(formula: String).returns(T.nilable(String)) } sig { params(formula: String).returns(T.nilable(String)) }
def description(formula) def description(formula)
return if Homebrew::EnvConfig.no_install_from_api? if Homebrew::EnvConfig.no_install_from_api?
# Skip non-homebrew/core formulae for security.
return if formula.include?("/")
all_formula_json.find { |f| f["name"] == formula } Formula[formula].desc&.presence
&.fetch("desc", nil) else
&.presence all_formula_json.find { |f| f["name"] == formula }
&.fetch("desc", nil)
&.presence
end
end end
sig { params(cask: String).returns(T.nilable(String)) } sig { params(cask: String).returns(T.nilable(String)) }
def cask_description(cask) def cask_description(cask)
return if Homebrew::EnvConfig.no_install_from_api? if Homebrew::EnvConfig.no_install_from_api?
# Skip non-homebrew/cask formulae for security.
return if cask.include?("/")
all_cask_json.find { |f| f["token"] == cask } Cask::CaskLoader.load(cask).desc&.presence
&.fetch("desc", nil) else
&.presence all_cask_json.find { |f| f["token"] == cask }
&.fetch("desc", nil)
&.presence
end
end end
end end

View File

@ -155,7 +155,7 @@ RSpec.describe Homebrew::Cmd::UpdateReport do
end end
it "dumps new casks report" do it "dumps new casks report" do
allow(hub).to receive(:select_formula_or_cask).with(:AC).and_return(["foo/cask1", "foo/cask2", "foo/cask3"]) allow(hub).to receive(:select_formula_or_cask).with(:AC).and_return(["cask1", "cask2", "foo/tap/cask3"])
allow(hub).to receive_messages(cask_installed?: false, all_cask_json: [ allow(hub).to receive_messages(cask_installed?: false, all_cask_json: [
{ "token" => "cask1", "desc" => "desc1" }, { "token" => "cask1", "desc" => "desc1" },
{ "token" => "cask3", "desc" => "desc3" }, { "token" => "cask3", "desc" => "desc3" },
@ -165,7 +165,7 @@ RSpec.describe Homebrew::Cmd::UpdateReport do
==> New Casks ==> New Casks
cask1: desc1 cask1: desc1
cask2 cask2
cask3: desc3 cask3
EOS EOS
end end