App-KGB
view release on metacpan or search on metacpan
script/kgb-ci-report view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use DBD::Pg;
use DBI;
use Dpkg::Version;
use Getopt::Long;
use JSON::XS qw(decode_json);
use LWP::UserAgent;
my ( @opt_maintainer, $opt_kgb_config );
my $opt_verbose = 1;
my $opt_distribution = 'debian';
my $opt_release = 'sid';
my $opt_kgb_client = 'kgb-client';
GetOptions(
'm|maintainer=s' => \@opt_maintainer,
'kgb-config=s' => \$opt_kgb_config,
'verbose+' => \$opt_verbose,
'quiet' => sub { $opt_verbose = 0 },
'distribution=s' => \$opt_distribution,
'release=s' => \$opt_release,
'kgb-client=s' => \$opt_kgb_client,
) or exit 1;
die "--maintainer is mandatory" unless @opt_maintainer;
$opt_verbose = 1 if not $opt_verbose and not $opt_kgb_client;
sub verbose {
return unless $opt_verbose;
warn @_, "\n";
}
my $db = DBI->connect( 'dbi:Pg:host=udd-mirror.debian.net;dbname=udd',
'udd-mirror', 'udd-mirror', { RaiseError => 1 } );
verbose('Connected to UDD');
my $st
= $db->prepare(
"with a as (select distinct source, source_version\n"
. 'from packages_summary where maintainer_email in ('
. join( ', ', ( ('?') x scalar(@opt_maintainer) ) )
. ") and distribution=? and release=?)\n"
. 'select source, max(source_version) from a group by 1'
);
$st->execute( @opt_maintainer, $opt_distribution, $opt_release );
my $rows = $st->fetchall_arrayref;
$db->disconnect;
verbose( scalar(@$rows) . ' packages found in UDD' );
my %wanted_packages =
map { ( $_->[0] => Dpkg::Version->new( $_->[1] ) ) } @$rows;
my $maintained = scalar @$rows;
undef $rows; # free the memory
my $debci_status_url = 'https://ci.debian.net/data/status/unstable/amd64/packages.json';
my $ua = LWP::UserAgent->new( agent => "$0" );
my $res = $ua->get($debci_status_url);
unless ($res->is_success) {
die "Error retrieving $debci_status_url: ".$res->status_line;
}
my $json = decode_json( ${$res->content_ref} );
( run in 0.607 second using v1.01-cache-2.11-cpan-13bb782fe5a )