diff --git a/Library/Homebrew/cmd/deps.rb b/Library/Homebrew/cmd/deps.rb index fee15efb4335c..6e535c4bd88d0 100644 --- a/Library/Homebrew/cmd/deps.rb +++ b/Library/Homebrew/cmd/deps.rb @@ -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", @@ -82,28 +86,72 @@ 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 @@ -111,56 +159,20 @@ def run 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