X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FXfer%2FRsync.pm;h=1b43096b33c56e68ff69c14acb871a638460d91c;hp=11103ca91160abd425ac22630605bd4e6ef2b9b4;hb=8d7768574bb328c669a44c6efbff01e8a7e93d7e;hpb=0697368bbcef14908cd4684cf07744dc840464de diff --git a/lib/BackupPC/Xfer/Rsync.pm b/lib/BackupPC/Xfer/Rsync.pm index 11103ca..1b43096 100644 --- a/lib/BackupPC/Xfer/Rsync.pm +++ b/lib/BackupPC/Xfer/Rsync.pm @@ -29,7 +29,7 @@ # #======================================================================== # -# Version 2.0.0_CVS, released 18 Jan 2003. +# Version 2.0.0, released 14 Jun 2003. # # See http://backuppc.sourceforge.net. # @@ -52,9 +52,9 @@ BEGIN { $RsyncLibOK = 0; $RsyncLibErr = "File::RsyncP module doesn't exist"; } else { - if ( $File::RsyncP::VERSION < 0.20 ) { + if ( $File::RsyncP::VERSION < 0.41 ) { $RsyncLibOK = 0; - $RsyncLibErr = "File::RsyncP module version too old: need 0.20"; + $RsyncLibErr = "File::RsyncP module version too old: need 0.41"; } else { $RsyncLibOK = 1; } @@ -119,7 +119,7 @@ sub start # # We add a slash to the share name we pass to rsync # - ($t->{shareNameSlash} = "$t->{shareName}/") =~ s{//+$}{}; + ($t->{shareNameSlash} = "$t->{shareName}/") =~ s{//+$}{/}; if ( $t->{type} eq "restore" ) { $rsyncClientCmd = $conf->{RsyncClientRestoreCmd}; @@ -228,6 +228,7 @@ sub start # transferred, even though it is a full dump. # $rsyncArgs = $conf->{RsyncArgs}; + $rsyncArgs = [@$rsyncArgs, @fileList] if ( @fileList ); $rsyncArgs = [@$rsyncArgs, "--ignore-times"] if ( $t->{type} eq "full" ); $rsyncClientCmd = $conf->{RsyncClientCmd}; @@ -264,22 +265,26 @@ sub start $t->{rs} = File::RsyncP->new({ logLevel => $conf->{RsyncLogLevel}, rsyncCmd => sub { + $bpc->verbose(0); $bpc->cmdExecOrEval($rsyncClientCmd, $args); }, rsyncCmdType => "full", rsyncArgs => $rsyncArgs, + timeout => $conf->{ClientTimeout}, logHandler => sub { - my($str) = @_; - $str .= "\n"; - $t->{XferLOG}->write(\$str); + my($str) = @_; + $str .= "\n"; + $t->{XferLOG}->write(\$str); }, + pidHandler => sub { + $t->{pidHandler}(@_); + }, fio => BackupPC::Xfer::RsyncFileIO->new({ xfer => $t, bpc => $t->{bpc}, conf => $t->{conf}, backups => $t->{backups}, logLevel => $conf->{RsyncLogLevel}, - timeout => $conf->{ClientTimeout}, logHandler => sub { my($str) = @_; $str .= "\n"; @@ -364,14 +369,19 @@ sub run # my $stats = $rs->statsFinal; if ( !defined($error) && defined($stats) ) { - $t->{xferOK} = 1; + $t->{xferOK} = 1; } else { - $t->{xferOK} = 0; + $t->{xferOK} = 0; } - $t->{byteCnt} = $stats->{childStats}{TotalFileSize} - + $stats->{parentStats}{TotalFileSize}; - $t->{fileCnt} = $stats->{childStats}{TotalFileCnt} - + $stats->{parentStats}{TotalFileCnt}; + $t->{xferErrCnt} = $stats->{remoteErrCnt} + + $stats->{childStats}{errorCnt} + + $stats->{parentStats}{errorCnt}; + $t->{byteCnt} = $stats->{childStats}{TotalFileSize} + + $stats->{parentStats}{TotalFileSize}; + $t->{fileCnt} = $stats->{childStats}{TotalFileCnt} + + $stats->{parentStats}{TotalFileCnt}; + my $str = "Done: $t->{fileCnt} files, $t->{byteCnt} bytes\n"; + $t->{XferLOG}->write(\$str); # # TODO: get error count, and call fio to get stats... # @@ -418,7 +428,7 @@ sub xferPid { my($t) = @_; - return -1; + return (); } sub logMsg