#! /usr/bin/perl -w use warnings; use strict; use Debbugs::Config qw(:globals); use Debbugs::Bugs qw(count_bugs); use Debbugs::Status qw(get_bug_status); package main; my $startdate = time; die "failed to get time: $!" unless defined $startdate; # check the ctime of '/org/bugs.debian.org/www/stats/bugclosers.txt' use File::stat; my $ob = stat '/org/bugs.debian.org/www/stats/bugclosers.txt'; if (defined $ob and (time - $ob->ctime) < 60*60*12) { # If less than 12 hours have passed since we last ran this file, # don't rebuild it. exit 0; } my %bugclosers = count_bugs(function => sub { my %d = @_; return () unless $d{status} eq 'done'; my $status = get_bug_status(bug => $d{bug}); return () unless %$status; my @merged = sort split ' ', $status->{mergedwith}; return () if @merged and $merged[0] < $d{bug}; return ($status->{done}); }); open BUGCLOSERS, '> /org/bugs.debian.org/www/stats/bugclosers.txt.new' or die "can't open bugclosers.txt.new: $!"; binmode(BUGCLOSERS,':raw:encoding(UTF-8)'); for my $closer (sort { $bugclosers{$a} <=> $bugclosers{$b} } keys %bugclosers) { printf BUGCLOSERS "%4d %s\n", $bugclosers{$closer}, $closer or die "can't write to bugclosers.txt.new: $!"; } close BUGCLOSERS or die "can't close bugclosers.txt.new: $!"; rename '/org/bugs.debian.org/www/stats/bugclosers.txt.new', '/org/bugs.debian.org/www/stats/bugclosers.txt' or die "can't rename bugclosers.txt.new to bugclosers.txt: $!";