From ee515fd5e03df0e9ecd854d3191f841ce267016b Mon Sep 17 00:00:00 2001 From: Ruoyu Zhong Date: Mon, 18 Aug 2025 22:45:03 +0800 Subject: [PATCH 1/4] cmd/update-report: show new formula/cask desc for non-API users too This will make non-API users like myself happy. --- Library/Homebrew/cmd/update-report.rb | 30 ++++++++++++++++++--------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index a7d9ce6b60..ca3f81488d 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -869,8 +869,9 @@ class ReporterHub return if formulae.blank? ohai "New Formulae" + should_display_desc = !Homebrew::EnvConfig.no_install_from_api? || formulae.size <= 100 formulae.each do |formula| - if (desc = description(formula)) + if should_display_desc && (desc = description(formula)) puts "#{formula}: #{desc}" else puts formula @@ -888,8 +889,9 @@ class ReporterHub return if casks.blank? ohai "New Casks" + should_display_desc = !Homebrew::EnvConfig.no_install_from_api? || casks.size <= 100 casks.each do |cask| - if (desc = cask_description(cask)) + if should_display_desc && (desc = cask_description(cask)) puts "#{cask}: #{desc}" else puts cask @@ -971,19 +973,27 @@ 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? + 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? + 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 From 7cec7586ff1e6f1b4fbbe462192c882137b6c453 Mon Sep 17 00:00:00 2001 From: Ruoyu Zhong Date: Tue, 19 Aug 2025 02:39:26 +0800 Subject: [PATCH 2/4] cmd/update-report: remove unused methods --- Library/Homebrew/cmd/update-report.rb | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index ca3f81488d..76e65dba8c 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -932,25 +932,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 From c481e71092678462dd2b8150cb8854e1e3d212e3 Mon Sep 17 00:00:00 2001 From: Ruoyu Zhong Date: Tue, 19 Aug 2025 14:27:05 +0800 Subject: [PATCH 3/4] cmd/update-report: rework --- Library/Homebrew/cmd/update-report.rb | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Library/Homebrew/cmd/update-report.rb b/Library/Homebrew/cmd/update-report.rb index 76e65dba8c..0736e4cc41 100644 --- a/Library/Homebrew/cmd/update-report.rb +++ b/Library/Homebrew/cmd/update-report.rb @@ -869,9 +869,13 @@ class ReporterHub return if formulae.blank? ohai "New Formulae" - should_display_desc = !Homebrew::EnvConfig.no_install_from_api? || formulae.size <= 100 + should_display_descriptions = if Homebrew::EnvConfig.no_install_from_api? + formulae.size <= 100 + else + true + end formulae.each do |formula| - if should_display_desc && (desc = description(formula)) + if should_display_descriptions && (desc = description(formula)) puts "#{formula}: #{desc}" else puts formula @@ -883,18 +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_desc = !Homebrew::EnvConfig.no_install_from_api? || casks.size <= 100 + should_display_descriptions = if Homebrew::EnvConfig.no_install_from_api? + casks.size <= 100 + else + true + end casks.each do |cask| - if should_display_desc && (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 @@ -960,6 +967,7 @@ class ReporterHub sig { params(formula: String).returns(T.nilable(String)) } def description(formula) if Homebrew::EnvConfig.no_install_from_api? + # Skip non-homebrew/core formulae for security. return if formula.include?("/") Formula[formula].desc&.presence @@ -973,6 +981,7 @@ class ReporterHub sig { params(cask: String).returns(T.nilable(String)) } def cask_description(cask) if Homebrew::EnvConfig.no_install_from_api? + # Skip non-homebrew/cask formulae for security. return if cask.include?("/") Cask::CaskLoader.load(cask).desc&.presence From b45f0ecd2ea35b1422d0f837acf84714f81a5d88 Mon Sep 17 00:00:00 2001 From: Ruoyu Zhong Date: Tue, 19 Aug 2025 14:59:40 +0800 Subject: [PATCH 4/4] test/cmd/update-report: fix test --- Library/Homebrew/test/cmd/update-report_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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