X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FXfer%2FRsyncFileIO.pm;h=044ee55504ad0404b7c762f3d206bbf21f455413;hp=ea72dce06bccee89d6d604eaf2a8c7e2ee1830a8;hb=3f3d4f4adbd990e15969d9cbc5e99e89e613e502;hpb=4cdaa6b8a9f5161ee2da4371d68cbbad41248ea0 diff --git a/lib/BackupPC/Xfer/RsyncFileIO.pm b/lib/BackupPC/Xfer/RsyncFileIO.pm index ea72dce..044ee55 100644 --- a/lib/BackupPC/Xfer/RsyncFileIO.pm +++ b/lib/BackupPC/Xfer/RsyncFileIO.pm @@ -12,7 +12,7 @@ # #======================================================================== # -# Version 3.0.0beta0, released 11 Jul 2006. +# Version 3.0.0, released 28 Jan 2007. # # See http://backuppc.sourceforge.net. # @@ -160,7 +160,8 @@ sub csumStart my($err, $d, $blkSize) = BackupPC::Xfer::RsyncDigest->digestStart( $attr->{fullPath}, $attr->{size}, 0, $defBlkSize, $fio->{checksumSeed}, - 0, $attr->{compress}, 0); + 0, $attr->{compress}, 0, + $fio->{protocol_version}); my($isCached, $isInvalid) = $d->isCached; if ( $fio->{logLevel} >= 5 ) { $fio->log("$attr->{fullPath} verify; cached = $isCached," @@ -169,7 +170,8 @@ sub csumStart if ( $isCached || $isInvalid ) { my $ret = BackupPC::Xfer::RsyncDigest->digestAdd( $attr->{fullPath}, $blkSize, - $fio->{checksumSeed}, 1 # verify + $fio->{checksumSeed}, 1, # verify + $fio->{protocol_version} ); if ( $ret != 1 ) { $fio->log("Bad cached digest for $attr->{fullPath} ($ret);" @@ -185,18 +187,18 @@ sub csumStart (my $err, $fio->{csum}, my $blkSize) = BackupPC::Xfer::RsyncDigest->digestStart($attr->{fullPath}, $attr->{size}, 0, $defBlkSize, $fio->{checksumSeed}, - $needMD4, $attr->{compress}, 1); - if ( $fio->{logLevel} >= 5 ) { - my($isCached, $invalid) = $fio->{csum}->isCached; - $fio->log("$attr->{fullPath} cache = $isCached," - . " invalid = $invalid, phase = $phase"); - } + $needMD4, $attr->{compress}, 1, $fio->{protocol_version}); if ( $err ) { $fio->log("Can't get rsync digests from $attr->{fullPath}" . " (err=$err, name=$f->{name})"); $fio->{stats}{errorCnt}++; return -1; } + if ( $fio->{logLevel} >= 5 ) { + my($isCached, $invalid) = $fio->{csum}->isCached; + $fio->log("$attr->{fullPath} cache = $isCached," + . " invalid = $invalid, phase = $phase"); + } return $blkSize; } @@ -321,14 +323,16 @@ sub viewCacheDir sub attribGetWhere { - my($fio, $f, $noCache) = @_; - my($dir, $fname, $share, $shareM, $partial, $attr); + my($fio, $f, $noCache, $fname) = @_; + my($dir, $share, $shareM, $partial, $attr); - $fname = $f->{name}; - $fname = "$fio->{xfer}{pathHdrSrc}/$fname" + if ( !defined($fname) ) { + $fname = $f->{name}; + $fname = "$fio->{xfer}{pathHdrSrc}/$fname" if ( defined($fio->{xfer}{pathHdrSrc}) ); + } $fname =~ s{//+}{/}g; - if ( $fname =~ m{(.*)/(.*)} ) { + if ( $fname =~ m{(.*)/(.*)}s ) { $shareM = $fio->{shareM}; $dir = $1; $fname = $2; @@ -386,15 +390,10 @@ sub attribGet return $attr; } $target = "/$target" if ( $target !~ /^\// ); - $fio->log("$attr->{fullPath}: redirecting to $target (will trim " - . "$fio->{xfer}{pathHdrSrc})") if ( $fio->{logLevel} >= 4 ); - $target =~ s/^\Q$fio->{xfer}{pathHdrSrc}//; + $fio->log("$attr->{fullPath}: redirecting to $target") + if ( $fio->{logLevel} >= 4 ); $target =~ s{^/+}{}; - # - # Note: overwrites name to point to real file - # - $f->{name} = $target; - ($attr) = $fio->attribGetWhere($f, 1); + ($attr) = $fio->attribGetWhere($f, 1, $target); $fio->log(" ... now got $attr->{fullPath}") if ( $fio->{logLevel} >= 4 ); } @@ -437,7 +436,7 @@ sub attribSet my($fio, $f, $placeHolder) = @_; my($dir, $file); - if ( $f->{name} =~ m{(.*)/(.*)} ) { + if ( $f->{name} =~ m{(.*)/(.*)}s ) { $file = $2; $dir = "$fio->{shareM}/" . $1; } elsif ( $f->{name} eq "." ) { @@ -517,7 +516,7 @@ sub attribWrite my $dir; my $share; - $dir = $1 if ( $d =~ m{.+?/(.*)} ); + $dir = $1 if ( $d =~ m{.+?/(.*)}s ); $fio->viewCacheDir(undef, $dir); ##print("attribWrite $d,$dir\n"); ##$Data::Dumper::Indent = 1; @@ -529,7 +528,7 @@ sub attribWrite if ( defined($fio->{viewCache}{$d}) ) { foreach my $f ( keys(%{$fio->{viewCache}{$d}}) ) { my $name = $f; - $name = "$1/$name" if ( $d =~ m{.*?/(.*)} ); + $name = "$1/$name" if ( $d =~ m{.*?/(.*)}s ); if ( defined(my $a = $fio->{attrib}{$d}->get($f)) ) { # # delete temporary attributes (skipped files) @@ -565,7 +564,7 @@ sub attribWrite my $dirM = $d; $dirM = $1 . "/" . $fio->{bpc}->fileNameMangle($2) - if ( $dirM =~ m{(.*?)/(.*)} ); + if ( $dirM =~ m{(.*?)/(.*)}s ); my $fileName = $fio->{attrib}{$d}->fileName("$fio->{outDir}$dirM"); $fio->log("attribWrite(dir=$d) -> $fileName") if ( $fio->{logLevel} >= 4 ); @@ -615,7 +614,7 @@ sub statsGet sub makePath { my($fio, $f) = @_; - my $name = $1 if ( $f->{name} =~ /(.*)/ ); + my $name = $1 if ( $f->{name} =~ /(.*)/s ); my $path; if ( $name eq "." ) { @@ -625,7 +624,7 @@ sub makePath } $fio->logFileAction("create", $f) if ( $fio->{logLevel} >= 1 ); $fio->log("makePath($path, 0777)") if ( $fio->{logLevel} >= 5 ); - $path = $1 if ( $path =~ /(.*)/ ); + $path = $1 if ( $path =~ /(.*)/s ); File::Path::mkpath($path, 0, 0777) if ( !-d $path ); return $fio->attribSet($f) if ( -d $path ); $fio->log("Can't create directory $path"); @@ -639,7 +638,7 @@ sub makePath sub makeSpecial { my($fio, $f) = @_; - my $name = $1 if ( $f->{name} =~ /(.*)/ ); + my $name = $1 if ( $f->{name} =~ /(.*)/s ); my $fNameM = $fio->{bpc}->fileNameMangle($name); my $path = $fio->{outDirSh} . $fNameM; my $attr = $fio->attribGet($f); @@ -912,7 +911,7 @@ sub fileDeltaRxNext # need to open an output file where we will build the # new version. # - $fio->{rxFile}{name} =~ /(.*)/; + $fio->{rxFile}{name} =~ /(.*)/s; my $rxOutFileRel = "$fio->{shareM}/" . $fio->{bpc}->fileNameMangle($1); my $rxOutFile = $fio->{outDir} . $rxOutFileRel; $fio->{rxOutFd} = BackupPC::PoolWrite->new($fio->{bpc}, @@ -1079,7 +1078,7 @@ sub fileDeltaRxNext sub fileDeltaRxDone { my($fio, $md4, $phase) = @_; - my $name = $1 if ( $fio->{rxFile}{name} =~ /(.*)/ ); + my $name = $1 if ( $fio->{rxFile}{name} =~ /(.*)/s ); my $ret; close($fio->{rxInFd}) if ( defined($fio->{rxInFd}) ); @@ -1106,7 +1105,8 @@ sub fileDeltaRxDone = BackupPC::Xfer::RsyncDigest->digestStart( $attr->{fullPath}, $attr->{size}, 0, 2048, $fio->{checksumSeed}, 1, - $attr->{compress}, 1); + $attr->{compress}, 1, + $fio->{protocol_version}); if ( $err ) { $fio->log("Can't open $attr->{fullPath} for MD4" . " check (err=$err, $name)"); @@ -1358,7 +1358,7 @@ sub fileListEltSend if ( $fio->{clientCharset} ne "" ); $fList->encode($f); - $logName = "$fio->{xfer}{pathHdrDest}/$f->{name}"; + $logName = "$fio->{xfer}{pathHdrDest}/$logName"; $logName =~ s{//+}{/}g; $f->{name} = $logName; $fio->logFileAction("restore", $f) if ( $fio->{logLevel} >= 1 );