--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bldsystemtools/commonbldutils/BuildExpiry.pl Tue Feb 02 01:39:43 2010 +0200
@@ -0,0 +1,151 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Script to navigate through the builds and check for the expiry time
+#
+#
+
+use strict;
+use FindBin; # for FindBin::Bin
+use Getopt::Long;
+use File::Path;
+
+# For Date calculations
+use lib "$FindBin::Bin/../tools/build/lib"; # For running in source
+use Date::Manip;
+
+# Set TimeZone because Date:Manip needs it set and then tell it to IGNORE the TimeZone
+&Date_Init("TZ=GMT","ConvTZ=IGNORE");
+
+# Process the commandline
+my ( $iPath, $iPreview, $iLogPath ) = ProcessCommandLine();
+
+# Open the output logfile if needed
+if ( $iLogPath && !$iPreview )
+{
+ # Redirect both STDOUT and STDERR to the logfile
+ open (STDOUT, ">>$iLogPath") or die ("ERROR: Unable to open file \"$iLogPath\" for writing: $!");
+ open (STDERR, ">&STDOUT") or die ("ERROR: Unable to redirect STDERR to STDOUT: $!");
+
+ # Turn off buffering for each file handle to preserve ordering
+ select((select(STDOUT), $|=1)[0]);
+ select((select(STDERR), $|=1)[0]);
+}
+
+# Get today's date
+my $timestamp = &UnixDate("today","%Y-%m-%d");
+
+# Open the published path and get an array of build directories there
+opendir (DIRS, $iPath);
+my @dirs = readdir(DIRS);
+closedir(DIRS);
+chomp @dirs;
+
+my @build_dirs;
+foreach my $dir (@dirs)
+{
+ if (( -d "$iPath\\$dir" ) && ( $dir =~ /^\d{5}/ ))
+ {
+ # We have found a build directory
+ push @build_dirs, "$iPath\\$dir";
+ }
+}
+
+# Go through each build directory looking for expiry files
+foreach my $dir (@build_dirs)
+{
+ &ProcessDir($dir);
+}
+
+sub ProcessDir
+{
+ my ($dir) = @_;
+
+ opendir(DIR, $dir);
+ my @expirys = readdir(DIR);
+ closedir(DIR);
+ chomp @expirys;
+
+ foreach my $entry (@expirys)
+ {
+ next if (($entry eq ".") or ($entry eq ".."));
+ &ProcessDir("$dir\\$entry") if (-d "$dir\\$entry");
+ next if ((!-f "$dir\\$entry") or ($entry !~ /^(\d+)_(\d+)_(\d+).expiry$/i));
+
+ # We have found an expiry file so extract the expiry date
+ my ($year, $month, $day) = ($1, $2, $3);
+
+ my $delta = &DateCalc("$year-$month-$day","today");
+ if ( &Delta_Format($delta,'0',"%dt") > 0)
+ {
+ # This build directory has expired
+ print "$timestamp: Removing directory \"$dir\" (Expired $year-$month-$day)\n";
+ &RemoveDirectory($dir) if (!$iPreview);
+
+ # Removal of this build directory is complete, so move onto the next one
+ last;
+ }
+ }
+}
+
+sub RemoveDirectory()
+{
+ my $dir = shift;
+
+ my $temp = rmtree($dir);
+ print "$temp file(s) removed.\n";
+
+ return if ( !-d $dir );
+
+ # Directory removal has failed
+ warn "WARNING: Directory \"$dir\" could not be removed.\n";
+}
+
+
+# End of script
+
+sub ProcessCommandLine {
+ my ($iHelp, $iPath, $iPreview,$iLogPath);
+ GetOptions('h' => \$iHelp, 'p=s' => \$iPath, 'n' => \$iPreview,, 'l=s' => \$iLogPath);
+
+ if ( ($iHelp) || (!defined $iPath) )
+ {
+ Usage();
+ }
+ else
+ {
+ return( $iPath, $iPreview, $iLogPath );
+ };
+}
+
+# Usage
+#
+# Output Usage Information.
+#
+
+sub Usage {
+ print <<USAGE_EOF;
+
+ Usage: BuildExpiry.pl [options]
+
+ options:
+
+ -h Help
+ -p %s Path to publish directory
+ -n Preview only
+ -l %s Path to log file
+
+USAGE_EOF
+ exit 1;
+}
+