diff -r 000000000000 -r 83f4b4db085c bldsystemtools/commonbldutils/BxCopy.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bldsystemtools/commonbldutils/BxCopy.pm Tue Feb 02 01:39:43 2010 +0200 @@ -0,0 +1,148 @@ +# 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: +# This module implements the MD5 version of the Evalid's comapre +# +# + +package BxCopy; + +use strict; +use File::Copy; +use File::Find; +use File::Path; + +# FilterDir +# +# Inputs +# $iDir - Directory to process +# $iExclude - Reference to array of regular expression patterns to exclude +# $iInclude - Reference to array of regular expression patterns to include +# +# Outputs +# @iFinalFileList - Filtered list relative filenames +# +# Description +# This function produces a filtered list of filenames in the specified directory + +sub FilterDir +{ + my ($iDir,$iExclude,$iInclude) = @_; + + my (@iFileList, @iFinalFileList); + my ($iExcludeCount, $iIncludeCount); + + # Produce full filelist listing without directory names + # Remove the specified directory path from the front of the filename + find sub { + if (!-d) + { + my $filepath = $File::Find::name; + $filepath=~ s#^$iDir/##i; + push @iFileList, $filepath; + } + }, $iDir; + + #Calculate the number of regex includes and excludes to optimise the filtering + if (defined $iExclude){ + $iExcludeCount = scalar(@$iExclude); + } else { + $iExcludeCount = 0; + } + + if (defined $iInclude){ + $iIncludeCount = scalar(@$iInclude); + } else { + $iIncludeCount = 0; + } + + # return unmodified list of files if there are no regexs to fitler it by + return \@iFileList if (($iExcludeCount == 0) && ($iIncludeCount == 0)); + + foreach my $iFile ( @iFileList) + { + my $iExcludeFile = 0; + + # Process all Exclude RegEx to see if this file matches + foreach my $iExcludeRegEx (@$iExclude) + { + if ($iFile =~ /$iExcludeRegEx/i) + { + # Mark this file to be excluded from the final list + $iExcludeFile = 1; + } + } + + # Process all Include RegEx to see if this file matches + foreach my $iIncludeRegEx (@$iInclude) + { + if ($iFile =~ /$iIncludeRegEx/i) + { + # Mark this file to be Included in the final list + $iExcludeFile = 0; + } + } + + # Added the file to the final list based on the flag + push @iFinalFileList, $iFile unless $iExcludeFile; + } + + return \@iFinalFileList; + +} + +# CopyFiles +# +# Inputs +# $iSource - Directory to copy from +# $iTarget - Directory to copy to +# $iCopyFiles - Reference to an array of relative filenames to copy +# +# Outputs +# +# Description +# This function copies files from one dir to another + +sub CopyFiles +{ + my ($iSource, $iTarget, $iCopyFiles, $iVerbose, $iNoAction) = @_; + + print "No Copy specified, would have performed:-\n" if (defined $iNoAction); + + #Loop through the list of files + my ($j); + for($j = 0; $j < scalar(@$iCopyFiles); $j++) + { + my ($iFile) = $$iCopyFiles[$j]; + #Check if the to final directory exists, if not create it + my ($iDir) = $iFile =~ m#(.*)/.*#; + + if (defined $iVerbose) + { + print $iSource."/".$iFile." => ".$iTarget."/".$iFile."\n"; + } + + if (!defined $iNoAction) + { + if (!-d $iTarget."/".$iDir) + { + mkpath ($iTarget."/".$iDir) || die "ERROR: Cannot create ".$iTarget."/".$iDir; + } + copy($iSource."/".$iFile,$iTarget."/".$iFile) || die "ERROR: Failed to copy ".$iSource."/".$iFile." to ".$iTarget."/".$iFile." $!"; + } + } + + print "$j files processed\n"; +} + +1;