diff --git a/Library/Homebrew/dev-cmd/bump.rb b/Library/Homebrew/dev-cmd/bump.rb index c4a5170560..9de09e24e6 100644 --- a/Library/Homebrew/dev-cmd/bump.rb +++ b/Library/Homebrew/dev-cmd/bump.rb @@ -42,85 +42,16 @@ module Homebrew return end - outdated_packages = validate_and_format_packages(outdated_repology_packages) + outdated_packages = Repology.validate_and_format_packages(outdated_repology_packages) display(outdated_packages) end - def validate_and_format_packages(outdated_repology_packages) - packages = {} - outdated_repology_packages.each do |_name, repositories| - # identify homebrew repo - repology_homebrew_repo = repositories.find do |repo| - repo["repo"] == "homebrew" - end - - next if repology_homebrew_repo.blank? - - latest_version = repositories.find { |repo| repo["status"] == "newest" }["version"] - srcname = repology_homebrew_repo["srcname"] - package_details = format_package(srcname, latest_version) - packages[srcname] = package_details unless package_details.nil? - - break if Homebrew.args.limit && packages.size >= Homebrew.args.limit.to_i - end - - packages - end - - def format_package(package_name, latest_version) - formula = get_formula_details(package_name) - - return if formula.blank? - - tap_full_name = formula.tap&.full_name - current_version = current_formula_version(formula) - livecheck_response = livecheck_formula(package_name) - pull_requests = GitHub.check_for_duplicate_pull_requests(formula, tap_full_name, latest_version) - - if pull_requests.try(:any?) - pull_requests = pull_requests.map { |pr| "#{pr[:title]} (#{Formatter.url(pr[:url])})" }.join(", ") - end - - { - repology_latest_version: latest_version, - current_formula_version: current_version.to_s, - livecheck_latest_version: livecheck_response[:livecheck_version], - open_pull_requests: pull_requests, - } - end - def get_formula_details(formula_name) Formula[formula_name] rescue nil end - def current_formula_version(formula) - formula.version.to_s - end - - def livecheck_formula(formula) - ohai "Checking livecheck formula: #{formula}" if Homebrew.args.verbose? - - response = Utils.popen_read(HOMEBREW_BREW_FILE, "livecheck", formula, "--quiet").chomp - - parse_livecheck_response(response) - end - - def parse_livecheck_response(response) - # e.g response => aacgain : 7834 ==> 1.8 - output = response.delete(" ").split(/:|==>/) - - # e.g. ["openclonk", "7.0", "8.1"] - package_name, brew_version, latest_version = output - - { - name: package_name, - formula_version: brew_version, - livecheck_version: latest_version, - } - end - def display(outdated_packages) puts outdated_packages.each do |formula, package_details| diff --git a/Library/Homebrew/utils.rb b/Library/Homebrew/utils.rb index 7dfd4ff40c..2ca681e3e1 100644 --- a/Library/Homebrew/utils.rb +++ b/Library/Homebrew/utils.rb @@ -9,6 +9,7 @@ require "utils/git" require "utils/github" require "utils/inreplace" require "utils/link" +require "utils/livecheck_formula" require "utils/popen" require "utils/repology" require "utils/svn" diff --git a/Library/Homebrew/utils/livecheck_formula.rb b/Library/Homebrew/utils/livecheck_formula.rb new file mode 100644 index 0000000000..9a52fa1d9e --- /dev/null +++ b/Library/Homebrew/utils/livecheck_formula.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module LivecheckFormula + module_function + + def init(formula) + ohai "Checking livecheck formula: #{formula}" if Homebrew.args.verbose? + + response = Utils.popen_read(HOMEBREW_BREW_FILE, "livecheck", formula, "--quiet").chomp + + parse_livecheck_response(response) + end + + def parse_livecheck_response(response) + # e.g response => aacgain : 7834 ==> 1.8 + output = response.delete(" ").split(/:|==>/) + + # e.g. ["openclonk", "7.0", "8.1"] + package_name, brew_version, latest_version = output + + { + name: package_name, + formula_version: brew_version, + livecheck_version: latest_version, + } + end +end diff --git a/Library/Homebrew/utils/repology.rb b/Library/Homebrew/utils/repology.rb index ffcbeb0493..055244395d 100644 --- a/Library/Homebrew/utils/repology.rb +++ b/Library/Homebrew/utils/repology.rb @@ -52,4 +52,48 @@ module Repology outdated_packages end + + def validate_and_format_packages(outdated_repology_packages) + packages = {} + outdated_repology_packages.each do |_name, repositories| + # identify homebrew repo + repology_homebrew_repo = repositories.find do |repo| + repo["repo"] == "homebrew" + end + + next if repology_homebrew_repo.blank? + + latest_version = repositories.find { |repo| repo["status"] == "newest" }["version"] + srcname = repology_homebrew_repo["srcname"] + package_details = format_package(srcname, latest_version) + packages[srcname] = package_details unless package_details.nil? + + break if Homebrew.args.limit && packages.size >= Homebrew.args.limit.to_i + end + + packages + end + + def format_package(package_name, latest_version) + formula = Formula[package_name] + + return if formula.blank? + + tap_full_name = formula.tap&.full_name + current_version = formula.version.to_s + livecheck_response = LivecheckFormula.init(package_name) + pull_requests = GitHub.check_for_duplicate_pull_requests(formula, tap_full_name, latest_version) + + if pull_requests.try(:any?) + pull_requests = pull_requests.map { |pr| "#{pr[:title]} (#{Formatter.url(pr[:url])})" }.join(", ") + end + + { + repology_latest_version: latest_version, + current_formula_version: current_version.to_s, + livecheck_latest_version: livecheck_response[:livecheck_version], + open_pull_requests: pull_requests, + } + end end +