r8613@llin: dpavlin | 2005-10-16 18:18:05 +0200
authordpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sun, 16 Oct 2005 16:18:12 +0000 (16:18 +0000)
committerdpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sun, 16 Oct 2005 16:18:12 +0000 (16:18 +0000)
 use Archive::Tar::Streamed to prevent OOM killer when working with
 huge tars

git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/BackupPC/trunk@215 8392b6e1-25fa-0310-8288-cc32f8e212ea

bin/BackupPC_incPartsUpdate

index de2895a..13990db 100755 (executable)
@@ -13,7 +13,7 @@ use POSIX qw/strftime/;
 use BackupPC::SearchLib;
 use Cwd qw/abs_path/;
 use File::Which;
-use Archive::Tar;
+use Archive::Tar::Streamed;
 use Algorithm::Diff;
 use Getopt::Std;
 
@@ -95,14 +95,17 @@ sub tar_check($$$$) {
                tar_join($filename);
        }
 
-       my $tar = Archive::Tar->new;
-       my $comp = 0;
-       $comp = 1 if ($filename =~ m/\.(gz|tgz)$/);
        print STDERR ", opening" if ($debug);
-       $tar->read($filename, $comp) or die "can't open $filename: $!";
+       open(my $fh, "gzip -cd $filename |") or die "can't open $filename: $!";
+       binmode($fh);
+       my $tar = Archive::Tar::Streamed->new($fh);
 
        print STDERR ", tar" if ($debug);
-       my @tar_files = sort $tar->list_files();
+       my @tar_files;
+       while(my $entry = $tar->next) {
+               push @tar_files, $entry->name;
+       }
+       @tar_files = sort @tar_files;
        print STDERR " ",($#tar_files + 1), " files" if ($debug);
 
        print STDERR ", database" if ($debug);