Skip to content

Instantly share code, notes, and snippets.

@supechicken
Created December 17, 2021 16:46
Show Gist options
  • Save supechicken/e5467d780d9aa53f4ba04ee4b48d8411 to your computer and use it in GitHub Desktop.
Save supechicken/e5467d780d9aa53f4ba04ee4b48d8411 to your computer and use it in GitHub Desktop.
Check update for all GNU packages in Chromebrew
# -*- encoding: UTF-8 -*-
$LOAD_PATH << '/usr/local/lib/crew/lib/'
require 'concurrent'
require 'fileutils'
require 'const'
require 'color'
gnu_pkg = `grep -l 'source_url.*\\.gnu\\.' /usr/local/lib/crew/packages/*.rb`.lines(chomp: true)
git_pkg = `grep -l "source_url.*\\.git['\\"]$" /usr/local/lib/crew/packages/*.rb`.lines(chomp: true)
pool = Concurrent::ThreadPoolExecutor.new(
min_threads: 1,
max_threads: CREW_NPROC,
max_queue: 0, # unbounded work queue
fallback_policy: :caller_runs
)
gnu_pkg.each do |file|
pool.post do
load file
pkgName = File.basename(file, '.rb')
pkg = Object.const_get(pkgName.capitalize)
pkg.name = pkgName
current_ver = pkg.version
html = `curl -Ls '#{File.dirname(pkg.source_url)}/'`
pattern = Regexp.new(File.basename(pkg.source_url).sub(/(?<=-)\d.*?(?=\.tar)/, '(\d.*?)'))
latest_ver = html.scan(pattern).flatten.uniq.sort_by do |ver|
Gem::Version.new(ver)
end[-1]
unless latest_ver
STDERR.puts "#{pkgName}: failed to get the latest version number from HTML".lightred
next
end
if Gem::Version.new(latest_ver) > Gem::Version.new(current_ver.tr('-', '.'))
if ARGV.include?('--wiki')
new_url = pkg.source_url.sub(/(?<=-)\d.*?(?=\.tar)/, latest_ver)
puts "- #{pkgName} | #{new_url} | #{current_ver} | #{latest_ver}"
else
puts "#{pkgName}: current => #{current_ver}, latest => #{latest_ver}"
end
end
end
end
pool.shutdown
pool.wait_for_termination
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment