#!/usr/bin/perl use warnings; use strict; use Data::Dumper; use SOAP::Lite; die if @ARGV; sub e ($) { my ($v) = @_; $v= ''.$v; my $r= $ENV{$v}; die "need $v in environment" unless defined $r; return $r; } my $dist= e('distro'); my $debbugs_soap= e('openbugs_debbugs_soap'); my $debbugs_uri= e('openbugs_debbugs_uri'); my $usertag_owner= e('openbugs_usertag_owner'); my $usertag_name= e('openbugs_usertag_name'); my $soap= SOAP::Lite->uri($debbugs_soap)->proxy($debbugs_uri); open D, "> /dev/null" or die $!; my $bugs_ut= $soap->get_usertag($usertag_owner, $usertag_name)->result(); printf D "bugs_ut: %s\n", Dumper($bugs_ut); my $bugs_rq= [map { [bug => $_, dist => $dist] } @{$bugs_ut->{$usertag_name}}]; printf D "bugs_rq: %s\n", Dumper($bugs_rq); my $stats= $soap->get_status($bugs_rq)->result(); printf D "bugs_rq: %s\nstats: %s\n", Dumper($bugs_rq), Dumper($stats); my $stat; sub badbug ($) { my ($msg) = @_; die "BAD BUG - $msg:\n".Dumper($stat)."\n - $msg !"; } foreach $stat (values %$stats) { printf D "==========\n%s\n", Dumper($stat); next if $stat->{'pending'} eq 'done'; my $fv= $stat->{'found_versions'}; @$fv or badbug("pending but not found"); $fv= $fv->[$#$fv]; my $src= $fv =~ m,/, ? $` : $stat->{'package'}; $src !~ m/[^-+.0-9a-z]/ and $src =~ m/^[0-9a-z]/ or badbug('bad package'); my $id= $stat->{'id'}; $id !~ m/\D/ and $id =~ m/^[1-9]/ or badbug("bad id"); printf "%s %d\n", $src, $id or die $!; } STDOUT->error and die $!; close STDOUT or die $!;