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();
|
|
|
|
|
2020-03-10 21:41:56 +02:00
|
|
|
use pgBackRestDoc::Common::Log;
|
|
|
|
use pgBackRestDoc::Common::String;
|
2019-04-26 14:08:23 +02:00
|
|
|
|
|
|
|
####################################################################################################################################
|
|
|
|
# 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
|
|
|
|
2018-11-03 22:34:04 +02:00
|
|
|
####################################################################################################################################
|
2023-05-02 11:57:12 +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
|
2018-11-03 22:34:04 +02:00
|
|
|
# changing.
|
|
|
|
####################################################################################################################################
|
|
|
|
sub buildPutDiffers
|
|
|
|
{
|
|
|
|
my $oStorage = shift;
|
|
|
|
my $strFile = shift;
|
2019-12-10 20:02:36 +02:00
|
|
|
my $strContentNew = shift;
|
2018-11-03 22:34:04 +02:00
|
|
|
|
|
|
|
# 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
|
2019-12-10 20:02:36 +02:00
|
|
|
if (defined($oFile))
|
2018-11-03 22:34:04 +02:00
|
|
|
{
|
2019-12-10 20:02:36 +02:00
|
|
|
my $strContentFile = ${$oStorage->get($oFile)};
|
|
|
|
|
|
|
|
if ((defined($strContentFile) ? $strContentFile : '') eq (defined($strContentNew) ? $strContentNew : ''))
|
|
|
|
{
|
|
|
|
$bSave = false;
|
|
|
|
}
|
2018-11-03 22:34:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# Save if the contents are different or missing
|
|
|
|
if ($bSave)
|
|
|
|
{
|
2019-12-10 20:02:36 +02:00
|
|
|
$oStorage->put($oStorage->openWrite($strFile, {bPathCreate => true}), $strContentNew);
|
2018-11-03 22:34:04 +02:00
|
|
|
}
|
2018-11-04 01:52:46 +02:00
|
|
|
|
|
|
|
# Was the file saved?
|
|
|
|
return $bSave;
|
2018-11-03 22:34:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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);
|