[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