From 7303d642ddaf0e8fee13e378ac93fa6a2a797f35 Mon Sep 17 00:00:00 2001 From: Michael Cho Date: Thu, 29 Feb 2024 15:10:08 -0500 Subject: [PATCH 1/2] utils/pypi: specify dependencies needed to update resources Also allow optionally installing these dependencies. By default, only `python@3.y` formulae will be automatically installed. Signed-off-by: Michael Cho --- Library/Homebrew/utils/pypi.rb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/utils/pypi.rb b/Library/Homebrew/utils/pypi.rb index 3899bc68bd..78d40baa66 100644 --- a/Library/Homebrew/utils/pypi.rb +++ b/Library/Homebrew/utils/pypi.rb @@ -198,6 +198,8 @@ module PyPI package_name: T.nilable(String), extra_packages: T.nilable(T::Array[String]), exclude_packages: T.nilable(T::Array[String]), + dependencies: T.nilable(T::Array[String]), + install_dependencies: T.nilable(T::Boolean), print_only: T.nilable(T::Boolean), silent: T.nilable(T::Boolean), verbose: T.nilable(T::Boolean), @@ -205,7 +207,8 @@ module PyPI ).returns(T.nilable(T::Boolean)) } def self.update_python_resources!(formula, version: nil, package_name: nil, extra_packages: nil, - exclude_packages: nil, print_only: false, silent: false, verbose: false, + exclude_packages: nil, dependencies: nil, install_dependencies: false, + print_only: false, silent: false, verbose: false, ignore_non_pypi_packages: false) auto_update_list = formula.tap&.pypi_formula_mappings @@ -224,9 +227,22 @@ module PyPI package_name = list_entry["package_name"] extra_packages = list_entry["extra_packages"] exclude_packages = list_entry["exclude_packages"] + dependencies = list_entry["dependencies"] end end + missing_dependencies = Array(dependencies).reject do |dependency| + Formula[dependency].any_version_installed? + rescue FormulaUnavailableError + odie "Formula \"#{dependency}\" not found but it is a dependency to update \"#{formula.name}\" resources." + end + if missing_dependencies.present? + missing_msg = "formulae required to update \"#{formula.name}\" resources: #{missing_dependencies.join(", ")}" + odie "Missing #{missing_msg}" unless install_dependencies + ohai "Installing #{missing_msg}" + missing_dependencies.each(&method(:ensure_formula_installed!)) + end + python_deps = formula.deps .select { |d| d.name.match?(/^python(@.+)?$/) } .map(&:to_formula) From 216f571fff82c5127e361ca33718e2b46a27be12 Mon Sep 17 00:00:00 2001 From: Michael Cho Date: Thu, 29 Feb 2024 15:14:06 -0500 Subject: [PATCH 2/2] bump-formula-pr: switch to install resource update dependencies Also same feature for update-python-resources --- Library/Homebrew/dev-cmd/bump-formula-pr.rb | 3 +++ Library/Homebrew/dev-cmd/update-python-resources.rb | 3 +++ completions/bash/brew | 2 ++ completions/fish/brew.fish | 2 ++ completions/zsh/_brew | 2 ++ docs/Manpage.md | 4 ++++ manpages/brew.1 | 8 ++++++++ 7 files changed, 24 insertions(+) diff --git a/Library/Homebrew/dev-cmd/bump-formula-pr.rb b/Library/Homebrew/dev-cmd/bump-formula-pr.rb index 634fa73110..018b7d6455 100644 --- a/Library/Homebrew/dev-cmd/bump-formula-pr.rb +++ b/Library/Homebrew/dev-cmd/bump-formula-pr.rb @@ -72,6 +72,8 @@ module Homebrew "or specified ." switch "-f", "--force", description: "Remove all mirrors if `--mirror` was not specified." + switch "--install-dependencies", + description: "Install missing dependencies required to update resources." flag "--python-package-name=", description: "Use the specified when finding Python resources for . " \ "If no package name is specified, it will be inferred from the formula's stable URL." @@ -329,6 +331,7 @@ module Homebrew package_name: args.python_package_name, extra_packages: args.python_extra_packages, exclude_packages: args.python_exclude_packages, + install_dependencies: args.install_dependencies?, silent: args.quiet?, ignore_non_pypi_packages: true end diff --git a/Library/Homebrew/dev-cmd/update-python-resources.rb b/Library/Homebrew/dev-cmd/update-python-resources.rb index d11035f04b..169dede9da 100644 --- a/Library/Homebrew/dev-cmd/update-python-resources.rb +++ b/Library/Homebrew/dev-cmd/update-python-resources.rb @@ -19,6 +19,8 @@ module Homebrew description: "Suppress any output." switch "--ignore-non-pypi-packages", description: "Don't fail if is not a PyPI package." + switch "--install-dependencies", + description: "Install missing dependencies required to update resources." flag "--version=", description: "Use the specified when finding resources for . " \ "If no version is specified, the current version for will be used." @@ -43,6 +45,7 @@ module Homebrew package_name: args.package_name, extra_packages: args.extra_packages, exclude_packages: args.exclude_packages, + install_dependencies: args.install_dependencies?, print_only: args.print_only?, silent: args.silent?, verbose: args.verbose?, diff --git a/completions/bash/brew b/completions/bash/brew index 8591f15474..ae5a0cc04d 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -500,6 +500,7 @@ _brew_bump_formula_pr() { --force --fork-org --help + --install-dependencies --message --mirror --no-audit @@ -2471,6 +2472,7 @@ _brew_update_python_resources() { --extra-packages --help --ignore-non-pypi-packages + --install-dependencies --package-name --print-only --quiet diff --git a/completions/fish/brew.fish b/completions/fish/brew.fish index 6df3972270..ec848a805f 100644 --- a/completions/fish/brew.fish +++ b/completions/fish/brew.fish @@ -422,6 +422,7 @@ __fish_brew_complete_arg 'bump-formula-pr' -l dry-run -d 'Print what would be do __fish_brew_complete_arg 'bump-formula-pr' -l force -d 'Remove all mirrors if `--mirror` was not specified' __fish_brew_complete_arg 'bump-formula-pr' -l fork-org -d 'Use the specified GitHub organization for forking' __fish_brew_complete_arg 'bump-formula-pr' -l help -d 'Show this message' +__fish_brew_complete_arg 'bump-formula-pr' -l install-dependencies -d 'Install missing dependencies required to update resources' __fish_brew_complete_arg 'bump-formula-pr' -l message -d 'Prepend message to the default pull request message' __fish_brew_complete_arg 'bump-formula-pr' -l mirror -d 'Use the specified URL as a mirror URL. If URL is a comma-separated list of URLs, multiple mirrors will be added' __fish_brew_complete_arg 'bump-formula-pr' -l no-audit -d 'Don\'t run `brew audit` before opening the PR' @@ -1611,6 +1612,7 @@ __fish_brew_complete_arg 'update-python-resources' -l exclude-packages -d 'Exclu __fish_brew_complete_arg 'update-python-resources' -l extra-packages -d 'Include these additional packages when finding resources' __fish_brew_complete_arg 'update-python-resources' -l help -d 'Show this message' __fish_brew_complete_arg 'update-python-resources' -l ignore-non-pypi-packages -d 'Don\'t fail if formula is not a PyPI package' +__fish_brew_complete_arg 'update-python-resources' -l install-dependencies -d 'Install missing dependencies required to update resources' __fish_brew_complete_arg 'update-python-resources' -l package-name -d 'Use the specified package-name when finding resources for formula. If no package name is specified, it will be inferred from the formula\'s stable URL' __fish_brew_complete_arg 'update-python-resources' -l print-only -d 'Print the updated resource blocks instead of changing formula' __fish_brew_complete_arg 'update-python-resources' -l quiet -d 'Make some output more quiet' diff --git a/completions/zsh/_brew b/completions/zsh/_brew index e4c7bf78e8..0cb0654a12 100644 --- a/completions/zsh/_brew +++ b/completions/zsh/_brew @@ -546,6 +546,7 @@ _brew_bump_formula_pr() { '--force[Remove all mirrors if `--mirror` was not specified]' \ '--fork-org[Use the specified GitHub organization for forking]' \ '--help[Show this message]' \ + '--install-dependencies[Install missing dependencies required to update resources]' \ '--message[Prepend message to the default pull request message]' \ '--mirror[Use the specified URL as a mirror URL. If URL is a comma-separated list of URLs, multiple mirrors will be added]' \ '(--strict --online)--no-audit[Don'\''t run `brew audit` before opening the PR]' \ @@ -1995,6 +1996,7 @@ _brew_update_python_resources() { '--extra-packages[Include these additional packages when finding resources]' \ '--help[Show this message]' \ '--ignore-non-pypi-packages[Don'\''t fail if formula is not a PyPI package]' \ + '--install-dependencies[Install missing dependencies required to update resources]' \ '--package-name[Use the specified package-name when finding resources for formula. If no package name is specified, it will be inferred from the formula'\''s stable URL]' \ '--print-only[Print the updated resource blocks instead of changing formula]' \ '--quiet[Make some output more quiet]' \ diff --git a/docs/Manpage.md b/docs/Manpage.md index e72c5cae82..576506a850 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -1129,6 +1129,8 @@ nor vice versa. It must use whichever style specification the formula already us Specify the new commit *`revision`* corresponding to the specified git *`tag`* or specified *`version`*. * `-f`, `--force`: Remove all mirrors if `--mirror` was not specified. +* `--install-dependencies`: + Install missing dependencies required to update resources. * `--python-package-name`: Use the specified *`package-name`* when finding Python resources for *`formula`*. If no package name is specified, it will be inferred from the formula's stable URL. * `--python-extra-packages`: @@ -1666,6 +1668,8 @@ Update versions for PyPI resource blocks in *`formula`*. Suppress any output. * `--ignore-non-pypi-packages`: Don't fail if *`formula`* is not a PyPI package. +* `--install-dependencies`: + Install missing dependencies required to update resources. * `--version`: Use the specified *`version`* when finding resources for *`formula`*. If no version is specified, the current version for *`formula`* will be used. * `--package-name`: diff --git a/manpages/brew.1 b/manpages/brew.1 index fe1d766b5e..8343178180 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -1622,6 +1622,10 @@ Specify the new commit \fIrevision\fR corresponding to the specified git \fItag\ Remove all mirrors if \fB\-\-mirror\fR was not specified\. . .TP +\fB\-\-install\-dependencies\fR +Install missing dependencies required to update resources\. +. +.TP \fB\-\-python\-package\-name\fR Use the specified \fIpackage\-name\fR when finding Python resources for \fIformula\fR\. If no package name is specified, it will be inferred from the formula\'s stable URL\. . @@ -2385,6 +2389,10 @@ Suppress any output\. Don\'t fail if \fIformula\fR is not a PyPI package\. . .TP +\fB\-\-install\-dependencies\fR +Install missing dependencies required to update resources\. +. +.TP \fB\-\-version\fR Use the specified \fIversion\fR when finding resources for \fIformula\fR\. If no version is specified, the current version for \fIformula\fR will be used\. .