Skip to content

Commit f4491e0

Browse files
authored
Merge pull request #20167 from Homebrew/update_report_display_descriptions
cmd/update-report: display descriptions for new formulae and casks.
2 parents 3495ea5 + 28753ef commit f4491e0

2 files changed

Lines changed: 145 additions & 3 deletions

File tree

Library/Homebrew/cmd/update-report.rb

Lines changed: 57 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -869,19 +869,35 @@ def dump(auto_update: false)
869869
sig { void }
870870
def dump_new_formula_report
871871
formulae = select_formula_or_cask(:A).sort.reject { |name| installed?(name) }
872+
return if formulae.blank?
872873

873-
output_dump_formula_or_cask_report "New Formulae", formulae
874+
ohai "New Formulae"
875+
formulae.each do |formula|
876+
if (desc = description(formula))
877+
puts "#{formula}: #{desc}"
878+
else
879+
puts formula
880+
end
881+
end
874882
end
875883

876884
sig { void }
877885
def dump_new_cask_report
878-
return if Homebrew::SimulateSystem.simulating_or_running_on_linux?
886+
return unless Cask::Caskroom.any_casks_installed?
879887

880888
casks = select_formula_or_cask(:AC).sort.filter_map do |name|
881889
name.split("/").last unless cask_installed?(name)
882890
end
891+
return if casks.blank?
883892

884-
output_dump_formula_or_cask_report "New Casks", casks
893+
ohai "New Casks"
894+
casks.each do |cask|
895+
if (desc = cask_description(cask))
896+
puts "#{cask}: #{desc}"
897+
else
898+
puts cask
899+
end
900+
end
885901
end
886902

887903
sig { void }
@@ -935,4 +951,42 @@ def cask_outdated?(cask)
935951
rescue Cask::CaskError
936952
false
937953
end
954+
955+
sig { returns(T::Array[T.untyped]) }
956+
def all_formula_json
957+
return @all_formula_json if @all_formula_json
958+
959+
@all_formula_json = T.let(nil, T.nilable(T::Array[T.untyped]))
960+
all_formula_json, = Homebrew::API.fetch_json_api_file "formula.jws.json"
961+
all_formula_json = T.cast(all_formula_json, T::Array[T.untyped])
962+
@all_formula_json = all_formula_json
963+
end
964+
965+
sig { returns(T::Array[T.untyped]) }
966+
def all_cask_json
967+
return @all_cask_json if @all_cask_json
968+
969+
@all_cask_json = T.let(nil, T.nilable(T::Array[T.untyped]))
970+
all_cask_json, = Homebrew::API.fetch_json_api_file "cask.jws.json"
971+
all_cask_json = T.cast(all_cask_json, T::Array[T.untyped])
972+
@all_cask_json = all_cask_json
973+
end
974+
975+
sig { params(formula: String).returns(T.nilable(String)) }
976+
def description(formula)
977+
return if Homebrew::EnvConfig.no_install_from_api?
978+
979+
all_formula_json.find { |f| f["name"] == formula }
980+
&.fetch("desc", nil)
981+
&.presence
982+
end
983+
984+
sig { params(cask: String).returns(T.nilable(String)) }
985+
def cask_description(cask)
986+
return if Homebrew::EnvConfig.no_install_from_api?
987+
988+
all_cask_json.find { |f| f["token"] == cask }
989+
&.fetch("desc", nil)
990+
&.presence
991+
end
938992
end

Library/Homebrew/test/cmd/update-report_spec.rb

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,92 @@ def perform_update(fixture_name = "")
131131
end
132132
end
133133
end
134+
135+
describe ReporterHub do
136+
let(:hub) { described_class.new }
137+
138+
before do
139+
ENV["HOMEBREW_NO_COLOR"] = "1"
140+
allow(hub).to receive(:select_formula_or_cask).and_return([])
141+
end
142+
143+
it "dumps new formulae report" do
144+
allow(hub).to receive(:select_formula_or_cask).with(:A).and_return(["foo", "bar", "baz"])
145+
allow(hub).to receive_messages(installed?: false, all_formula_json: [
146+
{ "name" => "foo", "desc" => "foobly things" },
147+
{ "name" => "baz", "desc" => "baz desc" },
148+
])
149+
expect { hub.dump }.to output(<<~EOS).to_stdout
150+
==> New Formulae
151+
bar
152+
baz: baz desc
153+
foo: foobly things
154+
EOS
155+
end
156+
157+
it "dumps new casks report" do
158+
allow(hub).to receive(:select_formula_or_cask).with(:AC).and_return(["foo/cask1", "foo/cask2", "foo/cask3"])
159+
allow(hub).to receive_messages(cask_installed?: false, all_cask_json: [
160+
{ "token" => "cask1", "desc" => "desc1" },
161+
{ "token" => "cask3", "desc" => "desc3" },
162+
])
163+
allow(Cask::Caskroom).to receive(:any_casks_installed?).and_return(true)
164+
expect { hub.dump }.to output(<<~EOS).to_stdout
165+
==> New Casks
166+
cask1: desc1
167+
cask2
168+
cask3: desc3
169+
EOS
170+
end
171+
172+
it "dumps deleted installed formulae and casks report" do
173+
allow(hub).to receive(:select_formula_or_cask).with(:D).and_return(["baz", "foo", "bar"])
174+
allow(hub).to receive(:installed?).with("baz").and_return(true)
175+
allow(hub).to receive(:installed?).with("foo").and_return(true)
176+
allow(hub).to receive(:installed?).with("bar").and_return(true)
177+
allow(hub).to receive(:select_formula_or_cask).with(:A).and_return([])
178+
allow(hub).to receive(:select_formula_or_cask).with(:DC).and_return(["cask2", "cask1"])
179+
allow(hub).to receive(:cask_installed?).with("cask1").and_return(true)
180+
allow(hub).to receive(:cask_installed?).with("cask2").and_return(true)
181+
allow(Homebrew::SimulateSystem).to receive(:simulating_or_running_on_linux?).and_return(false)
182+
expect { hub.dump }.to output(<<~EOS).to_stdout
183+
==> Deleted Installed Formulae
184+
bar
185+
baz
186+
foo
187+
==> Deleted Installed Casks
188+
cask1
189+
cask2
190+
EOS
191+
end
192+
193+
it "dumps outdated formulae and casks report" do
194+
allow(Formula).to receive(:installed).and_return([
195+
instance_double(Formula, name: "foo", outdated?: true),
196+
instance_double(Formula, name: "bar", outdated?: true),
197+
])
198+
allow(Cask::Caskroom).to receive(:casks).and_return([
199+
instance_double(Cask::Cask, token: "baz", outdated?: true),
200+
instance_double(Cask::Cask, token: "qux", outdated?: true),
201+
])
202+
expect { hub.dump }.to output(<<~EOS).to_stdout
203+
==> Outdated Formulae
204+
bar
205+
foo
206+
==> Outdated Casks
207+
baz
208+
qux
209+
210+
You have 2 outdated formulae and 2 outdated casks installed.
211+
You can upgrade them with brew upgrade
212+
or list them with brew outdated.
213+
EOS
214+
end
215+
216+
it "prints nothing if there are no changes" do
217+
allow(Formula).to receive(:installed).and_return([])
218+
allow(Cask::Caskroom).to receive(:casks).and_return([])
219+
expect { hub.dump }.not_to output.to_stdout
220+
end
221+
end
134222
end

0 commit comments

Comments
 (0)