tests: only write cache file if it changed

Tests sometimes fila when running multiple parallel tests using the
same cache file because it is written everytime a test parameter
is read. Since there is no locking, this might fail from time to time.
This commit is contained in:
Sven Nierlein 2013-09-18 11:03:00 +02:00 committed by Sven Nierlein
parent 065905e900
commit 843bbfb75a

View file

@ -422,6 +422,7 @@ sub LoadCache
{
return if exists( $CACHE{'_cache_loaded_'} );
my $fileContents = "";
if ( -f $CACHEFILENAME )
{
my( $fileHandle ) = new IO::File;
@ -432,44 +433,45 @@ sub LoadCache
return;
}
my( $fileContents ) = join( "\n", <$fileHandle> );
$fileContents = join("", <$fileHandle>);
$fileHandle->close();
chomp($fileContents);
my( $contentsRef ) = eval $fileContents;
%CACHE = %{$contentsRef};
}
$CACHE{'_cache_loaded_'} = 1;
$CACHE{'_cache_loaded_'} = 1;
$CACHE{'_original_cache'} = $fileContents;
}
sub SaveCache
{
delete $CACHE{'_cache_loaded_'};
my $oldFileContents = delete $CACHE{'_original_cache'};
my( $fileHandle ) = new IO::File;
if ( ! $fileHandle->open( "> ${CACHEFILENAME}" ) )
{
print STDERR "NPTest::LoadCache() : Problem saving ${CACHEFILENAME} : $!\n";
return;
}
my( $dataDumper ) = new Data::Dumper( [ \%CACHE ] );
my($dataDumper) = new Data::Dumper([\%CACHE]);
$dataDumper->Terse(1);
$dataDumper->Sortkeys(1);
my $data = $dataDumper->Dump();
$data =~ s/^\s+/ /gmx; # make sure all systems use same amount of whitespace
$data =~ s/^\s+}/}/gmx;
print $fileHandle $data;
chomp($data);
$fileHandle->close();
if($oldFileContents ne $data) {
my($fileHandle) = new IO::File;
if (!$fileHandle->open( "> ${CACHEFILENAME}")) {
print STDERR "NPTest::LoadCache() : Problem saving ${CACHEFILENAME} : $!\n";
return;
}
print $fileHandle $data;
$fileHandle->close();
}
$CACHE{'_cache_loaded_'} = 1;
$CACHE{'_cache_loaded_'} = 1;
$CACHE{'_original_cache'} = $data;
}
#