diff -r 48060abbbeaf -r b3cee849fa46 filebrowser/helpertools/snapshot_compare_dirs.pl --- a/filebrowser/helpertools/snapshot_compare_dirs.pl Thu Aug 19 09:55:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,202 +0,0 @@ -# -# Copyright (c) 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: -# - -use strict; - -use Getopt::Std; -use Digest::MD5 qw( md5 ); -use File::Basename; -use File::Copy; -use File::Find; -use File::Path; - -my @changed_files=(); -my $dir_1_length; -my $dir_2_length; -my $directory1; -my $directory2; -my %list1=(); -my %list2=(); -my %opts=(); -my $switch= 0; -my $result_dir; - -################################################### -## usage() ## -## Prints the usage ## -################################################### -sub usage -{ - print "\nUsage\n\tsnapshot_compare_dirs.pl -1 -2 -r \n"; - print "\nWhere\n\t-1 Original directory\n\t-2 Updated directory\n\t-r Result directory\n"; - exit; -} - -################################################### -## get_param() ## -## Gets command line parameters ## -################################################### -sub get_param -{ - getopts('h1:2:r:', \%opts); - - if ( $opts{'h'} ) { - usage(); - } - - if ( $opts{'1'} ) { - $directory1 = $opts{'1'}; - if ( ! -d $directory1 ) { - print "\nError:\t Directory \"$directory1\" doesn't exist\n"; - exit; - } - } else { - usage(); - } - - if ( $opts{'2'} ) { - $directory2 = $opts{'2'}; - if ( ! -d $directory2 ) { - print "\nError:\t Directory \"$directory2\" doesn't exist\n"; - exit; - } - } else { - usage(); - } - - if ( $opts{'r'} ) { - $result_dir = $opts{'r'}; - if ( ! -d $result_dir ) { - mkdir $result_dir; - } - } else { - usage(); - } - -} - -################################################### -## calculate_hash() Reads file content and ## -## calculates MD5 hash ## -################################################### -sub calculate_hash -{ - my ( $file_name ) = @_; - - open( FILE, $file_name ) or die "Error: Cannot open $file_name\n"; - my @file_stat = stat FILE; - binmode( FILE ); - - my ( $buffer, $hash_value ); - read( FILE, $buffer, $file_stat[7] ); - - close FILE; - - $hash_value = md5( $buffer ); - - return $hash_value; -} - -################################################### -## copy_file() ## -## Copies files with same directory structure ## -################################################### -sub copy_file -{ - my ( $file1, $file2 ) = @_; - my $dir_name = dirname( $file2 ); - - mkpath( $dir_name, 0, 0777 ); - - copy( $file1, $file2 ); -} - -################################################### -## process_files() ## -## Indexes files ## -################################################### -sub process_files -{ - my $file = $File::Find::name; - - if ( -f $file ) { - if ($switch eq 0 ) { - $file = substr( $file, $dir_1_length ); - $list1{$file} = 1;; - } else { - $file = substr( $file, $dir_2_length ); - $list2{$file} = 1; - } - } -} - -################################################### -## main() ## -## Main function ## -################################################### -sub main -{ - get_param(); - - $dir_1_length = length( $directory1 ); - $dir_2_length = length( $directory2 ); - - print "Info:\tProcessing files. This may take some time\n"; - - $switch = 0; - find( \&process_files, $directory1 ); - - $switch = 1; - find( \&process_files, $directory2 ); - - print "Info:\tFiles only exist in \"$directory2\" :\n\n"; - my $counter = 0; - my $file; - my $key; - my $hash1; - my $hash2; - - foreach $key ( sort keys %list2 ){ - if ( $list1{$key} ne 1 ) { - $key =~ s/\//\\/g; - print "\t$key\n"; - copy_file( "$directory2$key", "$result_dir$key" ); - $counter++; - } else { - $hash1 = calculate_hash("$directory1$key"); - $hash2 = calculate_hash("$directory2$key"); - if ($hash1 ne $hash2) { - push @changed_files, $key; - } - } - } - - print "\nInfo:\tTotal $counter new file(s)\n"; - - print "\nInfo:\tList of the changed file\n"; - - $counter = 0; - - foreach $file ( @changed_files ){ - $counter++; - print "\t$file\n"; - } - - print "\nInfo:\tTotal $counter file(s) changed\n"; - print "Info:\tNote: Only new files are copied to $result_dir\n"; -} - -main();