Skip to content

Commit 0defe2a

Browse files
authored
Merge pull request #22399 from Homebrew/cask-dry-run-dependencies
install: avoid cask dry-run keg reads
2 parents a68a745 + 6111bbd commit 0defe2a

3 files changed

Lines changed: 31 additions & 5 deletions

File tree

Library/Homebrew/cask_dependent.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ def full_name
3838
@cask.full_name
3939
end
4040

41-
sig { returns(T::Array[Dependency]) }
42-
def runtime_dependencies
43-
deps.flat_map { |dep| [dep, *dep.to_installed_formula.runtime_dependencies] }.uniq
41+
sig { params(read_from_tab: T::Boolean, undeclared: T::Boolean).returns(T::Array[Dependency]) }
42+
def runtime_dependencies(read_from_tab: true, undeclared: true)
43+
deps.flat_map do |dep|
44+
[dep, *dep.to_installed_formula.runtime_dependencies(read_from_tab:, undeclared:)]
45+
end.uniq
4446
end
4547

4648
sig { returns(T::Array[Dependency]) }

Library/Homebrew/install.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ def print_dry_run_casks(casks, action: "install", skip_cask_deps: false, include
610610
end
611611
dep_names.concat(
612612
CaskDependent.new(cask)
613-
.runtime_dependencies
613+
.runtime_dependencies(read_from_tab: false, undeclared: false)
614614
.reject(&:installed?)
615615
.map(&:name),
616616
)

Library/Homebrew/test/cmd/install_spec.rb

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,12 @@
127127
it "prompts when asking for casks with dependencies", :cask do
128128
cask = Cask::CaskLoader.load(cask_path("local-caffeine"))
129129
dependency = instance_double(Dependency, installed?: false, name: "unar")
130+
cask_dependent = instance_double(CaskDependent)
130131

131132
allow(CaskDependent).to receive(:new)
132133
.with(cask)
133-
.and_return(instance_double(CaskDependent, runtime_dependencies: [dependency]))
134+
.and_return(cask_dependent)
135+
allow(cask_dependent).to receive(:runtime_dependencies).and_return([dependency])
134136
expect(Homebrew::Install).to receive(:ask_input).with(action: "installation")
135137

136138
expect do
@@ -143,6 +145,28 @@
143145
EOS
144146
end
145147

148+
it "does not read installed formula metadata for cask dependency dry-run plans", :cask do
149+
cask = Cask::CaskLoader.load(cask_path("local-caffeine"))
150+
dependency = instance_double(Dependency, installed?: false, name: "ripgrep")
151+
cask_dependent = instance_double(CaskDependent)
152+
153+
allow(CaskDependent).to receive(:new)
154+
.with(cask)
155+
.and_return(cask_dependent)
156+
expect(cask_dependent).to receive(:runtime_dependencies)
157+
.with(read_from_tab: false, undeclared: false)
158+
.and_return([dependency])
159+
160+
expect do
161+
Homebrew::Install.ask_casks([cask], prompt: false)
162+
end.to output(<<~EOS).to_stdout
163+
==> Would install 1 cask:
164+
local-caffeine
165+
==> Would install 1 dependency for local-caffeine:
166+
ripgrep
167+
EOS
168+
end
169+
146170
it "prompts when asking for casks with cask dependencies", :cask do
147171
cask = Cask::CaskLoader.load(cask_path("with-depends-on-cask"))
148172

0 commit comments

Comments
 (0)