* Split BackupPC_Admin into a set of modules, one for each major action.
[BackupPC.git] / lib / BackupPC / Xfer / Rsync.pm
index ee14c36..8f8093b 100644 (file)
@@ -11,7 +11,7 @@
 #   Craig Barratt  <cbarratt@users.sourceforge.net>
 #
 # COPYRIGHT
-#   Copyright (C) 2002  Craig Barratt
+#   Copyright (C) 2002-2003  Craig Barratt
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.0.0_CVS, released 3 Feb 2003.
+# Version 2.1.0_CVS, released 3 Jul 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.30 ) {
+        if ( $File::RsyncP::VERSION < 0.41 ) {
             $RsyncLibOK = 0;
-            $RsyncLibErr = "File::RsyncP module version too old: need 0.30";
+            $RsyncLibErr = "File::RsyncP module version too old: need 0.41";
         } else {
             $RsyncLibOK = 1;
         }
@@ -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,16 +265,20 @@ 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},
@@ -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