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

Lucas Nussbaum lucas at lucas-nussbaum.net
Thu Jul 28 10:45:05 UTC 2011


The following commit has been merged in the master branch:
commit 9058d43661609a016b3cd5897182345b16281b96
Author: Lucas Nussbaum <lucas at lucas-nussbaum.net>
Date:   Thu Jul 28 12:35:08 2011 +0200

    add script to show repository status

diff --git a/pkg-overview b/pkg-overview
new file mode 100755
index 0000000..6787770
--- /dev/null
+++ b/pkg-overview
@@ -0,0 +1,122 @@
+#!/usr/bin/ruby
+
+require 'peach'
+require 'pp'
+
+class DebVersion
+  include Comparable
+
+  def initialize(v)
+    @version = v
+  end
+
+  def to_s
+    @version
+  end
+
+  def <=>(anOther)
+    system("dpkg --compare-versions #{to_s} lt #{anOther.to_s}")
+    return -1 if $?.exitstatus == 0
+    system("dpkg --compare-versions #{to_s} gt #{anOther.to_s}")
+    return 1 if $?.exitstatus == 0
+    return 0
+  end
+end
+
+module Enumerable
+  def hash_merge
+    return Hash[*self.map(&:to_a).flatten]
+  end
+end
+
+def rmadison_to_version(src)
+  ok = false
+  begin
+    s = `rmadison #{src}`
+    if s =~ /Internal Server Error/
+      STDERR.puts "WARNING: `rmadison #{src}` Failed. Retrying."
+    else
+      ok = true
+    end
+  end while not ok
+  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
+end
+
+def changelog_version(src)
+  res = `cd #{src} && dpkg-parsechangelog 2>/dev/null`
+  if $?.exitstatus != 0
+      STDERR.puts "ERROR: #{src}: dpkg-parsechangelog failed."
+      return nil
+  end
+  v = res.lines.grep(/^Version: /).first.split(' ')[1]
+  v.gsub!(/^[0-9]+:/,'') # strip epoch
+  return DebVersion::new(v)
+end
+
+def tag_version(src)
+  res = `cd #{src} && git tag -l 2>/dev/null`
+  if $?.exitstatus != 0
+      STDERR.puts "ERROR: #{src}: git tag -l failed."
+      return nil
+  end
+  tags = res.lines.reject { |l| l =~ /^upstream\// } \
+    .map { |l| l.chomp.gsub(/^debian\//, '') } \
+    .select { |v| v =~ /^[0-9]/ } \
+    .map { |v| v.gsub('_', '~') } \
+    .map { |l| DebVersion::new(l) }
+  if tags.empty?
+    return nil
+  else
+    return tags.max
+  end
+end
+
+def compute_status(src, cv, tv, av)
+  return '0 ERROR: no changelog version' if cv.nil?
+
+  if av.nil?
+    if tv and cv == tv
+      return '3 Not in Debian, ready to upload'
+    else
+      return '5 Not in Debian, work in progress'
+    end
+  end
+
+  return '0 ERROR: in Debian, but not tag' if tv.nil?
+
+  return '9 Up to date, nothing to do' if av == cv and av == tv
+  return '0 ERROR: archive version newer than changelog version' if av > cv
+  return '0 ERROR: archive version newer than tagged version' if av > tv
+  return '4 Work in progress' if cv > tv
+  return '2 Ready to upload' if cv == tv
+  return '0 ERROR: unknown status'
+end
+
+# get all source packages
+source_packages = (Dir::entries('.') - ['.', '..', '.git', 'wheezy-transition-tracker']).select { |f| File::directory?(f) }.sort
+#
+# get versions from tags
+tag_ver = source_packages.pmap { |src| { src => tag_version(src) } }.hash_merge
+
+# get versions from changelog
+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 = {}
+
+status = source_packages.pmap { |src| { src => compute_status(src, changelog_ver[src], tag_ver[src], archive_ver[src]) } }.hash_merge
+
+puts "%-27s | %15s | %15s | %15s | %s" % ['Source', 'Changelog', 'Tag', 'Archive', 'Status' ]
+groups = source_packages.group_by { |src| status[src] }
+groups.keys.sort.each do |k|
+  puts ("="*20) + " #{k} -- #{groups[k].length} packages " + ("="*20)
+  groups[k].sort.each do |src|
+    puts "%-27s | %15s | %15s | %15s | %s" % [src, changelog_ver[src], tag_ver[src], archive_ver[src], status[src]]
+  end
+end

-- 
pkg-ruby-extras.git



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