diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index a7d9ce6b60..0736e4cc41 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -869,8 +869,13 @@ class ReporterHub return if formulae.blank? ohai "New Formulae" + should_display_descriptions = if Homebrew::EnvConfig.no_install_from_api? + formulae.size <= 100 + else + true + end formulae.each do |formula| - if (desc = description(formula)) + if should_display_descriptions && (desc = description(formula)) puts "#{formula}: #{desc}" else puts formula @@ -882,17 +887,21 @@ class ReporterHub def dump_new_cask_report return unless Cask::Caskroom.any_casks_installed? - casks = select_formula_or_cask(:AC).sort.filter_map do |name| - name.split("/").last unless cask_installed?(name) - end + casks = select_formula_or_cask(:AC).sort.reject { |name| cask_installed?(name) } return if casks.blank? ohai "New Casks" + should_display_descriptions = if Homebrew::EnvConfig.no_install_from_api? + casks.size <= 100 + else + true + end casks.each do |cask| - if (desc = cask_description(cask)) - puts "#{cask}: #{desc}" + cask_token = T.must(cask.split("/").last) + if should_display_descriptions && (desc = cask_description(cask)) + puts "#{cask_token}: #{desc}" else - puts cask + puts cask_token end end end @@ -930,25 +939,11 @@ class ReporterHub (HOMEBREW_CELLAR/formula.split("/").last).directory? 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) } def cask_installed?(cask) (Cask::Caskroom.path/cask).directory? 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]) } def 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)) } 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 } - &.fetch("desc", nil) - &.presence + Formula[formula].desc&.presence + else + all_formula_json.find { |f| f["name"] == formula } + &.fetch("desc", nil) + &.presence + end end sig { params(cask: String).returns(T.nilable(String)) } 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 } - &.fetch("desc", nil) - &.presence + Cask::CaskLoader.load(cask).desc&.presence + else + all_cask_json.find { |f| f["token"] == cask } + &.fetch("desc", nil) + &.presence + end end end diff --git a/Library/Homebrew/test/cmd/update-report_spec.rb b/Library/Homebrew/test/cmd/update-report_spec.rb index 8ff6ddf93d..50363220c1 100644 --- a/Library/Homebrew/test/cmd/update-report_spec.rb +++ b/Library/Homebrew/test/cmd/update-report_spec.rb @@ -155,7 +155,7 @@ RSpec.describe Homebrew::Cmd::UpdateReport do end 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: [ { "token" => "cask1", "desc" => "desc1" }, { "token" => "cask3", "desc" => "desc3" }, @@ -165,7 +165,7 @@ RSpec.describe Homebrew::Cmd::UpdateReport do ==> New Casks cask1: desc1 cask2 - cask3: desc3 + cask3 EOS end