X-Git-Url: https://git.donarmstrong.com/?p=bugscan.git;a=blobdiff_plain;f=scanlib.pm;h=4c6b09bf03a8fab543e246e117c6e3889f4aae2a;hp=3dca704000de24c6dfc17caa78410b7cde07edaf;hb=882c3a5e8e8d32eb965a7d1f805f8ea31668b91c;hpb=db772de0831e46e460b6446cfab4cc29eff83afa diff --git a/scanlib.pm b/scanlib.pm index 3dca704..4c6b09b 100644 --- a/scanlib.pm +++ b/scanlib.pm @@ -1,5 +1,5 @@ #! /usr/bin/perl -# vim: ts=4 sw=4 nowrap +# vim: ts=8 sw=8 nowrap # # General functions for scanning the BTS-database. # Based on bugscan, written by Richard Braakman , @@ -66,16 +66,10 @@ sub readsources() { } } -sub readpackages() { - my $root; # Root of archive we are scanning - my $archive; # Name of archive we are scanning - my $sect; # Name of current section - my $arch; # Name of current architecture - - $root=shift; - $archive=shift; - for $arch ( @bugcfg::architectures ) { - for $sect ( @bugcfg::sections) { +sub readpackages { + my ($root,$archive) = @_; + for my $arch ( @bugcfg::architectures ) { + for my $sect ( @bugcfg::sections) { open(P, "zcat $root/$sect/binary-$arch/Packages.gz|") or die "open: $root/$sect/binary-$arch/Packages.gz: $!\n"; while (

) { @@ -83,10 +77,23 @@ sub readpackages() { next unless m/^Package:\s/; # We're only interested in the packagenames s/^Package:\s*//; # Strip the fieldname $section{$_} = "$archive/$sect"; + print "$root/$sect/binary-$arch/Packages.gz\n" if ($_ eq 'xtla'); } close(P); } } + # handle the source packages + for my $sect (@bugcfg::sections) { + my $fh; + open($fh,'-|','zcat',"$root/$sect/source/Sources.gz") or + die "Unable to open zcat $root/$sect/source/Sources.gz for reading: $!"; + while (<$fh>) { + chomp; + next unless m/^Package:\s/; # We're only interested in the packagenames + s/^Package:\s*//; # Strip the fieldname + $section{$_} = "$archive/$sect"; + } + } } sub readdebbugssources() { @@ -134,13 +141,15 @@ sub scanspool() { } -sub scanspooldir() { +sub scanspooldir { my ($dir) = @_; my $f; # While we're currently processing my @list; # List of files to process my $skip; # Flow control my $walk; # index variable my $taginfo; # Tag info + + my @archs_with_source = ( @bugcfg::architectures, 'source' ); chdir($dir) or die "chdir $dir: $!\n"; @@ -173,15 +182,15 @@ sub scanspooldir() { } next if $skip==1; - my %disttags = (); - $disttags{'oldstable'} = grep(/^woody$/, @tags); - $disttags{'stable'} = grep(/^sarge$/, @tags); - $disttags{'testing'} = grep(/^etch$/, @tags); - $disttags{'unstable'} = grep(/^sid$/, @tags); + my %disttags = (); + for (qw(oldstable stable testing unstable)) { + $disttags{$_} = grep(/^$bug_cfg::debian_releases->{$_}$/, @tags); + } $disttags{'experimental'} = grep(/^experimental$/, @tags); - # default according to dondelelcaro 2006-11-11 + # default according to vorlon 2007-06-17 if (!$disttags{'oldstable'} && !$disttags{'stable'} && !$disttags{'testing'} && !$disttags{'unstable'} && !$disttags{'experimental'}) { + $disttags{'stable'} = 1; $disttags{'testing'} = 1; $disttags{'unstable'} = 1; $disttags{'experimental'} = 1; @@ -190,7 +199,7 @@ sub scanspooldir() { if (defined($section{$bug->{'package'}}) && $section{$bug->{'package'}} eq 'pseudo') { # versioning information makes no sense for pseudo packages, # just use the tags - for my $dist qw(oldstable stable testing unstable experimental) { + for my $dist (qw(oldstable stable testing unstable experimental)) { $bi->{$dist} = $disttags{$dist}; } next if (length($bug->{'done'})); @@ -198,7 +207,7 @@ sub scanspooldir() { my $affects_any = 0; # only bother to check the versioning status for the distributions indicated by the tags - for my $dist qw(oldstable stable testing unstable experimental) { + for my $dist (qw(oldstable stable testing unstable experimental)) { local $SIG{__WARN__} = sub {}; $bi->{$dist} = 0; @@ -208,7 +217,7 @@ sub scanspooldir() { bug => $f, status => $bug, dist => $dist, - arch => \@bugcfg::architectures + arch => \@archs_with_source ); # ignore bugs that are absent/fixed in this distribution, include everything @@ -224,8 +233,9 @@ sub scanspooldir() { next if !$affects_any; } - for my $keyword qw(pending patch help moreinfo unreproducible security upstream sarge-ignore etch-ignore) { - $bi->{$keyword} = ($bug->{'keywords'} =~ /\b$keyword\b/) ? 1 : 0; + for my $keyword (qw(pending patch help moreinfo unreproducible security upstream), + map {$_.$bug_cfg::debian_releases->{testing}.'-ignore'} keys %{$bug_cfg::debian_releases}) { + $bi->{$keyword} = grep(/^$keyword$/, @tags); } if (length($bug->{'mergedwith'})) { @@ -234,7 +244,7 @@ sub scanspooldir() { } for my $package (split /[,\s]+/, $bug->{'package'}) { - $_= $package; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9]/; + $_= $package; y/A-Z/a-z/; $_= $` if m/[^-+._:a-z0-9]/; push @{$packagelist{$_}}, $f; } @@ -246,7 +256,7 @@ sub scanspooldir() { } -sub readstatus() { +sub readstatus { my $filename = shift; open STATUS, "<", $filename or die "$filename: $!"; @@ -273,7 +283,7 @@ sub readstatus() { $bugs{$bug->{'number'}} = $bug; for my $package (split /[,\s]+/, $bug->{'package'}) { - $_= $package; y/A-Z/a-z/; $_= $` if m/[^-+._a-z0-9]/; + $_= $package; y/A-Z/a-z/; $_= $` if m/[^-+._:a-z0-9]/; push @{$packagelist{$_}}, $bug->{'number'}; } } @@ -316,13 +326,19 @@ sub wwwname() { sub check_worry { my ($bi) = @_; - return ($bi->{'testing'} && !$bi->{'etch-ignore'}); + return ($bi->{'testing'} && !$bi->{$bug_cfg::debian_releases->{testing}.'-ignore'}); } sub check_worry_stable { my ($bi) = @_; - return ($bi->{'stable'} && !$bi->{'sarge-ignore'}); + return ($bi->{'stable'} && !$bi->{$bug_cfg::debian_releases->{stable}.'-ignore'}); +} + +sub check_worry_unstable { + my ($bi) = @_; + + return ($bi->{'unstable'}); } sub get_taginfo { @@ -336,7 +352,7 @@ sub get_taginfo { $taginfo .= $bi->{'unreproducible'} ? "R" : " "; $taginfo .= $bi->{'security'} ? "S" : " "; $taginfo .= $bi->{'upstream'} ? "U" : " "; - $taginfo .= ($bi->{'sarge-ignore'} || $bi->{'etch-ignore'}) ? "I" : " "; + $taginfo .= ($bi->{$bug_cfg::debian_releases->{stable}.'-ignore'} || $bi->{$bug_cfg::debian_releases->{testing}.'-ignore'}) ? "I" : " "; return $taginfo; } @@ -345,7 +361,7 @@ sub get_relinfo { my $bi = shift; my $relinfo = ""; - for my $dist qw(oldstable stable testing unstable experimental) { + for my $dist (qw(oldstable stable testing unstable experimental)) { $relinfo .= uc(substr($dist, 0, 1)) if $bi->{$dist}; }