[DRE-commits] [SCM] pkg-ruby-extras.git branch, master, updated. a95540b18278165a64624b5538f3b3a3339cc077

Antonio Terceiro terceiro at softwarelivre.org
Fri Jul 29 07:46:40 UTC 2011


The following commit has been merged in the master branch:
commit 6cdbac149aaa31c04960874e861d821fa9907e2d
Author: Antonio Terceiro <terceiro at softwarelivre.org>
Date:   Fri Jul 29 00:33:06 2011 -0700

    Instead of caching, just make a single rmadison call
    
    This way we do not hammer the qa site with one request for each package.
    Just request the data for all packages and then process the data
    locally to find out the status of each package.

diff --git a/pkg-overview b/pkg-overview
index 648297d..a7d89a7 100755
--- a/pkg-overview
+++ b/pkg-overview
@@ -31,43 +31,23 @@ module Enumerable
   end
 end
 
-$CACHE_DIR = File.join(ENV['HOME'], '.cache', 'pkg-ruby-extras', 'pkg-overview')
-$CACHE_TAG = Time.now.strftime('%y%m%d%H') # keep the cache for 1 hour
-
-def initialize_cache
-  FileUtils.mkdir_p($CACHE_DIR)
-  Dir.glob(File.join($CACHE_DIR, '*')).each do |f|
-    if f !~ /\.#{$CACHE_TAG}$/
-      File.unlink(f)
-    end
+def rmadison_data(packages)
+  data = {}
+  lines = `rmadison #{packages.join(' ')}`.lines.map(&:strip)
+  if $?.exitstatus != 0
+    puts "ERROR: rmadison failed!"
+    exit(1)
   end
-end
-
-def rmadison_to_version(src)
-  ok = false
-  cache_file = File.join($CACHE_DIR, src + '.' + $CACHE_TAG)
-  s = nil
-  if File.exists?(cache_file)
-    s = File.read(cache_file)
-  else
-    begin
-      s = `rmadison #{src}`
-      if s =~ /Internal Server Error/
-        STDERR.puts "WARNING: `rmadison #{src}` Failed. Retrying."
-      else
-        File.open(cache_file, 'w') do |f|
-          f.write(s)
-        end
-        ok = true
-      end
-    end while not ok
+  rows = lines.map { |line| line.strip.sub(/^\s*/, '').split(/\s+\|\s+/) }
+  packages.each do |pkg|
+    v = rows.select { |row| row[0] == pkg && row[2] == 'sid' && row[3] =~ /source/} \
+      .map { |row| row[1] } \
+      .map { |v| v.gsub(/^[0-9]+:/,'') } \
+      .map { |v| DebVersion::new(v) } \
+      .max
+    data[pkg] = v
   end
-  return nil if s == ""
-  return s.lines.grep(/ sid( |\/).* source/) \
-    .map { |l| l.gsub(/^[^|]*\|\s*([^ ]*)\s*\|.*/, '\1').chomp } \
-    .map { |v| v.gsub(/^[0-9]+:/,'') } \
-    .map { |v| DebVersion::new(v) } \
-    .max
+  data
 end
 
 def changelog_version(src)
@@ -117,8 +97,6 @@ def compute_status(src, cv, tv, av)
   return '0 ERROR: unknown status'
 end
 
-initialize_cache
-
 # get source packages from command line, or all available ones of none passed.
 source_packages = ARGV.size > 0 ? ARGV : Dir.glob('*/debian/changelog').map { |f| File.dirname(File.dirname(f)) }.sort
 #
@@ -129,8 +107,7 @@ tag_ver = source_packages.pmap { |src| { src => tag_version(src) } }.hash_merge
 changelog_ver = source_packages.pmap { |src| { src => changelog_version(src) } }.hash_merge
 
 # get versions in archive
-archive_ver = source_packages.pmap(10) { |src| { src => rmadison_to_version(src) } }.hash_merge
-#archive_ver = {}
+archive_ver = rmadison_data(source_packages)
 
 status = source_packages.pmap { |src| { src => compute_status(src, changelog_ver[src], tag_ver[src], archive_ver[src]) } }.hash_merge
 

-- 
pkg-ruby-extras.git



More information about the Pkg-ruby-extras-commits mailing list