bug squashing fest: moved stack in recurseDir in proper scope (which will save memory),
authordpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sun, 31 Jul 2005 12:40:51 +0000 (12:40 +0000)
committerdpavlin <dpavlin@8392b6e1-25fa-0310-8288-cc32f8e212ea>
Sun, 31 Jul 2005 12:40:51 +0000 (12:40 +0000)
recurse always through all directories (unfortunate fact that directory mtime doesn't
track changes in sub-directories), insert invrement after all files are inserted

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

bin/BackupPC_updatedb

index dd2db8f..2584789 100755 (executable)
@@ -192,14 +192,6 @@ foreach my $host_key (keys %{$hosts}) {
                my ($broj) = $sth->{backups_broj}->fetchrow_array();
                next if ($broj > 0);
 
-               $sth->{insert_backups}->execute(
-                       $hostID,
-                       $backupNum,
-                       $backup->{'endTime'},
-                       $backup->{'type'}
-               );
-               $dbh->commit();
-
                my $files = BackupPC::View->new($bpc, $hostname, \@backups);
                foreach my $share ($files->shareList($backupNum)) {
 
@@ -210,6 +202,15 @@ foreach my $host_key (keys %{$hosts}) {
                        print " $nf/$f files $nd/$d dirs\n";
                        $dbh->commit();
                }
+
+               $sth->{insert_backups}->execute(
+                       $hostID,
+                       $backupNum,
+                       $backup->{'endTime'},
+                       $backup->{'type'}
+               );
+               $dbh->commit();
+
        }
 }
 undef $sth;
@@ -271,17 +272,16 @@ sub recurseDir($$$$$$$$) {
 
        my ($bpc, $hostname, $backups, $backupNum, $share, $dir, $shareID) = @_;
 
-       my ($nr_files, $new_files, $nr_dirs, $new_dirs) = (0,0,0,0);
+#print STDERR "recurse($hostname,$backupNum,$share,$dir,$shareID)\n";
 
-       my @stack;
+       my ($nr_files, $new_files, $nr_dirs, $new_dirs) = (0,0,0,0);
 
        { # scope
+               my @stack;
 
                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 = (
@@ -306,12 +306,14 @@ print STDERR "$hostname: $share | $dir | $backupNum\n";
 
 
                        if (! $beenThere->{$key} && ! found_in_db(@data)) {
+##print STDERR "# key: $key [", $beenThere->{$key},"]";
                                $sth->{'insert_files'}->execute(@data);
-                               print STDERR "$key\n";
                                if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
                                        $new_dirs++;
+##print STDERR " dir\n";
                                } else {
                                        $new_files++;
+##print STDERR " file\n";
                                }
                        }
                        $beenThere->{$key}++;
@@ -319,7 +321,10 @@ print STDERR "$hostname: $share | $dir | $backupNum\n";
                        if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
                                $nr_dirs++;
 
-                               push @stack, [ $bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID ] unless ($beenThere->{$key});
+                               my $full_path = $dir . '/' . $path_key;
+                               push @stack, $full_path;
+##print STDERR "### store to stack: $full_path\n";
+
 #                              my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $path_key, $shareID) unless ($beenThere->{$key});
 #
 #                              $nr_files += $f;
@@ -332,14 +337,16 @@ print STDERR "$hostname: $share | $dir | $backupNum\n";
                        }
                }
 
-       }
+##print STDERR "# STACK ",join(", ", @stack),"\n";
 
-       foreach my $r (@stack) {
-               my ($f,$nf,$d,$nd) = recurseDir(@{$r});
-               $nr_files += $f;
-               $new_files += $nf;
-               $nr_dirs += $d;
-               $new_dirs += $nd;
+               while ( my $dir = shift @stack ) {
+                       my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $backups, $backupNum, $share, $dir, $shareID);
+#      print STDERR "## $dir f: $f nf: $nf d: $d nd: $nd\n";
+                       $nr_files += $f;
+                       $new_files += $nf;
+                       $nr_dirs += $d;
+                       $new_dirs += $nd;
+               }
        }
 
        return ($nr_files, $new_files, $nr_dirs, $new_dirs);