[Collab-qa-commits] r432 - svnbuildstat/script

goneri-guest at alioth.debian.org goneri-guest at alioth.debian.org
Tue Sep 11 20:01:02 UTC 2007


Author: goneri-guest
Date: 2007-09-11 20:01:02 +0000 (Tue, 11 Sep 2007)
New Revision: 432

Modified:
   svnbuildstat/script/svnbuildstat_update-repository.pl
Log:
improve the way the script to the clean up


Modified: svnbuildstat/script/svnbuildstat_update-repository.pl
===================================================================
--- svnbuildstat/script/svnbuildstat_update-repository.pl	2007-09-11 19:58:52 UTC (rev 431)
+++ svnbuildstat/script/svnbuildstat_update-repository.pl	2007-09-11 20:01:02 UTC (rev 432)
@@ -18,8 +18,13 @@
 foreach (<lock.*>) {
   /lock.(\d+)/;
   my $pid = $1;
-  die "an instance is already running" if -d "/proc/$pid";
-  unlink $pid;
+  if (open (CMDLINE, "/proc/$pid/cmdline")) {
+    my $content = <CMDLINE>;
+    if ($content =~ /svnbuildstat_update-repository\.pl/) {
+      die "an instance is already running (pid $pid)";
+    }
+  }
+  unlink 'lock.'.$pid;
 }
 touch  "lock.$$";
 use SvnBuildStat::Schema;
@@ -30,15 +35,49 @@
 my $schema;
 
 sub purge {
-find(sub{if(!(-f||/\.{1,2}/|| /\//)){`rm -Rf $_`}},'.');
+  opendir(DIR, '.') || die "can't opendir .: $!";
+  while (my $entry = readdir(DIR)) {
+    if( -d $entry ) {
+      next if $entry =~ /^\.{1,2}/;
+    } elsif ( -f $entry ) {
+      next unless $entry =~ /.*\diff\.gz\.new\..*/;
+    }
+    print "remove: $entry\n";
+    `rm -Rf $entry`;
+  }
+  closedir DIR;
 }
 
+sub purgeOutDated {
+  my $package_rs = $schema->resultset('Package');
+  while (my $package = $package_rs->next) {
+    next unless $package->name;
+    next unless $package->svndebrelease;
+
+    my $svndebrelease = $package->realsvndebrelease;
+    $svndebrelease =~ s/^\d+://;
+
+    if (open REV, "<".$package->name."_".$svndebrelease.".rev") {
+      my $revInRepo = <REV>;
+      close REV;
+      next if $revInRepo eq $package->rev;
+    }
+  
+    $package->issrcinmypool('false');
+    my $t = $package->name."_*";
+    unlink foreach (CORE::glob($t));
+  }
+}
+
 sub updateIsSrcInMyPoolFromFiles {
   my $package_rs = $schema->resultset('Package');
   while (my $package = $package_rs->next) {
     next unless $package->realsvndebrelease;
 
-    if ( -f $package->name."_".$package->realsvndebrelease.".dsc") {
+    my $svndebrelease = $package->realsvndebrelease;
+    $svndebrelease =~ s/^\d+://;
+
+    if ( -f $package->name."_".$svndebrelease.".dsc") {
       $package->issrcinmypool('true');
     } else {
       $package->issrcinmypool('false');
@@ -50,9 +89,21 @@
 sub updateSources {
   my $package_rs = $schema->resultset('Package')->search({issrcinmypool => 'false'});
   while (my $package = $package_rs->next) {
-    next unless $package->istarballpresent || $package->isnative;
+    next unless $package->realsvndebrelease;
+
+    my $svndebrelease = $package->realsvndebrelease;
+    $svndebrelease =~ s/^\d+://;
+    my $failedNotifFile = $package->name."_".$svndebrelease.".dsc.failed";
+
+    next if -f $failedNotifFile;
+    next unless ($package->isnative or $package->istarballpresent);
     purge();
-    prepare(\$package);
+    my $log = [];
+    if (!prepare(\$package, $log)) {
+      if (open LOG, ">".$failedNotifFile) {
+     	print LOG $_ foreach (@$log); 
+      } else { warn "Can't write log file\n" }
+    }
   }
 }
 
@@ -77,28 +128,30 @@
 } 
 
 sub prepare {
-  my $package = shift;
+  my ($package, $log) = @_;
 
   my $directory = $$package->name."-".$$package->svndebrelease;
+  my $tarball = "";
   if (!$$package->isnative) {
-    my $tarball = mkTarballFromPackage($package);
+    $tarball = mkTarballFromPackage($package);
 
     if (!-f $tarball) {
       my $tarballuri = $$package->tarballuri;
       $tarballuri =~ s/\@DEBMIRROR@/$debmirror/;
 
       if (is_error(getstore($tarballuri,$tarball))) {
-	print "[".$$package->name."]failed to download ".$tarballuri."\n";
+	push @$log, "[".$$package->name."]failed to download ".$tarballuri."\n";
 	unlink $tarball;
 	return;
       }
     }
 
-    foreach (`tar xfv $tarball`) {
+    foreach (`tar xfv $tarball 2>&1`) {
+      push @$log, $_;
       $directory = $2 if /^(.\/|)(.*?)\//;
     }
     if (($? >> 8)!=0) {
-      print "[".$$package->name."]failed to untar\n";
+      push @$log, "[".$$package->name."]failed to untar\n";
       `rm -rf $directory $tarball`;
       return;
     } 
@@ -106,26 +159,42 @@
 
   my $revBefore = getRev($$package->uri);
   my $cmd = "svn export ".$$package->uri." $directory --force 2>&1";
-  `$cmd`;
+  push @$log, $_ foreach (`$cmd`);
   if (($? >> 8)!=0) {
-      print "[".$$package->name."]failed to export ".$$package->uri."\n";
-      `rm -rf $directory`;
+      push @$log, "[".$$package->name."]failed to export ".$$package->uri."\n";
+      `rm -rf $directory $tarball`;
       return;
   }
   my $revAfter = getRev($$package->uri);
-
   # I record the revision so I will be able to write it in the DB 
   # with the build log
-  return if $revBefore ne $revAfter;
-  open REV, ">$directory/debian/rev" or return;
-  print REV $revBefore;
-  close REV;
+  if ($revBefore ne $revAfter) {
+    push @$log, "svn revision changed during the svn export\n";
+    return;
+  }
+  #### to remove
+  if (open TMP, ">$directory/debian/rev") {
+    print TMP $revBefore;
+    close TMP;
+  } else {
+    push @$log, "failed to open $directory/debian/rev\n";
+  }
+  ################
+  if (open REV, ">".$$package->name."_".$$package->svndebrelease.".rev") {
+    print REV $revBefore;
+    close REV;
+  } else {
+    my $svndebrelease = $$package->realsvndebrelease;
+    $svndebrelease =~ s/^\d+://;
 
+    push @$log, "failed to open ".$$package->name."_".$svndebrelease.".rev\n";
+  }
 
-  `dpkg-source -b $directory 2>&1`;
+
+  push @$log, $_ foreach (`dpkg-source -b $directory 2>&1`);
   if (($? >> 8)!=0) {
-      print "[".$$package->name."]failed to create .dsc\n";
-      `rm -rf $directory`;
+      push @$log, "[".$$package->name."]failed to create .dsc\n";
+      `rm -rf $directory $tarball`;
       return;
   }
 
@@ -144,5 +213,9 @@
   {AutoCommit => 1, debug => 1}
 );
 
+purgeOutDated();
 updateIsSrcInMyPoolFromFiles();
 updateSources();
+
+unlink "lock.".$$;
+sleep 60;




More information about the Collab-qa-commits mailing list