FreeCalypso > hg > tcs211-fcmodem
diff g23m/system/busyb/tools/verify_target_folder.pl @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/system/busyb/tools/verify_target_folder.pl Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,101 @@ +# +# verify_target_folder.pl +# +# tool to check for make-like dependency +# +# format: verify_target_folder.pl temp-folder other-command other-parameters +# +# the intention of this command is to modify conditionally a group of files, +# as would it have done by make. since there is no date information, the tool +# uses the contents of the files. +# +# the behaviour of this script is somehow specific: +# - it expects that the first parameter of other-parameters is a folder, where +# files will be generated. other-command is a perl script and will be invoked +# with "do". +# - it generates temp-folder +# - it invokes other-command, but replaces the first parameter with temp-folder +# - it then verifies temp-folder against the expected result folder (the first +# parameter). therefor it compares all existing files in temp-folder with +# equally named files in the other folder. differnt or not existing files +# in the other folder are replaced by the temp-folder variants. +# - since the file is already so special, it brings its own comparison tool, +# that way there is no need to install anything else, that tool compares +# text files +# +# IMPORTANT: +# since the used rename does not rename over file system boundaries (at least +# it is not promised), choose your temp-folder accordingly +# + +use strict; +#use warnings; + +my $temp_folder = shift; +my $other_command = shift; +my $other_dest_folder = $ARGV[0]; + +# normalize $temp_folder +$temp_folder =~ s|\\|/|g; # only slashes, please +$temp_folder =~ s|/$||; # no slash at end of path + +# modify command_line +$ARGV[0] = $temp_folder; + +die "$temp_folder exists" if -e $temp_folder; + +mkdir $temp_folder; + +# to be sure, check the contents +die "unexpected files" if <$temp_folder/*>; + +# perform the command, generate the files in the temp folder +my $result = do $other_command; + +if ((! defined $result) && ($! || $@)) +{ + die "system $other_command failed: $!\n$@"; +} + +# +# check now the files +# + +my @temp_files = <$temp_folder/*>; + +foreach my $temp_file (@temp_files) +{ + if ($temp_file =~ m|(.*)/(.*)|) + { + my $other_file = "$other_dest_folder/$2"; + + if ((! -e $other_file) || compare_files($other_file, $temp_file) == 0) + { + unlink $other_file; + rename $temp_file, $other_file; + } + } +} + +unlink @temp_files; +rmdir $temp_folder; + +sub get_contents_of_file +{ + my ($filename) = @_; + + open(FILE, "<$filename") or die "open failed: $filename"; + my @lines = <FILE>; + my $text = join '', @lines; + close FILE; + + $text +} + +sub compare_files +{ + my ($file1, $file2) = @_; + + get_contents_of_file($file1) eq get_contents_of_file($file2) +} +