package fs; use index; # total returned files our $NRETURNED = 0; sub copy($$$$) { my $ID_ref = shift; my $file_type_ref = shift; my $file_name_ref = shift; my $file_retpath_ref = shift; my @ID = @$ID_ref; my @file_type = @$file_type_ref; my @file_name = @$file_name_ref; my @file_retpath = @$file_retpath_ref; my $i; my $bfilepath; my $bfilebasename; my $retval; my $oldsize; my $newsize; print "[fs::copy] entering with " . scalar(@file_type) . " ab_want files\n"; # TODO # iterate over all given files for($i = 0; $i < scalar(@file_type); $i++) { $bfilepath = index::lookup($file_type[$i], $file_name[$i]); if ($bfilepath eq "") { # requested file not found in backups # XXX notify via email ? print "[fs::copy] $file_name[$i] of type $file_type[$i] not found in backups\n"; # XXX unwant file in db, maybe unneccessary? dbops::unwant($file_type[$i], $ID[$i]); next; # NOTREACHED } # here it is safe to do basename $bfilebasename = `basename $bfilepath`; chomp($bfilebasename); print "[fs::copy] initiating copy $bfilepath to $file_retpath[$i]/$bfilebasename\n"; # execute system command system("cp $bfilepath $file_retpath[$i]"); if ($? != 0) { # cp failed print "[fs::copy] copy failed (retval=$?)\n"; # process next element next; } # check sizes if (-s $bfilepath == -s "$file_retpath[$i]/$bfilebasename") { print "[fs::copy] copy completed, sizes matched\n"; $NRETURNED++; # update database print "file_type=$file_type[$i] ID=$ID[$i]\n"; dbops::unwant($file_type[$i], $ID[$i]); } else { # sized did not matched print "[fs::copy] copy completed, but sizes DID NOT MATCHED\n"; print "[fs::copy] will NOT update database\n"; } # next file next; } print "[fs::copy] leaving (copied $NRETURNED files)\n"; } return 1;