132 lines
4.0 KiB
Ruby
Raw Normal View History

2020-06-29 10:16:58 -05:00
# frozen_string_literal: true
2020-06-29 09:47:19 -05:00
require "cli/parser"
module Homebrew
module_function
def bump_args
Homebrew::CLI::Parser.new do
usage_banner <<~EOS
2020-07-28 08:42:24 -05:00
`bump` [<options>]
Display out-of-date brew formulae and the latest version available.
Also displays whether a pull request has been opened with the URL.
2020-06-29 09:47:19 -05:00
EOS
2020-07-28 08:42:24 -05:00
flag "--formula=",
description: "Return results for package by name."
2020-07-23 11:21:12 -05:00
flag "--limit=",
description: "Limit number of package results returned."
2020-07-06 03:32:18 +00:00
switch :verbose
switch :debug
2020-06-29 09:47:19 -05:00
end
end
def bump
bump_args.parse
2020-07-01 10:21:57 -05:00
requested_formula = Homebrew.args.formula
requested_formula.downcase! if requested_formula
if requested_formula && !get_formula_details(requested_formula)
ohai "Requested formula #{requested_formula} is not valid Homebrew formula."
return
end
outdated_repology_packages = if requested_formula
Repology.single_package_query(requested_formula)
else
Repology.parse_api_response
end
outdated_packages = validate_and_format_packages(outdated_repology_packages)
display(outdated_packages)
end
2020-07-06 03:32:18 +00:00
def validate_and_format_packages(outdated_repology_packages)
2020-07-06 09:08:41 -05:00
ohai "Verifying outdated repology packages as Homebrew formulae"
2020-07-06 03:32:18 +00:00
packages = {}
outdated_repology_packages.each do |_name, repositories|
# identify homebrew repo
repology_homebrew_repo = repositories.find do |repo|
repo["repo"] == "homebrew"
end
2020-07-06 09:08:41 -05:00
next if repology_homebrew_repo.blank?
2020-07-06 03:32:18 +00:00
2020-07-06 10:14:20 -05:00
latest_version = repositories.find { |repo| repo["status"] == "newest" }["version"]
srcname = repology_homebrew_repo["srcname"]
2020-07-23 11:21:12 -05:00
package_details = format_package(srcname, latest_version)
packages[srcname] = package_details unless package_details.nil?
2020-07-28 08:42:24 -05:00
break if Homebrew.args.limit && packages.size >= Homebrew.args.limit.to_i
2020-07-06 03:32:18 +00:00
end
2020-07-23 11:21:12 -05:00
2020-07-06 03:32:18 +00:00
packages
end
def format_package(package_name, latest_version)
formula = get_formula_details(package_name)
2020-07-06 03:53:25 +00:00
2020-07-06 09:08:41 -05:00
return if formula.blank?
2020-07-06 03:32:18 +00:00
tap_full_name = formula.tap&.full_name
current_version = current_formula_version(formula)
livecheck_response = livecheck_formula(package_name)
2020-07-07 21:14:30 +00:00
pull_requests = GitHub.check_for_duplicate_pull_requests(formula, tap_full_name, latest_version)
pull_requests = pull_requests.join(", ") if pull_requests.try(:any?)
2020-07-06 03:32:18 +00:00
{
repology_latest_version: latest_version,
current_formula_version: current_version.to_s,
livecheck_latest_version: livecheck_response[:livecheck_version],
open_pull_requests: pull_requests,
2020-07-06 03:32:18 +00:00
}
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
2020-07-06 03:32:18 +00:00
output = response.delete(" ").split(/:|==>/)
2020-07-06 09:08:41 -05:00
# e.g. ["openclonk", "7.0", "8.1"]
2020-07-06 03:32:18 +00:00
package_name, brew_version, latest_version = output
{
name: package_name,
formula_version: brew_version,
livecheck_version: latest_version,
}
end
def display(outdated_packages)
2020-07-22 10:06:54 -05:00
ohai "Outdated formulae"
puts
outdated_packages.each do |formula, package_details|
2020-07-02 12:53:48 -05:00
ohai formula
2020-07-06 09:08:41 -05:00
puts "Current formula version: #{package_details[:current_formula_version]}"
puts "Latest repology version: #{package_details[:repology_latest_version]}"
2020-07-23 11:21:12 -05:00
puts "Latest livecheck version: #{package_details[:livecheck_latest_version] || "Not found."}"
puts "Open pull requests: #{package_details[:open_pull_requests] || "None."}"
end
2020-06-29 09:47:19 -05:00
end
end