focus util module on repology API call
This commit is contained in:
parent
d67aea7f43
commit
56cf5bafdb
46
Library/Homebrew/utils/repology.rb
Normal file
46
Library/Homebrew/utils/repology.rb
Normal file
@ -0,0 +1,46 @@
|
||||
require 'net/http'
|
||||
require 'json'
|
||||
|
||||
module Utils
|
||||
module RepologyParser
|
||||
def call_api(url)
|
||||
puts "- Calling API #{url}"
|
||||
uri = URI(url)
|
||||
response = Net::HTTP.get(uri)
|
||||
|
||||
puts "- Parsing response"
|
||||
JSON.parse(response)
|
||||
end
|
||||
|
||||
def query_repology_api(last_package_in_response = '')
|
||||
url = 'https://repology.org/api/v1/projects/' + last_package_in_response + '?inrepo=homebrew&outdated=1'
|
||||
|
||||
self.call_api(url)
|
||||
end
|
||||
|
||||
def parse_repology_api()
|
||||
puts "\n-------- Query outdated packages from Repology --------"
|
||||
page_no = 1
|
||||
puts "\n- Paginating repology api page: #{page_no}"
|
||||
|
||||
outdated_packages = self.query_repology_api('')
|
||||
last_pacakge_index = outdated_packages.size - 1
|
||||
response_size = outdated_packages.size
|
||||
|
||||
while response_size > 1 do
|
||||
page_no += 1
|
||||
puts "\n- Paginating repology api page: #{page_no}"
|
||||
|
||||
last_package_in_response = outdated_packages.keys[last_pacakge_index]
|
||||
response = self.query_repology_api("#{last_package_in_response}/")
|
||||
|
||||
response_size = response.size
|
||||
outdated_packages.merge!(response)
|
||||
last_pacakge_index = outdated_packages.size - 1
|
||||
end
|
||||
|
||||
puts "\n- #{outdated_packages.size} outdated pacakges identified by repology"
|
||||
outdated_packages
|
||||
end
|
||||
end
|
||||
end
|
@ -1,130 +0,0 @@
|
||||
require 'net/http'
|
||||
require 'json'
|
||||
|
||||
module Utils
|
||||
class ApiParser
|
||||
def call_api(url)
|
||||
puts "- Calling API #{url}"
|
||||
uri = URI(url)
|
||||
response = Net::HTTP.get(uri)
|
||||
|
||||
puts "- Parsing response"
|
||||
JSON.parse(response)
|
||||
end
|
||||
|
||||
def query_repology_api(last_package_in_response = '')
|
||||
url = 'https://repology.org/api/v1/projects/' + last_package_in_response + '?inrepo=homebrew&outdated=1'
|
||||
|
||||
self.call_api(url)
|
||||
end
|
||||
|
||||
def parse_repology_api()
|
||||
puts "\n-------- Query outdated packages from Repology --------"
|
||||
page_no = 1
|
||||
puts "\n- Paginating repology api page: #{page_no}"
|
||||
|
||||
outdated_packages = self.query_repology_api('')
|
||||
last_pacakge_index = outdated_packages.size - 1
|
||||
response_size = outdated_packages.size
|
||||
|
||||
while response_size > 1 do
|
||||
page_no += 1
|
||||
puts "\n- Paginating repology api page: #{page_no}"
|
||||
|
||||
last_package_in_response = outdated_packages.keys[last_pacakge_index]
|
||||
response = self.query_repology_api("#{last_package_in_response}/")
|
||||
|
||||
response_size = response.size
|
||||
outdated_packages.merge!(response)
|
||||
last_pacakge_index = outdated_packages.size - 1
|
||||
end
|
||||
|
||||
puts "\n- #{outdated_packages.size} outdated pacakges identified by repology"
|
||||
outdated_packages
|
||||
end
|
||||
end
|
||||
|
||||
def query_homebrew
|
||||
puts "\n-------- Get Homebrew Formulas --------"
|
||||
self.call_api('https://formulae.brew.sh/api/formula.json')
|
||||
end
|
||||
|
||||
def parse_homebrew_formulas()
|
||||
formulas = self.query_homebrew()
|
||||
parsed_homebrew_formulas = {}
|
||||
|
||||
formulas.each do |formula|
|
||||
parsed_homebrew_formulas[formula['name']] = {
|
||||
"fullname" => formula["full_name"],
|
||||
"oldname" => formula["oldname"],
|
||||
"version" => formula["versions"]['stable'],
|
||||
"download_url" => formula["urls"]['stable']['url'],
|
||||
}
|
||||
end
|
||||
|
||||
parsed_homebrew_formulas
|
||||
end
|
||||
|
||||
def validate_packages(outdated_repology_packages, brew_formulas)
|
||||
puts "\n-------- Verify Outdated Repology packages as Homebrew Formulas --------"
|
||||
packages = {}
|
||||
|
||||
outdated_repology_packages.each do |package_name, repo_using_package|
|
||||
# Identify homebrew repo
|
||||
repology_homebrew_repo = repo_using_package.select { |repo| repo['repo'] == 'homebrew' }[0]
|
||||
next if repology_homebrew_repo.empty?
|
||||
|
||||
latest_version = nil
|
||||
|
||||
# Identify latest version amongst repos
|
||||
repo_using_package.each do |repo|
|
||||
latest_version = repo['version'] if repo['status'] == 'newest'
|
||||
end
|
||||
|
||||
repology_homebrew_repo['latest_version'] = latest_version if latest_version
|
||||
homebrew_package_details = brew_formulas[repology_homebrew_repo['srcname']]
|
||||
|
||||
# Format package
|
||||
packages[repology_homebrew_repo['srcname']] = format_package(homebrew_package_details, repology_homebrew_repo)
|
||||
end
|
||||
|
||||
packages
|
||||
end
|
||||
|
||||
|
||||
def format_package(homebrew_details, repology_details)
|
||||
puts "- Formatting package: #{repology_details['srcname']}"
|
||||
|
||||
homebrew_formula = HomebrewFormula.new
|
||||
new_download_url = homebrew_formula.generate_new_download_url(homebrew_details['download_url'], homebrew_details['version'], repology_details['latest_version'])
|
||||
|
||||
brew_commands = BrewCommands.new
|
||||
livecheck_response = brew_commands.livecheck_check_formula(repology_details['srcname'])
|
||||
has_open_pr = brew_commands.check_for_open_pr(repology_details['srcname'], new_download_url)
|
||||
|
||||
formatted_package = {
|
||||
'fullname'=> homebrew_details['fullname'],
|
||||
'repology_version' => repology_details['latest_version'],
|
||||
'homebrew_version' => homebrew_details['version'],
|
||||
'livecheck_latest_version' => livecheck_response['livecheck_latest_version'],
|
||||
'current_download_url' => homebrew_details['download_url'],
|
||||
'latest_download_url' => new_download_url,
|
||||
'repology_latest_version' => repology_details['latest_version'],
|
||||
'has_open_pr' => has_open_pr
|
||||
}
|
||||
|
||||
formatted_package
|
||||
end
|
||||
|
||||
def display_version_data(outdated_packages)
|
||||
puts "==============Formatted outdated packages============\n"
|
||||
|
||||
outdated_packages.each do |package_name, package_details|
|
||||
puts "\nFormula: #{package_name}"
|
||||
puts "Current formula version: #{package_details['homebrew_version']}"
|
||||
puts "Repology latest version: #{package_details['repology_version']}"
|
||||
puts "Livecheck latest version: #{package_details['livecheck_latest_version']}"
|
||||
puts "Open pull request: #{package_details['has_open_pr']}"
|
||||
end
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user