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
|
|
|
|
`bump`
|
2020-07-02 17:06:39 +00:00
|
|
|
|
2020-06-29 09:47:19 -05:00
|
|
|
Display out-of-date brew formulae, the latest version available, and whether a pull request has been opened.
|
|
|
|
EOS
|
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
|
|
|
|
2020-07-06 03:32:18 +00:00
|
|
|
outdated_repology_packages = Repology.parse_api_response
|
|
|
|
outdated_packages = validate_and_format_packages(outdated_repology_packages)
|
2020-07-02 17:06:39 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
latest_version = nil
|
|
|
|
|
|
|
|
# identify latest version amongst repology repos
|
|
|
|
repositories.each do |repo|
|
|
|
|
latest_version = repo["version"] if repo["status"] == "newest"
|
|
|
|
end
|
|
|
|
|
|
|
|
packages[repology_homebrew_repo["srcname"]] = format_package(repology_homebrew_repo["srcname"], latest_version)
|
|
|
|
end
|
|
|
|
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)
|
|
|
|
pull_requests = GitHub.check_for_duplicate_pull_requests(formula, tap_full_name, latest_version, args, true)
|
|
|
|
|
|
|
|
{
|
|
|
|
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
|
|
|
|
rescue
|
|
|
|
nil
|
|
|
|
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)
|
|
|
|
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
|
|
|
|
|
2020-07-02 17:06:39 +00:00
|
|
|
def display(outdated_packages)
|
2020-07-06 09:08:41 -05:00
|
|
|
ohai "Outdated formulae\n"
|
2020-07-02 17:06:39 +00:00
|
|
|
|
|
|
|
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]}"
|
|
|
|
puts "Latest livecheck version: #{package_details[:livecheck_latest_version]}"
|
|
|
|
puts "Open pull requests: #{package_details[:open_pull_requests]}"
|
2020-07-02 17:06:39 +00:00
|
|
|
end
|
2020-06-29 09:47:19 -05:00
|
|
|
end
|
|
|
|
end
|