- my $cmd = qq{$tarIncCreate -h "$row->{'host'}" -s "$row->{'share'}" -n $row->{'num'} | gzip -9 > $tar_dir/$tar_file};
- print STDERR "## $cmd\n" if ($debug);
+ # re-create archive?
+ if ($row->{'inc_size'} == -1 || $size == -1 || $row->{'inc_size'} != $size) {
+ my $cmd = qq{rm -Rf $tar_dir/$tar_file && $tarIncCreate -h "$row->{'host'}" -s "$row->{'share'}" -n $row->{'num'} | $bin->{'gzip'} $Conf{GzipLevel} > $tar_dir/$tar_file};
+ print STDERR "## $cmd\n" if ($debug);
+
+ system($cmd) == 0 or die "failed: $?";
+
+ $size = (stat( "$tar_dir/$tar_file" ))[7];
+ }
+
+ if ($size > 45) {
+
+ my $max_size = $Conf{'MaxArchiveSize'} || die "problem with MaxArchieSize parametar";
+ $max_size *= 1024; # convert to bytes
+
+ my $parts = int( ($size + $max_size - 1) / $max_size );
+
+ if (-d "$tar_dir/$tar_file" && $parts != $row->{'parts'}) {
+ print " join";
+
+ my $in = my $out = "$tar_dir/$tar_file";
+ $out .= '.tmp';
+
+ # FIXME I should really order parts manually!
+ system("cat $in/part* > $out && rm -Rf $in && mv $out $in") == 0 or die "can't join $in: $?";
+ }
+
+ if ($size > $max_size && ! -d "$tar_dir/$tar_file") {
+ print " split/$parts";
+ my $in = my $out = "$tar_dir/$tar_file";
+ $out .= '.tmp';
+ rename $in, $out || die "can't rename $in: $!";
+ mkdir $in || die "can't mkdir $in: $!";