added SearchHideShare regex to config
[BackupPC.git] / lib / BackupPC / View.pm
index cfebe69..93d4e02 100644 (file)
@@ -76,7 +76,7 @@ sub dirCache
     my($m, $backupNum, $share, $dir) = @_;
     my($i, $level);
 
-    print STDERR "dirCache($backupNum, $share, $dir)\n";
+    #print STDERR "dirCache($backupNum, $share, $dir)\n";
     $dir = "/$dir" if ( $dir !~ m{^/} );
     $dir =~ s{/+$}{};
     return if ( $m->{num} == $backupNum
@@ -97,19 +97,32 @@ sub dirCache
 
     my $previous_increment_entry;
     my $increment_backupNum = $backupNum; # used in loop
+    my @visit_backup_ids;
+    my $i;
+    for ( $i = $m->{idx} ; $i >= 0 ; $i-- ) {
+
+       # we need two incremental backups to detect changes
+       next if $m->{backups}[$i]{level} >= $level && $#visit_backup_ids > 0;
+
+       push @visit_backup_ids, $i;
+
+       # for first full backup we need another full to detect changes
+       last if $m->{backups}[$i]{level} == 0 && $#visit_backup_ids > 0;
+    }
+    #warn "# visit_backup_ids = ",dump @visit_backup_ids;
 
     #
     # merge backups, starting at the requested one, and working
     # backwards until we get to level 0.
     #
     $m->{mergeNums} = [];
-    for ( $i = $m->{idx} ; $level > 0 && $i >= 0 ; $i-- ) {
+#    for ( $i = $m->{idx} ; $level > 0 && $i >= 0 ; $i-- ) {
+    for my $i ( @visit_backup_ids ) {
        #print(STDERR "Do $i ($m->{backups}[$i]{noFill},$m->{backups}[$i]{level})\n");
        #
        # skip backups with the same or higher level
        #
-       #next if ( $m->{backups}[$i]{level} >= $level );
-       # FIXME ASA skip all but first?
+       #next if ( $m->{backups}[$i]{level} >= $level ); # ASA - visit_backup_ids
 
        $level = $m->{backups}[$i]{level};
        $backupNum = $m->{backups}[$i]{num};
@@ -176,15 +189,15 @@ sub dirCache
                if ( $m->{dirOpts}->{only_increment} && $share ) {
                        if ( defined $previous_increment_entry->{$fileUM}
                        && $previous_increment_entry->{$fileUM}->{inode} == $entry->{inode} ) {
-                               warn "# -- $backupNum $fileUM\n";
+                               #warn "# -- $backupNum $fileUM\n";
                                $previous_increment_entry->{$fileUM}->{_hide}++;
                                next;
                        } elsif ( $backupNum < $increment_backupNum ) {
-                               warn "# << $backupNum $fileUM\n";
+                               #warn "# << $backupNum $fileUM\n";
                                $previous_increment_entry->{$fileUM}->{_hide}++;
                                next;
                        } else {
-                               warn "# ++ $backupNum $fileUM ",dump $entry;
+                               #warn "# ++ $backupNum $fileUM ",dump $entry;
                                $previous_increment_entry->{$fileUM} = $entry;
                        }
                } else {
@@ -277,10 +290,10 @@ sub dirCache
 
        # ASA create increment
        if ( $m->{dirOpts}->{only_increment} ) {
-               warn "# previous_increment_entry = ",dump $previous_increment_entry;
+               #warn "# previous_increment_entry = ",dump $previous_increment_entry;
                foreach my $file ( grep { exists $previous_increment_entry->{$_}->{_hide} } keys %$previous_increment_entry ) {
                        delete $m->{files}{$file};
-                       warn "OLD $file\n";
+                       #warn "OLD $file\n";
                }
        }