diff --git a/Library/Homebrew/dev-cmd/bump.rb b/Library/Homebrew/dev-cmd/bump.rb index 75456b853e..4e19251dde 100644 --- a/Library/Homebrew/dev-cmd/bump.rb +++ b/Library/Homebrew/dev-cmd/bump.rb @@ -25,12 +25,15 @@ module Homebrew description: "Check only formulae." switch "--cask", "--casks", description: "Check only casks." + switch "--open-pr", + description: "Open a pull request for the new version if there are none already open." flag "--limit=", description: "Limit number of package results returned." flag "--start-with=", description: "Letter or word that the list of package results should alphabetically follow." conflicts "--cask", "--formula" + conflicts "--no-pull-requests", "--open-pr" named_args [:formula, :cask] end @@ -103,7 +106,7 @@ module Homebrew end package_data = Repology.single_package_query(name, repository: repository) - retrieve_and_display_info( + retrieve_and_display_info_and_open_pr( formula_or_cask, name, package_data&.values&.first, @@ -157,7 +160,13 @@ module Homebrew end puts if i.positive? - retrieve_and_display_info(formula_or_cask, name, repositories, args: args, ambiguous_cask: ambiguous_cask) + retrieve_and_display_info_and_open_pr( + formula_or_cask, + name, + repositories, + args: args, + ambiguous_cask: ambiguous_cask, + ) end end end @@ -205,44 +214,59 @@ module Homebrew pull_requests = pull_requests.map { |pr| "#{pr["title"]} (#{Formatter.url(pr["html_url"])})" }.join(", ") end - return "none" if pull_requests.blank? - pull_requests end - def retrieve_and_display_info(formula_or_cask, name, repositories, args:, ambiguous_cask: false) - current_version = if formula_or_cask.is_a?(Formula) - formula_or_cask.stable.version + def retrieve_and_display_info_and_open_pr(formula_or_cask, name, repositories, args:, ambiguous_cask: false) + if formula_or_cask.is_a?(Formula) + current_version = formula_or_cask.stable.version + type = :formula + version_name = "formula version" else - Version.new(formula_or_cask.version) + current_version = Version.new(formula_or_cask.version) + type = :cask + version_name = "cask version " end + livecheck_latest = livecheck_result(formula_or_cask) + repology_latest = if repositories.present? Repology.latest_version(repositories) else "not found" end - livecheck_latest = livecheck_result(formula_or_cask) - pull_requests = if !args.no_pull_requests? && (args.named.present? || - (livecheck_latest.is_a?(Version) && livecheck_latest != current_version)) - retrieve_pull_requests(formula_or_cask, name) - end + new_version = if livecheck_latest.is_a?(Version) && livecheck_latest > current_version + livecheck_latest + elsif repology_latest.is_a?(Version) && repology_latest > current_version + repology_latest + end.presence - name += " (cask)" if ambiguous_cask + pull_requests = if !args.no_pull_requests? && (args.named.present? || new_version) + retrieve_pull_requests(formula_or_cask, name) + end.presence + + title_name = ambiguous_cask ? "#{name} (cask)" : name title = if current_version == repology_latest && current_version == livecheck_latest - "#{name} #{Tty.green}is up to date!#{Tty.reset}" + "#{title_name} #{Tty.green}is up to date!#{Tty.reset}" else - name + title_name end ohai title puts <<~EOS - Current #{formula_or_cask.is_a?(Formula) ? "formula version:" : "cask version: "} #{current_version} + Current #{version_name}: #{current_version} Latest livecheck version: #{livecheck_latest} Latest Repology version: #{repology_latest} + Open pull requests: #{pull_requests || "none"} EOS - puts "Open pull requests: #{pull_requests}" unless pull_requests.nil? + + return unless args.open_pr? + return unless new_version + return if pull_requests + + system HOMEBREW_BREW_FILE, "bump-#{type}-pr", "--no-browse", + "--message=Created by `brew bump`", "--version=#{new_version}", name end end diff --git a/Library/Homebrew/utils/repology.rb b/Library/Homebrew/utils/repology.rb index f6ed17f485..9f64613e0a 100644 --- a/Library/Homebrew/utils/repology.rb +++ b/Library/Homebrew/utils/repology.rb @@ -99,6 +99,6 @@ module Repology # scheme return "no latest version" if latest_version.blank? - latest_version["version"] + Version.new(latest_version["version"]) end end diff --git a/completions/bash/brew b/completions/bash/brew index 8f96bf7df3..828aac54fb 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -436,6 +436,7 @@ _brew_bump() { --help --limit --no-pull-requests + --open-pr --quiet --start-with --verbose diff --git a/completions/fish/brew.fish b/completions/fish/brew.fish index a9c3bb0af3..4a30c628e0 100644 --- a/completions/fish/brew.fish +++ b/completions/fish/brew.fish @@ -388,6 +388,7 @@ __fish_brew_complete_arg 'bump' -l full-name -d 'Print formulae/casks with fully __fish_brew_complete_arg 'bump' -l help -d 'Show this message' __fish_brew_complete_arg 'bump' -l limit -d 'Limit number of package results returned' __fish_brew_complete_arg 'bump' -l no-pull-requests -d 'Do not retrieve pull requests from GitHub' +__fish_brew_complete_arg 'bump' -l open-pr -d 'Open a pull request for the new version if there are none already open' __fish_brew_complete_arg 'bump' -l quiet -d 'Make some output more quiet' __fish_brew_complete_arg 'bump' -l start-with -d 'Letter or word that the list of package results should alphabetically follow' __fish_brew_complete_arg 'bump' -l verbose -d 'Make some output more verbose' diff --git a/completions/zsh/_brew b/completions/zsh/_brew index d24700a36a..f7525e4080 100644 --- a/completions/zsh/_brew +++ b/completions/zsh/_brew @@ -478,6 +478,7 @@ _brew_bump() { '--help[Show this message]' \ '--limit[Limit number of package results returned]' \ '--no-pull-requests[Do not retrieve pull requests from GitHub]' \ + '--open-pr[Open a pull request for the new version if there are none already open]' \ '--quiet[Make some output more quiet]' \ '--start-with[Letter or word that the list of package results should alphabetically follow]' \ '--verbose[Make some output more verbose]' \ diff --git a/docs/Manpage.md b/docs/Manpage.md index 61118b1500..3bec08d72e 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -926,6 +926,8 @@ formulae, also displays whether a pull request has been opened with the URL. Check only formulae. * `--cask`: Check only casks. +* `--open-pr`: + Open a pull request for the new version if there are none already open. * `--limit`: Limit number of package results returned. * `--start-with`: diff --git a/manpages/brew.1 b/manpages/brew.1 index bfb54dfe0f..34da2875fc 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -1295,6 +1295,10 @@ Check only formulae\. Check only casks\. . .TP +\fB\-\-open\-pr\fR +Open a pull request for the new version if there are none already open\. +. +.TP \fB\-\-limit\fR Limit number of package results returned\. .