Author: goneri-guest Date: 2007-05-09 21:20:28 +0000 (Wed, 09 May 2007) New Revision: 2641
Modified: people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-bugs.pl Log: faster script to update the bug status Modified: people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-bugs.pl =================================================================== --- people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-bugs.pl 2007-05-09 15:57:25 UTC (rev 2640) +++ people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-bugs.pl 2007-05-09 21:20:28 UTC (rev 2641) @@ -2,13 +2,17 @@ use strict; -use Net::LDAP; +use LWP::Simple; use Data::Dumper; +use File::Temp qw/ tempfile /; -use lib '/usr/local/www/sites/nana.rulezlan.org/svnbuildstat/lib'; +use lib '/usr/local/www/sites/svnbuildstat.debian.net/svnbuildstat/lib'; + +#"http://qa.debian.org/data/bts2ldap/fullindex"; use SvnBuildStat::Schema; use SvnBuildStat::Config; + my $config = new SvnBuildStat::Config(); my $schema = SvnBuildStat::Schema->connect( $config->db_dsn, @@ -17,57 +21,43 @@ {AutoCommit => 1, debug => 1} ); - -my $ldap = Net::LDAP->new( 'ldap://bts2ldap.debian.net:10101' ) or die "$@"; +my %currentPackage; my $package_rs = $schema->resultset('Package'); -my $todo = $package_rs->count; -my $done = 1; while( my $package = $package_rs->next) { - my $mesg = $ldap->bind ; - print "package: ".$package->name."\n"; - $mesg = $ldap->search( # perform a search - base => "dc=current,dc=bugs,dc=debian,dc=org", - filter => "(&(debbugsSourcePackage=".$package->name.")(debbugsState=open))" - ); + $currentPackage{$package->name} = 1; +} - $mesg->code && die $mesg->error; +my (undef,$tmpfile) = tempfile(); +getstore("http://qa.debian.org/data/bts1ldap/fullindex",$tmpfile); +my %registredPackage; - my $struct = $mesg->as_struct; +open BTS2LDAP, "<$tmpfile" or die; +my %h; +LINE: while (my $line = readline BTS2LDAP) { + if ($line =~ /^$/) { + if ($h{debbugsSourcePackage} && exists ($currentPackage{$h{debbugsSourcePackage}})) { + next LINE if $h{debbugsTag} && $h{debbugsTag} =~ /(pending|wontfix|unreproducible|moreinfo)/; + next LINE if $h{debbugsState} !~ /open/; - my $data; - foreach (keys %$struct) { - next unless grep {"open"} @{$struct->{$_}->{debbugsstate}}; - next if grep {"pending"} @{$struct->{$_}->{debbugstag}}; - next if grep {"wontfix"} @{$struct->{$_}->{debbugstag}}; - next if grep {"unreproducible"} @{$struct->{$_}->{debbugstag}}; + my $package = $schema->resultset('Package')->search({name => $h{debbugsSourcePackage}})->first; + my $severity = $schema->resultset('Severity')->find_or_create({name=>$h{debbugsSeverity}}); + my $bug = $schema->resultset('Bug')->find_or_create({bug_id => $h{debbugsID}}); - $data->{$struct->{$_}->{debbugsid}->[0]} = { + $bug->severity_id ($severity->id); + $bug->package_id ($package->id); + $bug->update; - name => $struct->{$_}->{debbugstitle}->[0], - severity => $struct->{$_}->{debbugsseverity}->[0], - + $registredPackage{$h{debbugsID}} = 1; } + %h = (); } - $schema->resultset('Bug')->search({package_id => $package->id})->delete; + next unless $line =~ /^(debbugsID|debbugsSourcePackage|debbugsState|debbugsTitle|debbugsTag|debbugsSeverity):/; + $h{$1} = $2 if ($line =~ /(\w+): (\w+)/); +} +close BTS2LDAP; - foreach my $bugnum (keys %$data) { - - my $severity = $schema->resultset('Severity')->find_or_create({name=>$data->{$bugnum}->{severity}}); - my $bug = $schema->resultset('Bug')->create({ - - bug_id => $bugnum, - severity_id => $severity->id, - package_id => $package->id, - - }); - - $data->{$bugnum}->{name} =~ s/</</g; - $data->{$bugnum}->{name} =~ s/>/>/g; - - $bug->name ($data->{$bugnum}->{name}); - $bug->update; - } - print "$todo/".$done++."\n"; +my $bug_rs = $schema->resultset('Bug'); +while( my $bug = $bug_rs->next) { + $bug->delete unless $registredPackage{$bug->id}; } -$ldap->unbind; # take down session _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/pkg-games-commits

