Skip to content

Commit

Permalink
Merge pull request #17122 from Homebrew/deps-simulated-os-and-arch
Browse files Browse the repository at this point in the history
cmd/deps: add `--os` and `--arch`
  • Loading branch information
MikeMcQuaid authored Apr 22, 2024
2 parents 54bea63 + 77a16c2 commit af2d356
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?
puts dot_code
else
exec_browser "https://dreampuf.github.io/GraphvizOnline/##{ERB::Util.url_encode(dot_code)}"
end
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?

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
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:)
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 af2d356

Please sign in to comment.