diff -r 000000000000 -r 83f4b4db085c bldsystemtools/commonbldutils/BuildExpiry.pl --- /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 <