-#!/bin/perl
+#!/usr/bin/perl
#============================================================= -*-perl-*-
#
# BackupPC_link: link new backup into pool
# Craig Barratt <cbarratt@users.sourceforge.net>
#
# COPYRIGHT
-# Copyright (C) 2001-2003 Craig Barratt
+# Copyright (C) 2001-2009 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
#
#========================================================================
#
-# Version 2.1.0, released 20 Jun 2004.
+# Version 3.2.0, released 31 Jul 2010.
#
# See http://backuppc.sourceforge.net.
#
use BackupPC::Lib;
use BackupPC::Attrib;
use BackupPC::PoolWrite;
+use BackupPC::Storage;
use File::Find;
use File::Path;
$CurrDumpDir = "$Dir/$Backups[$num]{num}";
$Compress = $Backups[$num]{compress};
if ( open(NEW, "<", "$Dir/NewFileList.$Backups[$num]{num}") ) {
+ my(@shareAttribArgs);
binmode(NEW);
while ( <NEW> ) {
chomp;
next if ( !/(\w+) (\d+) (.*)/ );
- LinkNewFile($1, $2, "$CurrDumpDir/$3");
+ if ( $3 eq "attrib" ) {
+ #
+ # Defer linking top-level attrib file until the end
+ # since it can appear multiple times when multiple shares
+ # are dumped.
+ #
+ @shareAttribArgs = ($1, $2, "$CurrDumpDir/$3");
+ } else {
+ LinkNewFile($1, $2, "$CurrDumpDir/$3");
+ }
}
+ LinkNewFile(@shareAttribArgs) if ( @shareAttribArgs );
close(NEW);
}
unlink("$Dir/NewFileList.$Backups[$num]{num}")
$Backups[$num]{sizeNewComp} += $sizeNewComp;
$Backups[$num]{noFill} = $noFill;
$Backups[$num]{fillFromNum} = $fillFromNum;
+ #
+ # Save just this backup's info in case the main backups file
+ # gets corrupted
+ #
+ BackupPC::Storage->backupInfoWrite($Dir,
+ $Backups[$num]{num},
+ $Backups[$num], 1);
+ #
+ # Save the main backups file
+ #
$bpc->BackupInfoWrite($host, @Backups);
}
#
# Exists in the older filled backup, and not in the new, so link it
#
- link($name, $newName);
+ my($exists, $digest, $origSize, $outSize, $errs)
+ = BackupPC::PoolWrite::LinkOrCopy(
+ $bpc,
+ $name, $Compress,
+ $newName, $Compress);
+ if ( $exists ) {
+ $nFilesExist++;
+ $sizeExist += $origSize;
+ $sizeExistComp += $outSize;
+ } elsif ( $outSize > 0 ) {
+ $nFilesNew++;
+ $sizeNew += $origSize;
+ $sizeNewComp += -s $outSize;
+ LinkNewFile($digest, $origSize, $newName);
+ }
}
}