Skip to content

Commit

Permalink
cmd/deps: add --os and --arch
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Cho <[email protected]>
  • Loading branch information
cho-m committed Apr 21, 2024
1 parent 8810b7f commit 77a16c2
Showing 1 changed file with 75 additions and 63 deletions.
138 changes: 75 additions & 63 deletions Library/Homebrew/cmd/deps.rb
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ class Deps < AbstractCommand
"debugging the `--installed`/`--eval-all` display mode."
switch "--HEAD",
description: "Show dependencies for HEAD version instead of stable version."
flag "--os=",
description: "Show dependencies for the given operating system."
flag "--arch=",
description: "Show dependencies for the given CPU architecture."
switch "--formula", "--formulae",
description: "Treat all named arguments as formulae."
switch "--cask", "--casks",
Expand All @@ -82,85 +86,93 @@ class Deps < AbstractCommand

sig { override.void }
def run
raise UsageError, "`brew deps --os=all` is not supported" if args.os == "all"
raise UsageError, "`brew deps --arch=all` is not supported" if args.arch == "all"

os, arch = T.must(args.os_arch_combinations.first)
all = args.eval_all?

Formulary.enable_factory_cache!

recursive = !args.direct?
installed = args.installed? || dependents(args.named.to_formulae_and_casks).all?(&:any_version_installed?)

@use_runtime_dependencies = installed && recursive &&
!args.tree? &&
!args.graph? &&
!args.HEAD? &&
!args.include_build? &&
!args.include_test? &&
!args.include_optional? &&
!args.skip_recommended? &&
!args.missing?

if args.tree? || args.graph?
dependents = if args.named.present?
sorted_dependents(args.named.to_formulae_and_casks)
elsif args.installed?
case args.only_formula_or_cask
SimulateSystem.with(os:, arch:) do
recursive = !args.direct?
installed = args.installed? || dependents(args.named.to_formulae_and_casks).all?(&:any_version_installed?)

@use_runtime_dependencies = installed && recursive &&
!args.tree? &&
!args.graph? &&
!args.HEAD? &&
!args.include_build? &&
!args.include_test? &&
!args.include_optional? &&
!args.skip_recommended? &&
!args.missing? &&
args.os.nil? &&
args.arch.nil?

if args.tree? || args.graph?
dependents = if args.named.present?
sorted_dependents(args.named.to_formulae_and_casks)
elsif args.installed?
case args.only_formula_or_cask
when :formula
sorted_dependents(Formula.installed)
when :cask
sorted_dependents(Cask::Caskroom.casks)
else
sorted_dependents(Formula.installed + Cask::Caskroom.casks)
end
else
raise FormulaUnspecifiedError
end

if args.graph?
dot_code = dot_code(dependents, recursive:)
if args.dot?

Check warning on line 131 in Library/Homebrew/cmd/deps.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cmd/deps.rb#L131

Added line #L131 was not covered by tests
puts dot_code
else
exec_browser "https://dreampuf.github.io/GraphvizOnline/##{ERB::Util.url_encode(dot_code)}"
end
return

Check warning on line 136 in Library/Homebrew/cmd/deps.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cmd/deps.rb#L136

Added line #L136 was not covered by tests
end

puts_deps_tree(dependents, recursive:)
return

Check warning on line 140 in Library/Homebrew/cmd/deps.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cmd/deps.rb#L139-L140

Added lines #L139 - L140 were not covered by tests
elsif all
puts_deps(sorted_dependents(
Formula.all(eval_all: args.eval_all?) + Cask::Cask.all(eval_all: args.eval_all?),
), recursive:)
return

Check warning on line 145 in Library/Homebrew/cmd/deps.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cmd/deps.rb#L145

Added line #L145 was not covered by tests
elsif !args.no_named? && args.for_each?
puts_deps(sorted_dependents(args.named.to_formulae_and_casks), recursive:)
return

Check warning on line 148 in Library/Homebrew/cmd/deps.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cmd/deps.rb#L148

Added line #L148 was not covered by tests
end

if args.no_named?
raise FormulaUnspecifiedError unless args.installed?

sorted_dependents_formulae_and_casks = case args.only_formula_or_cask

Check warning on line 154 in Library/Homebrew/cmd/deps.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cmd/deps.rb#L154

Added line #L154 was not covered by tests
when :formula
sorted_dependents(Formula.installed)
when :cask
sorted_dependents(Cask::Caskroom.casks)
else
sorted_dependents(Formula.installed + Cask::Caskroom.casks)
end
else
raise FormulaUnspecifiedError
end

if args.graph?
dot_code = dot_code(dependents, recursive:)
if args.dot?
puts dot_code
else
exec_browser "https://dreampuf.github.io/GraphvizOnline/##{ERB::Util.url_encode(dot_code)}"
end
puts_deps(sorted_dependents_formulae_and_casks, recursive:)

Check warning on line 162 in Library/Homebrew/cmd/deps.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cmd/deps.rb#L162

Added line #L162 was not covered by tests
return
end

puts_deps_tree(dependents, recursive:)
return
elsif all
puts_deps(sorted_dependents(
Formula.all(eval_all: args.eval_all?) + Cask::Cask.all(eval_all: args.eval_all?),
), recursive:)
return
elsif !args.no_named? && args.for_each?
puts_deps(sorted_dependents(args.named.to_formulae_and_casks), recursive:)
return
end

if args.no_named?
raise FormulaUnspecifiedError unless args.installed?
dependents = dependents(args.named.to_formulae_and_casks)
check_head_spec(dependents) if args.HEAD?

sorted_dependents_formulae_and_casks = case args.only_formula_or_cask
when :formula
sorted_dependents(Formula.installed)
when :cask
sorted_dependents(Cask::Caskroom.casks)
else
sorted_dependents(Formula.installed + Cask::Caskroom.casks)
end
puts_deps(sorted_dependents_formulae_and_casks, recursive:)
return
all_deps = deps_for_dependents(dependents, recursive:, &(args.union? ? :| : :&))
condense_requirements(all_deps)
all_deps.map! { |d| dep_display_name(d) }
all_deps.uniq!
all_deps.sort! unless args.topological?
puts all_deps
end

dependents = dependents(args.named.to_formulae_and_casks)
check_head_spec(dependents) if args.HEAD?

all_deps = deps_for_dependents(dependents, recursive:, &(args.union? ? :| : :&))
condense_requirements(all_deps)
all_deps.map! { |d| dep_display_name(d) }
all_deps.uniq!
all_deps.sort! unless args.topological?
puts all_deps
end

private
Expand Down

0 comments on commit 77a16c2

Please sign in to comment.