From 56cf5bafdbc06a4cd43f7b5b1596542571bf3ab9 Mon Sep 17 00:00:00 2001 From: Elizabeth Tackett Date: Mon, 29 Jun 2020 09:51:58 -0500 Subject: [PATCH] focus util module on repology API call --- Library/Homebrew/utils/repology.rb | 46 ++++++++++ Library/Homebrew/utils/update.rb | 130 ----------------------------- 2 files changed, 46 insertions(+), 130 deletions(-) create mode 100644 Library/Homebrew/utils/repology.rb delete mode 100644 Library/Homebrew/utils/update.rb diff --git a/Library/Homebrew/utils/repology.rb b/Library/Homebrew/utils/repology.rb new file mode 100644 index 0000000000..822dfac51a --- /dev/null +++ b/Library/Homebrew/utils/repology.rb @@ -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 diff --git a/Library/Homebrew/utils/update.rb b/Library/Homebrew/utils/update.rb deleted file mode 100644 index 48a18daa10..0000000000 --- a/Library/Homebrew/utils/update.rb +++ /dev/null @@ -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