lib/pmirror.rb in pmirror-0.0.1 vs lib/pmirror.rb in pmirror-0.0.2

- old
+ new

@@ -7,68 +7,88 @@ class Pmirror include Methadone::Main include Methadone::CLILogging include Methadone::SH - main do |url| + main do + d "Inside main" - download_files( url, options[:localdir], get_download_list(url, options[:pattern]) ) + download_list = get_download_list(options[:url], options[:pattern]) + d "download_list: #{download_list.inspect}" + download_files(options[:localdir], download_list) execute(options[:exec]) if options[:exec] end description "Mirror files on a remote http server based on pattern match" - arg("url", "Url or remote site", :one, :required) on("-p", "--pattern PAT1,PAT2,PAT3", Array, "Regex to match files in remote dir, may specify multiple patterns" ) on("-l", "--localdir DIR", "Local directory to mirror files to") on("-e", "--exec CMD", "Execute command after completion") on("-d", "--debug", "Enable debugging") on("-v", "--version", "Show version") + on("-u", "--url URL,URL", Array, "Url or remote site") - def self.get_download_list(url, pattern) - info "Getting download list" - page = Nokogiri::HTML(open(url)) - downloads = [] + def self.d(msg) + if options[:debug] + puts "[DEBUG]: #{msg}" + end + end - page.css("a").each do |link| - rpm_name = link.attributes['href'].value - pattern.each do |matcher| - if /#{matcher}/.match(rpm_name) - downloads << rpm_name + def self.get_download_list(url_list, pattern) + d "inside get_download_list" + downloads = {} + url_list.each do |single_url| + downloads[single_url] = [] + d "Getting download list for url: #{single_url}" + page = Nokogiri::HTML(open(single_url)) + + page.css("a").each do |link| + file_name = link.attributes['href'].value + pattern.each do |matcher| + if /#{matcher}/.match(file_name) + d "Found match: #{file_name}" + downloads[single_url] << file_name + end end end + d "Returning downloads: #{downloads.inspect}" end downloads end - def self.download_files(url, local_dir, file_list=[]) - file_list.each do |file| - local_fn = "#{local_dir}/#{file}" + def self.download_files(local_dir, url_hash={}) + d "Inside download_files" + url_hash.each_key do |single_url| + d "Working on #{single_url}" + url_hash[single_url].each do |file| + local_fn = "#{local_dir}/#{file}" - unless Dir.exist? options[:localdir] - puts "PWD: #{Dir.pwd}" - puts Dir.open(Dir.pwd).read - puts "Destination directory '#{options[:localdir]}' does not exist!" - exit 1 - end + unless Dir.exist? options[:localdir] + d "PWD: #{Dir.pwd}" + puts Dir.open(Dir.pwd).read + puts "Destination directory '#{options[:localdir]}' does not exist!" + exit 1 + end - remote_fn = "#{url}/#{file}" - unless File.exist?(local_fn) - puts "Downloading File: #{file}" - puts "#{remote_fn} ==> #{local_fn}" - http_to_file(local_fn, remote_fn) - # File.write(local_fn, open(remote_fn).read) - puts "Download Complete for #{file}" - else - puts "Skipping #{file}, already exists" + remote_fn = "#{single_url}/#{file}" + unless File.exist?(local_fn) + puts "Downloading File: #{file}" + puts "#{remote_fn} ==> #{local_fn}" + http_to_file(local_fn, remote_fn) + # File.write(local_fn, open(remote_fn).read) + puts "Download Complete for #{file}" + else + puts "Skipping #{file}, already exists" + end end end end def self.http_to_file(filename,url) + d "Inside http_to_file" pbar = nil File.open(filename, 'wb') do |save_file| open(url, 'rb', :content_length_proc => lambda {|t| if t && 0 < t @@ -82,9 +102,10 @@ end puts end def self.execute(cmd) + d "Inside execute" puts "Executing: #{cmd}" sh("cd #{options[:localdir]} && #{cmd}") end def self.update_repodata(local_dir)