r2640 - people/goneri/SvnBuildStat-WWW/script

Gonéri Le Bouder goneri-guest at alioth.debian.org
Wed May 9 15:57:26 UTC 2007


Author: goneri-guest
Date: 2007-05-09 15:57:25 +0000 (Wed, 09 May 2007)
New Revision: 2640

Modified:
   people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-db.pl
Log:
use of Thread::Pool::Simple

Modified: people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-db.pl
===================================================================
--- people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-db.pl	2007-05-08 21:06:26 UTC (rev 2639)
+++ people/goneri/SvnBuildStat-WWW/script/svnbuildstat_update-db.pl	2007-05-09 15:57:25 UTC (rev 2640)
@@ -12,25 +12,28 @@
 
 use strict;
 
-use SVN::Client;
 use LWP::UserAgent;
 use Data::Dumper;
 use File::Basename;
 
-use lib '/usr/local/www/sites/nana.rulezlan.org/svnbuildstat/lib';
+use Thread::Pool::Simple;
+use lib '/usr/local/www/sites/svnbuildstat.debian.net/svnbuildstat/lib';
 use SvnBuildStat::Schema;
 use SvnBuildStat::Config;
 
-# TODO: SVN::Client->cat croak is it try to cat a invalid file
-$SVN::Error::handler=undef;
+my $maxThreadPerPool=10;
 
-my $ctx;
-#my $rev;
 my $uri;
 my $folder;
 my $config;
 my $schema;
 
+
+
+my $poolImportPkg;
+my $poolImportRepository;
+my $poolUpdateTarballPresent;
+
 sub mkTarballFromPackage {
   my $package = shift;
 
@@ -40,21 +43,7 @@
   $$package->name.'_'.$majorrelease.".orig.tar.gz";
 }
 
-sub getFile {
-  my $uri = shift;
 
-  my $fh;
-  my $tmp = '';
-  open ($fh, '>', \$tmp) or die;
-  $ctx->cat($fh, $uri, 'HEAD');
-  close ($fh);
-  return unless $tmp;
-
-  my @ret;
-  push @ret, $_ foreach (split $/,$tmp);
-  return @ret;
-}
-
 sub importPkg {
   my( $repository, $uri, $tarballinrepository) = @_;
 
@@ -67,9 +56,9 @@
   foreach (`LC_ALL=C svn info $uri`) {
     $rev = $1 if /Last Changed Rev:\ (\d+)/;
   }
-  print $rev."\n";
+  return unless $rev;
 
-  my @control = getFile($uri."/debian/control");
+  my @control = `svn cat $uri/debian/control`;
   return unless @control;
   foreach (@control) {
     $packagesrc = $1 if /^Source:\ *(.*)/;
@@ -94,7 +83,7 @@
   my $package = $schema->resultset('Package')->find_or_create({name => $packagesrc});
   $package->update_from_related('repository_id',$$repository);
 
-  my @changelog = getFile($uri."/debian/changelog");
+  my @changelog = `svn cat $uri/debian/changelog`;
   if (@changelog && $changelog[0] =~ /^.*\ \((.*)\)/) {
     $package->svndebrelease($1);
     my $tarball = mkTarballFromPackage(\$package);
@@ -182,35 +171,63 @@
   {AutoCommit => 1, debug => 1}
 );
 
+sub importRepository {
+  my $repository = shift;
 
-$ctx = new SVN::Client(
-  auth => [SVN::Client::get_simple_provider(),
-  SVN::Client::get_simple_prompt_provider(\&simple_prompt,2),
-  SVN::Client::get_username_provider()]
-);
+  my $tarballinrepository;
+  print "Repository: ".$$repository->name."\n";
+  my $t = 'svn ls -R '.$$repository->uri;
 
-# Import packages
-my $repository_rs = $schema->resultset('Repository')->search({enabled => 'true'});
-while (my $repository = $repository_rs->next) {
-  my $tarballinrepository;
-  print "Repository: ".$repository->name."\n";
-  my $t = $ctx->ls($repository->uri,'HEAD',1);
-  foreach  (keys %$t) {
-   my $uri = $repository->uri.'/'.$_;
+  my @uri;
+
+  foreach (`$t`) {
+    chomp;
+    my $uri = $$repository->uri.'/'.$_;
+    $tarballinrepository->{basename($_)}=$uri if /\.tar\.gz$/;
     $uri =~ s/\/$//;
-    $tarballinrepository->{basename($_)}=$uri if /\.tar\.gz$/;
+    next if /(tags|branches)/; # I want trunk !
+    next unless /debian\/control$/; # I want trunk !
+    $uri =~ s/(|\/)debian\/control$//;
+    push @uri, $uri;
+  }
 
+  foreach my $uri (@uri) {
     # look for packages
-    next if /branche/; # I want trunk !
-    next unless /debian\/control$/; # I want trunk !
-    $uri =~ s/(|\/)debian\/control$//;
     print "->".$uri."\n";
-    importPkg(\$repository,$uri,$tarballinrepository);
+    my $pid = $poolImportPkg->add($repository,$uri,$tarballinrepository);
+    print "poolImportPkg->".$pid."\n";
   }
+  print "end import Repo\n";
 }
 
-# Check tarball presence 
+########## THREAD POOLS #####
+$poolImportPkg = Thread::Pool::Simple->new(
+   max => $maxThreadPerPool,
+   do => [\&importPkg],
+ );
+$poolImportRepository = Thread::Pool::Simple->new(
+    max => $maxThreadPerPool,
+    do => [\&importRepository],
+  );
+$poolUpdateTarballPresent = Thread::Pool::Simple->new(
+    max => $maxThreadPerPool,
+    do => [\&updateTarballPresent],
+  );
+########
+
+# Import packages
+my $repository_rs = $schema->resultset('Repository')->search({enabled => 'true'});
+while (my $repository = $repository_rs->next) {
+  my $pid = $poolImportRepository->add(\$repository);
+  print "poolImportRepository->".$pid."\n";
+}
+$poolImportPkg->join;
+$poolImportRepository->join;
+
+print "# Check tarball presence\n"; 
+
 my $package_rs = $schema->resultset('Package');
 while (my $package = $package_rs->next) {
-  updateTarballPresent(\$package);
+  $poolUpdateTarballPresent->add(\$package);
 }
+$poolUpdateTarballPresent->join();




More information about the Pkg-games-commits mailing list