Hi,
Updated patch, I was checking against binary packages instead sources ones.
Sorry,
David
diff -ur how-can-i-help-0.6/bin/how-can-i-help how-can-i-help-0.6-modi/bin/how-can-i-help
--- how-can-i-help-0.6/bin/how-can-i-help 2013-09-12 09:05:21.000000000 +0200
+++ how-can-i-help-0.6-modi/bin/how-can-i-help 2013-10-14 20:45:16.000000000 +0200
@@ -22,14 +22,40 @@
require 'zlib'
require 'stringio'
require 'json'
+require 'yaml'
+require 'digest/md5'
require 'optparse'
HELPITEMS_URL = 'http://udd.debian.org/how-can-i-help.json.gz'
+REMOVALS_URL = 'http://udd.debian.org/cgi-bin/autoremovals.yaml.cgi'
DATADIR = '/var/lib/how-can-i-help'
SEEN_LOCAL = "#{DATADIR}/seen.json"
+REMOVALS_SEEN_LOCAL = "#{DATADIR}/removals_seen.json"
include Debian
+def hash_removals(removals)
+ digests = []
+
+ removals.each_pair do |k, v|
+ digests << hash_removal(k, v)
+ end
+
+ return digests
+end
+
+def hash_removal(k, v)
+ str = ''
+
+ str = k
+ v['bugs'].sort!.each do |value|
+ str += value
+ end
+ str += v["removal_date"].to_s
+
+ return Digest::MD5.hexdigest(str)
+end
+
$quiet = false
$all = false
$root = (Process.euid == 0)
@@ -66,6 +92,12 @@
seen = []
end
+if $root and File::exists?(REMOVALS_SEEN_LOCAL)
+ removals_seen = JSON::parse(IO::read(REMOVALS_SEEN_LOCAL))
+else
+ removals_seen = []
+end
+
# FIXME deal with caching locally
uri = URI.parse(HELPITEMS_URL)
begin
@@ -83,6 +115,22 @@
gz = Zlib::GzipReader.new(StringIO.new(response.body.to_s))
helpitems = JSON::parse(gz.read)
+# FIXME deal with caching locally
+uri = URI.parse(REMOVALS_URL)
+begin
+ response = Net::HTTP.get_response(uri)
+
+ if response.code.to_i != 200
+ puts "Error downloading data file: #{response.code}"
+ exit(0)
+ end
+rescue
+ puts "Error downloading data file: #{$!}"
+ exit(0)
+end
+
+removalitems = YAML.load(StringIO.new(response.body.to_s))
+
# get installed packages
packages = []
str = `dpkg -l`
@@ -95,6 +143,15 @@
end
end
+src_packages = []
+str = `dpkg-query -W -f '${Source:Package}\\n' | sort | uniq`
+if str.respond_to?(:force_encoding)
+ str.force_encoding('utf-8')
+end
+str.split(/\n/).each do |l|
+ src_packages << l
+end
+
helpitems_filtered = []
helpitems.each do |hi|
next if (not $all) and seen.include?(hi['hash'])
@@ -109,6 +166,14 @@
end
end
+removalitems_installed = {}
+removalitems.each_pair do |k, v|
+ next if (not $all) and removals_seen.include?(hash_removal(k, v))
+ if src_packages.include?(k)
+ removalitems_installed[k] = v
+ end
+end
+
unless $quiet
puts "====== How can you help? (doc: http://wiki.debian.org/how-can-i-help ) ======"
end
@@ -135,6 +200,18 @@
end
end
+if removalitems_installed.length > 0
+ puts 'Installed packages marked for removal with (posibly hard to fix) RC bug(s):'
+ removalitems_installed.each_pair do |k, v|
+ output = " - #{k} "
+ v['bugs'].each do |b|
+ output += "- http://bugs.debian.org/#{b} "
+ end
+ output += "- removal date: #{v["removal_date"]}"
+ puts output
+ end
+end
+
if not $all and not $quiet
puts "------ Show all opportunities, not just new ones: how-can-i-help --all ------"
end
@@ -145,4 +222,10 @@
File::open(SEEN_LOCAL, 'w') do |fd|
JSON::dump(seen, fd)
end
+
+ removals_seen = hash_removals(removalitems) & removals_seen
+ removals_seen += hash_removals(removalitems_installed)
+ File::open(REMOVALS_SEEN_LOCAL, 'w') do |fd|
+ JSON::dump(removals_seen, fd)
+ end
end
Sólo en how-can-i-help-0.6-modi/: removals