maintain own stack to cut down memory usage
authordpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Fri, 29 Jul 2005 17:31:14 +0000 (17:31 +0000)
committerdpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Fri, 29 Jul 2005 17:31:14 +0000 (17:31 +0000)
git-svn-id: svn+ssh://llin/home/dpavlin/private/svn/BackupPC/trunk@27 8392b6e1-25fa-0310-8288-cc32f8e212ea

bin/BackupPC_updatedb

index eea5ffe..dd2db8f 100755 (executable)
@@ -273,56 +273,73 @@ sub recurseDir($$$$$$$$) {
 
        my ($nr_files, $new_files, $nr_dirs, $new_dirs) = (0,0,0,0);
 
-       my $files = BackupPC::View->new($bpc, $hostname, $backups);             
-       my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);
-
-       # first, add all the entries in current directory
-       foreach my $path_key (keys %{$filesInBackup}) {
-               my @data = (
-                       $shareID,
-                       $backupNum,
-                       $path_key,
-                       $filesInBackup->{$path_key}->{'relPath'},
-                       $filesInBackup->{$path_key}->{'fullPath'},
-#                      $filesInBackup->{$path_key}->{'sharePathM'},
-                       $filesInBackup->{$path_key}->{'mtime'},
-                       $filesInBackup->{$path_key}->{'type'},
-                       $filesInBackup->{$path_key}->{'size'}
-               );
+       my @stack;
+
+       { # scope
+
+               my $files = BackupPC::View->new($bpc, $hostname, $backups);             
+               my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);
+
+print STDERR "$hostname: $share | $dir | $backupNum\n";
+
+               # first, add all the entries in current directory
+               foreach my $path_key (keys %{$filesInBackup}) {
+                       my @data = (
+                               $shareID,
+                               $backupNum,
+                               $path_key,
+                               $filesInBackup->{$path_key}->{'relPath'},
+                               $filesInBackup->{$path_key}->{'fullPath'},
+       #                       $filesInBackup->{$path_key}->{'sharePathM'},
+                               $filesInBackup->{$path_key}->{'mtime'},
+                               $filesInBackup->{$path_key}->{'type'},
+                               $filesInBackup->{$path_key}->{'size'}
+                       );
+
+                       my $key = join(" ", (
+                               $shareID,
+                               $dir,
+                               $path_key,
+                               $filesInBackup->{$path_key}->{'mtime'},
+                               $filesInBackup->{$path_key}->{'size'}
+                       ));
+
+
+                       if (! $beenThere->{$key} && ! found_in_db(@data)) {
+                               $sth->{'insert_files'}->execute(@data);
+                               print STDERR "$key\n";
+                               if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
+                                       $new_dirs++;
+                               } else {
+                                       $new_files++;
+                               }
+                       }
+                       $beenThere->{$key}++;
 
-               my $key = join(" ", (
-                       $shareID,
-                       $dir,
-                       $path_key,
-                       $filesInBackup->{$path_key}->{'mtime'},
-                       $filesInBackup->{$path_key}->{'size'}
-               ));
+                       if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
+                               $nr_dirs++;
 
+                               push @stack, [ $bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID ] unless ($beenThere->{$key});
+#                              my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID) unless ($beenThere->{$key});
+#
+#                              $nr_files += $f;
+#                              $new_files += $nf;
+#                              $nr_dirs += $d;
+#                              $new_dirs += $nd;
 
-               if (! $beenThere->{$key} && ! found_in_db(@data)) {
-                       $sth->{'insert_files'}->execute(@data);
-#                      print STDERR "$key\n";
-                       if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
-                               $new_dirs++;
                        } else {
-                               $new_files++;
+                               $nr_files++;
                        }
                }
-               $beenThere->{$key}++;
-
-               if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
-                       $nr_dirs++;
-
-                       my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID);
 
-                       $nr_files += $f;
-                       $new_files += $nf;
-                       $nr_dirs += $d;
-                       $new_dirs += $nd;
+       }
 
-               } else {
-                       $nr_files++;
-               }
+       foreach my $r (@stack) {
+               my ($f,$nf,$d,$nd) = recurseDir(@{$r});
+               $nr_files += $f;
+               $new_files += $nf;
+               $nr_dirs += $d;
+               $new_dirs += $nd;
        }
 
        return ($nr_files, $new_files, $nr_dirs, $new_dirs);