[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