1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2024-12-16 10:20:02 +02:00
pgbackrest/test/lib/pgBackRestTest/Common/BuildTest.pm

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

100 lines
3.6 KiB
Perl
Raw Normal View History

2018-03-10 06:00:20 +02:00
####################################################################################################################################
# Build Binaries and Auto-Generate Code
####################################################################################################################################
package pgBackRestTest::Common::BuildTest;
####################################################################################################################################
# Perl includes
####################################################################################################################################
use strict;
use warnings FATAL => qw(all);
use Carp qw(confess);
use English '-no_match_vars';
# use Cwd qw(abs_path);
use Exporter qw(import);
our @EXPORT = qw();
use pgBackRestDoc::Common::Log;
use pgBackRestDoc::Common::String;
####################################################################################################################################
# VM hash keywords
####################################################################################################################################
use constant BUILD_AUTO_H => 'build.auto.h';
push @EXPORT, qw(BUILD_AUTO_H);
2018-03-10 06:00:20 +02:00
####################################################################################################################################
# Save contents to a file if the file is missing or the contents are different. This saves write IO and prevents the timestamp from
# changing.
####################################################################################################################################
sub buildPutDiffers
{
my $oStorage = shift;
my $strFile = shift;
my $strContentNew = shift;
# Attempt to load the file
my $bSave = true;
my $oFile = $oStorage->openRead($strFile, {bIgnoreMissing => true});
# If file was found see if the content is the same
if (defined($oFile))
{
my $strContentFile = ${$oStorage->get($oFile)};
if ((defined($strContentFile) ? $strContentFile : '') eq (defined($strContentNew) ? $strContentNew : ''))
{
$bSave = false;
}
}
# Save if the contents are different or missing
if ($bSave)
{
$oStorage->put($oStorage->openWrite($strFile, {bPathCreate => true}), $strContentNew);
}
# Was the file saved?
return $bSave;
}
push @EXPORT, qw(buildPutDiffers);
2018-03-10 06:00:20 +02:00
####################################################################################################################################
# Find last modification time in a list of directories, with optional filters
####################################################################################################################################
sub buildLastModTime
{
my $oStorage = shift;
my $strBasePath = shift;
my $rstrySubPath = shift;
my $strPattern = shift;
my $lTimestampLast = 0;
foreach my $strSubPath (defined($rstrySubPath) ? @{$rstrySubPath} : (''))
{
my $hManifest = $oStorage->manifest($strBasePath . ($strSubPath eq '' ? '' : "/${strSubPath}"));
foreach my $strFile (sort(keys(%{$hManifest})))
{
next if (defined($strPattern) && $strFile !~ /$strPattern/);
if ($hManifest->{$strFile}{type} eq 'f' && $hManifest->{$strFile}{modification_time} > $lTimestampLast)
{
$lTimestampLast = $hManifest->{$strFile}{modification_time};
}
}
}
if ($lTimestampLast == 0)
{
confess &log(ERROR, "no files found");
}
return $lTimestampLast;
}
push @EXPORT, qw(buildLastModTime);