mirror of https://github.com/apache/archiva.git
o add support for selecting syncing mode
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@475682 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d48e815a34
commit
a280c684f3
|
@ -0,0 +1,319 @@
|
|||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use IniFiles;
|
||||
use Net::SMTP;
|
||||
|
||||
my $configuration = new Config::IniFiles( -file => "syncopate.conf" );
|
||||
|
||||
my $globalRepoDirectory = $configuration->val( "syncopate", "repoDirectory" );
|
||||
|
||||
my $repoDirectory = $configuration->val( "syncopate", "repoDirectory" );
|
||||
|
||||
my $standardOptions = $configuration->val( "syncopate", "options" );
|
||||
|
||||
my $rsyncUser = $configuration->val( "syncopate", "rsyncUser" );
|
||||
|
||||
my $reportDirectory = $configuration->val( "syncopate", "reportDirectory" );
|
||||
|
||||
my $smtpServer = $configuration->val( "syncopate", "smtpServer" );
|
||||
|
||||
my $reportUrl = $configuration->val( "syncopate", "reportUrl" );
|
||||
|
||||
if ( defined( $ARGV[0] ) )
|
||||
{
|
||||
my $sourceConfiguration = new Config::IniFiles( -file => "conf/m1/$ARGV[0]" . ".conf" );
|
||||
|
||||
syncSource( $sourceConfiguration );
|
||||
}
|
||||
else
|
||||
{
|
||||
syncSources();
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
# -----------------------------------------------------------------------------
|
||||
sub syncSources
|
||||
{
|
||||
my @sources = glob( "conf/m1/*.conf" );
|
||||
|
||||
for my $source (@sources)
|
||||
{
|
||||
my $sourceConfiguration = new Config::IniFiles( -file => $source );
|
||||
|
||||
my $batchDisabled = $sourceConfiguration->val( "info", "batchDisabled" );
|
||||
|
||||
if ( not defined( $batchDisabled ) )
|
||||
{
|
||||
syncSource( $sourceConfiguration );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
# -----------------------------------------------------------------------------
|
||||
sub syncSource()
|
||||
{
|
||||
my $sourceConfiguration = shift;
|
||||
|
||||
print "Syncing " . $sourceConfiguration->val( "info", "name" ) . "\n";
|
||||
|
||||
# Look at the mode we are going to use to sync: svn over https, rsync over ssh, or plain rsync (we should move away from this)
|
||||
|
||||
my $syncMode = $sourceConfiguration->val( "host", "mode" );
|
||||
|
||||
if ( $syncMode == "rsync_ssh" )
|
||||
{
|
||||
runRsyncOverSsh( $sourceConfiguration );
|
||||
}
|
||||
else if ( $syncMode == "rsync" )
|
||||
{
|
||||
runRsync( $sourceConfiguration );
|
||||
}
|
||||
else if ( $syncMode == "svn" )
|
||||
{
|
||||
runSvnOverHttps( $sourceConfiguration );
|
||||
}
|
||||
}
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
#
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
sub runRsyncOverSsh()
|
||||
{
|
||||
my $sourceConfiguration = shift;
|
||||
|
||||
my $address = $sourceConfiguration->val( "host", "address" );
|
||||
|
||||
my $directory = $sourceConfiguration->val( "host", "directory" );
|
||||
|
||||
my $options = $sourceConfiguration->val( "host", "options" );
|
||||
|
||||
my $rsyncUser = $configuration->val( "syncopate", "rsyncUser" );
|
||||
|
||||
my $identity = $configuration->val( "syncopate", "identity" );
|
||||
|
||||
if ( $sourceConfiguration->val( "host", "rsyncUser" ) )
|
||||
{
|
||||
$rsyncUser = $sourceConfiguration->val( "host", "rsyncUser" );
|
||||
}
|
||||
|
||||
if ( $sourceConfiguration->val( "host", "identity" ) )
|
||||
{
|
||||
$identity = "-i " . $sourceConfiguration->val( "host", "identity" );
|
||||
}
|
||||
|
||||
if ( $sourceConfiguration->val( "host", "repoDirectory" ) )
|
||||
{
|
||||
$repoDirectory = $sourceConfiguration->val( "host", "repoDirectory" );
|
||||
}
|
||||
|
||||
|
||||
my $cmd = "rsync $standardOptions $options --rsh=\"ssh -oBatchMode=yes $identity -T -l $rsyncUser\" $address:$directory/ $repoDirectory";
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Now we want to run rsync and generate a small xdoc which describes the
|
||||
# syncronization that just occurred.
|
||||
# -------------------------------------------------------------------------
|
||||
|
||||
my $id = $sourceConfiguration->val( "info", "id" );
|
||||
|
||||
my $name = $sourceConfiguration->val( "info", "name" );
|
||||
|
||||
my $reportName = "Synchronization report for " . $name;
|
||||
|
||||
my @date = date();
|
||||
|
||||
my $date = $date[0] . "-" . $date[1] . "-" . $date[2];
|
||||
|
||||
my $dir = $date;
|
||||
|
||||
$dir =~ s/-/\//g;
|
||||
|
||||
$dir = $id . "/" . $dir;
|
||||
|
||||
my $rdir = $reportDirectory . "/" . $dir;
|
||||
|
||||
system( "mkdir -p $rdir > /dev/null 2>&1" );
|
||||
|
||||
my $base = $id . "-" . $date[0] . $date[1] . $date[2] . "-" . $date[3] . $date[4] . $date[5];
|
||||
|
||||
my $xmlReport = $rdir . "/" . $base . ".xml";
|
||||
|
||||
my $rawReport = $rdir . "/" . $base . ".txt";
|
||||
|
||||
open( REPORT, "> $xmlReport" );
|
||||
|
||||
open( RAW_REPORT, "> $rawReport" );
|
||||
|
||||
print REPORT "<document>" . "\n";
|
||||
|
||||
print REPORT "<properties>" . "\n";
|
||||
|
||||
print REPORT "<author>meeper</author>" . "\n";
|
||||
|
||||
print REPORT "<title>$reportName</title>" . "\n";
|
||||
|
||||
print REPORT "</properties>" . "\n";
|
||||
|
||||
print REPORT "<body>" . "\n";
|
||||
|
||||
print REPORT "<section name=\"$reportName\">" . "\n";
|
||||
|
||||
print REPORT "<table>" . "\n";
|
||||
|
||||
print REPORT "<tr>" . "\n";
|
||||
|
||||
print REPORT "<th>Artifact</th>" . "\n";
|
||||
|
||||
print REPORT "<th>Size (in bytes)</th>" . "\n";
|
||||
|
||||
print REPORT "<th>Date</th>" . "\n";
|
||||
|
||||
print REPORT "</tr>" . "\n";
|
||||
|
||||
open( SYNC, "$cmd 2>&1 |" );
|
||||
|
||||
my $rawReportText;
|
||||
|
||||
while( <SYNC> )
|
||||
{
|
||||
# --------------------------------------------------------------------
|
||||
# We have a line that tells us about an artifact that was synced.
|
||||
# --------------------------------------------------------------------
|
||||
if ( /^artifact/ )
|
||||
{
|
||||
my @details = split;
|
||||
|
||||
print REPORT "<tr>" . "\n";
|
||||
|
||||
print REPORT "<td>" . $details[1] . "</td>" . "\n";
|
||||
|
||||
print REPORT "<td>" . $details[2] . "</td>" . "\n";
|
||||
|
||||
print REPORT "<td>" . $details[3] . " " . $details[4] . "</td>" . "\n";
|
||||
|
||||
print REPORT "</tr>" . "\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$rawReportText = $rawReportText . $_;
|
||||
|
||||
print RAW_REPORT;
|
||||
}
|
||||
}
|
||||
|
||||
print REPORT "</table>" . "\n";
|
||||
|
||||
print REPORT "<p><a href=\"$rawReport\">Raw report</a></p>";
|
||||
|
||||
print REPORT "</section>" . "\n";
|
||||
|
||||
print REPORT "</body>" . "\n";
|
||||
|
||||
print REPORT "</document>" . "\n";
|
||||
|
||||
close( REPORT );
|
||||
|
||||
close( RAW_REPORT );
|
||||
|
||||
if ( $rawReportText )
|
||||
{
|
||||
$rawReportText = $rawReportText . "\n\nYou can view the syncronization reports for today here: \n\n";
|
||||
|
||||
$rawReportText = $rawReportText . $reportUrl . "/" . $dir;
|
||||
|
||||
notify( $sourceConfiguration, $reportName, $rawReportText );
|
||||
}
|
||||
}
|
||||
|
||||
sub runRsync()
|
||||
{
|
||||
my $sourceConfiguration = shift;
|
||||
}
|
||||
|
||||
sub runSvnOverHttps()
|
||||
{
|
||||
my $sourceConfiguration = shift;
|
||||
}
|
||||
|
||||
sub date
|
||||
{
|
||||
my $second;
|
||||
my $minute;
|
||||
my $hour;
|
||||
my $day;
|
||||
my $month;
|
||||
my $year;
|
||||
|
||||
($second, $minute,$hour,$day, $month, $year) = (localtime)[0..5];
|
||||
|
||||
$year = $year + 1900; #got 2004
|
||||
|
||||
$month = $month + 1;
|
||||
|
||||
$second = $second + 1;
|
||||
|
||||
$minute = $minute + 1;
|
||||
|
||||
$hour = $hour + 1;
|
||||
|
||||
if ( $second <= 9 )
|
||||
{
|
||||
$second = "0".$second;
|
||||
}
|
||||
if ( $minute <= 9 )
|
||||
{
|
||||
$minute = "0".$minute;
|
||||
}
|
||||
if ( $hour <= 9 )
|
||||
{
|
||||
$hour = "0".$hour;
|
||||
}
|
||||
if ( $day <= 9 )
|
||||
{
|
||||
$day = "0".$day;
|
||||
}
|
||||
if ( $month <= 9)
|
||||
{
|
||||
$month = "0".$month;
|
||||
}
|
||||
|
||||
return ($year,$month,$day,$hour,$minute,$second);
|
||||
}
|
||||
|
||||
sub notify()
|
||||
{
|
||||
my $sourceConfiguration = shift;
|
||||
|
||||
my $subject = shift;
|
||||
|
||||
my $text = shift;
|
||||
|
||||
my $smtp = new Net::SMTP( $smtpServer );
|
||||
|
||||
$smtp->mail( "meeper\@maven.org" );
|
||||
|
||||
$smtp->to( $sourceConfiguration->val( "info", "contact" ) );
|
||||
|
||||
$smtp->data();
|
||||
|
||||
$smtp->datasend( "Subject: $subject\n" );
|
||||
|
||||
$smtp->datasend( "From: meeper\@maven.org\n" );
|
||||
|
||||
$smtp->datasend( "\n" );
|
||||
|
||||
$smtp->datasend( $text );
|
||||
|
||||
$smtp->dataend();
|
||||
|
||||
$smtp->quit();
|
||||
}
|
Loading…
Reference in New Issue