Exemple:
$ ruby latest-srpm.rb <REPO_URL> | xargs wget -N
It will only download the latest SRPM
| source 'https://rubygems.org' | |
| gem 'nokogiri' | |
| gem 'colorize' |
| #!/usr/bin/env ruby | |
| require 'nokogiri' | |
| require 'open-uri' | |
| require 'colorize' | |
| # Read packages | |
| base_url = ARGV[0] | |
| abort "Usage: latest-srpm.rb <URL>" unless base_url | |
| page = Nokogiri::HTML(open(base_url)) | |
| links = [] | |
| page.css('a').each do |a| | |
| url = a['href'] | |
| # Only filters src.rpm files | |
| is_srpm = a.content.match(/(?<name>[a-zA-Z0-9_\-\+]*)-(?<version>[0-9\.]*)-(?<rev>[-_a-zA-Z0-9\.]*)[^\-]*\.src\.rpm/) | |
| next unless is_srpm | |
| # parse name and version from filename | |
| name, version, rev = is_srpm.captures | |
| rev ||= 0 | |
| rev = rev.gsub(/[el]/, '.').gsub(/_/, '-').gsub(/\.\.*/, '.') | |
| link = { | |
| url: base_url + url, | |
| name: name, | |
| # transform version into a semver object | |
| version: Gem::Version.new("#{version}-#{rev}") | |
| } | |
| links << link | |
| end | |
| # Only keep the latest version | |
| packages = {} | |
| links.each do |link| | |
| name=link[:name] | |
| if packages[name] == nil | |
| packages[name] = link | |
| elsif packages[name][:version] < link[:version] | |
| packages[name] = link | |
| elsif packages[name][:version] == link[:version] | |
| $stderr.puts "Same verion for #{packages[name]} and #{link}".red | |
| end | |
| end | |
| # Print the latest SRPM | |
| packages.each_value do |link| | |
| puts "#{link[:url]}" | |
| end |