X-Git-Url: https://git.donarmstrong.com/?p=bugscan.git;a=blobdiff_plain;f=scanlib.pm;h=1550007cb26fcc77c722704df54ba18976a7e896;hp=a24785ae3e873f20a593c1a04e81f464584b56b5;hb=a56dfd870271c1aa46516ced24f5b2b2667024e5;hpb=ebb39cbbec146fa4f431b0a5ced772280ceb6f48 diff --git a/scanlib.pm b/scanlib.pm index a24785a..1550007 100644 --- a/scanlib.pm +++ b/scanlib.pm @@ -14,7 +14,13 @@ # %packagelist - map from packagename to bugreports # %NMU - map with NMU information +use lib qw(/org/bugs.debian.org/perl/); use LWP::UserAgent; +use Debbugs::MIME qw(decode_rfc1522 encode_rfc1522); +use Debbugs::Packages; +use Debbugs::Versions; +use Debbugs::Status; +use Fcntl qw(O_RDONLY); require bugcfg; sub readcomments() { @@ -182,7 +188,7 @@ sub scanspooldir() { for $f (@list) { next if $exclude{$f}; # Check the list of bugs to skip - my $bug = readbug("$f.summary"); + my $bug = Debbugs::Status::read_bug(summary => "$f.summary"); next if (!defined($bug)); $skip=1; @@ -212,11 +218,11 @@ sub scanspooldir() { } # only bother to check the versioning status for the distributions indicated by the tags - $status_oldstable = getbugstatus($bug, undef, 'oldstable') if ($oldstable_tag); - $status_stable = getbugstatus($bug, undef, 'stable') if ($stable_tag); - $status_testing = getbugstatus($bug, undef, 'testing') if ($testing_tag); - $status_unstable = getbugstatus($bug, undef, 'unstable') if ($unstable_tag); - $status_experimental = getbugstatus($bug, undef, 'experimental') if ($experimental_tag); + $status_oldstable = get_status($f, $bug, 'oldstable') if ($oldstable_tag); + $status_stable = get_status($f, $bug, 'stable') if ($stable_tag); + $status_testing = get_status($f, $bug, 'testing') if ($testing_tag); + $status_unstable = get_status($f, $bug, 'unstable') if ($unstable_tag); + $status_experimental = get_status($f, $bug, 'experimental') if ($experimental_tag); $relinfo = ""; $relinfo .= (($oldstable_tag && $status_oldstable->{'pending'} eq 'pending') ? "O" : ""); @@ -361,5 +367,43 @@ sub wwwname() { # "$name"; } -1; +my $_version_cache = {}; +sub get_status() { + my ($bugnr, $bug, $dist) = @_; + + my $status = 'pending'; + + my @versions = Debbugs::Status::getversions($bug->{'package'}, $dist, undef); + my @sourceversions = Debbugs::Status::makesourceversions($bug->{'package'}, undef, @versions); + + if (@sourceversions) { + my $max_buggy = Debbugs::Status::max_buggy(bug => $bugnr, + sourceversions => \@sourceversions, + found => $bug->{'found_versions'}, + fixed => $bug->{'fixed_versions'}, + version_cache => $_version_cache, + package => $bug->{'package'}); + if ($max_buggy eq 'absent') { + $status = 'absent'; + } elsif ($max_buggy eq 'fixed') { + $status = 'done'; + } + } + if (length($bug{'done'}) and + (not @sourceversions or not @{$status{'fixed_versions'}})) { + $status = 'done'; + } + + return $status; +} + +sub check_worry { + my ($status) = @_; + if ($status =~ m/^\[[^]]*I/ or + $status =~ m/ \[[^]]*X/ or + ($status =~ m/ \[[^]]*[OSUE]/ and $status !~ m/ \[[^]]*T/)) { + return 0; + } + return 1; +}