/[BackupPC]/trunk/bin/BackupPC_updatedb
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/bin/BackupPC_updatedb

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 44 by dpavlin, Sat Aug 20 11:24:55 2005 UTC revision 86 by dpavlin, Sun Aug 28 12:35:59 2005 UTC
# Line 1  Line 1 
1  #!/usr/local/bin/perl -w  #!/usr/local/bin/perl -w
2    
3  use strict;  use strict;
 use DBI;  
4  use lib "__INSTALLDIR__/lib";  use lib "__INSTALLDIR__/lib";
5    
6    use DBI;
7  use BackupPC::Lib;  use BackupPC::Lib;
8  use BackupPC::View;  use BackupPC::View;
9  use Data::Dumper;  use Data::Dumper;
# Line 10  use Getopt::Std; Line 11  use Getopt::Std;
11  use Time::HiRes qw/time/;  use Time::HiRes qw/time/;
12  use File::Pid;  use File::Pid;
13  use POSIX qw/strftime/;  use POSIX qw/strftime/;
14    
15  use constant BPC_FTYPE_DIR => 5;  use constant BPC_FTYPE_DIR => 5;
16    
17  my $debug = 0;  my $debug = 0;
18  $|=1;  $|=1;
19    
20    my $start_t = time();
21    
22  my $pidfile = new File::Pid;  my $pidfile = new File::Pid;
23    
24  if (my $pid = $pidfile->running ) {  if (my $pid = $pidfile->running ) {
# Line 34  my %Conf = $bpc->Conf(); Line 38  my %Conf = $bpc->Conf();
38  my $TopDir = $bpc->TopDir();  my $TopDir = $bpc->TopDir();
39  my $beenThere = {};  my $beenThere = {};
40    
41  my $dsn = "dbi:SQLite:dbname=$TopDir/$Conf{SearchDB}";  my $dsn = $Conf{SearchDSN} || die "Need SearchDSN in config.pl\n";
42    my $user = $Conf{SearchUser} || '';
43    my $index_path = $Conf{HyperEstraierIndex};
44    
45  my $dbh = DBI->connect($dsn, "", "", { RaiseError => 1, AutoCommit => 0 });  my $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 0 });
46    
47  my %opt;  my %opt;
48    
49  if ( !getopts("cdm:v:", \%opt ) ) {  if ( !getopts("cdm:v:i", \%opt ) ) {
50          print STDERR <<EOF;          print STDERR <<EOF;
51  usage: $0 [-c|-d] [-m num] [-v|-v level]  usage: $0 [-c|-d] [-m num] [-v|-v level] [-i]
52    
53  Options:  Options:
54          -c      create database on first use          -c      create database on first use
55          -d      delete database before import          -d      delete database before import
56          -m num  import just num increments for one host          -m num  import just num increments for one host
57          -v num  set verbosity (debug) level (default $debug)          -v num  set verbosity (debug) level (default $debug)
58            -i      update HyperEstraier full text index
59  EOF  EOF
60          exit 1;          exit 1;
61  }  }
62    
63    if ($opt{v}) {
64            print "Debug level at $opt{v}\n";
65            $debug = $opt{v};
66    }
67    
68    #---- subs ----
69    
70    sub fmt_time {
71            my $t = shift || return;
72            my $out = "";
73            my ($ss,$mm,$hh) = gmtime($t);
74            $out .= "${hh}h" if ($hh);
75            $out .= sprintf("%02d:%02d", $mm,$ss);
76            return $out;
77    }
78    
79    sub curr_time {
80            return strftime($t_fmt,localtime());
81    }
82    
83    #---- /subs ----
84    
85    ## update index ##
86    if ($opt{i}) {
87    
88            print curr_time," updating HyperEstraier: files";
89    
90            my $t = time();
91            
92            my $sth = $dbh->prepare(qq{
93                    SELECT
94                            files.id                        AS fid,
95                            hosts.name                      AS hname,
96                            shares.name                     AS sname,
97                            -- shares.share                 AS sharename,
98                            files.backupnum                 AS backupnum,
99                            -- files.name                   AS filename,
100                            files.path                      AS filepath,
101                            files.date                      AS date,
102                            files.type                      AS filetype,
103                            files.size                      AS size,
104                            files.shareid                   AS shareid,
105                            backups.date                    AS backup_date
106                    FROM files
107                            INNER JOIN shares       ON files.shareID=shares.ID
108                            INNER JOIN hosts        ON hosts.ID = shares.hostID
109                            INNER JOIN backups      ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID
110            });
111    
112            $sth->execute();
113            my $results = $sth->rows;
114    
115            my $dot = int($results / 15);
116    
117            print " $results ($dot/#)";
118    
119            sub fmt_date {
120                    my $t = shift || return;
121                    my $iso = BackupPC::Lib::timeStamp($t);
122                    $iso =~ s/\s/T/;
123                    return $iso;
124            }
125    
126            my $i = 0;
127            my $max = int($results / $dot);
128    
129            $index_path = $TopDir . '/' . $index_path;
130            $index_path =~ s#//#/#g;
131    
132            print " index $index_path...";
133            use HyperEstraier;
134            my $db = HyperEstraier::Database->new();
135            $db->open($index_path, $HyperEstraier::Database::DBWRITER | $HyperEstraier::Database::DBCREAT);
136    
137    
138            while (my $row = $sth->fetchrow_hashref()) {
139    
140                    # create a document object
141                    my $doc = HyperEstraier::Document->new;
142    
143                    # add attributes to the document object
144                    $doc->add_attr('@uri', 'file:///' . $row->{'fid'});
145    
146                    foreach my $c (@{ $sth->{NAME} }) {
147                            $doc->add_attr($c, $row->{$c}) if ($row->{$c});
148                    }
149    
150                    #$doc->add_attr('@cdate', fmt_date($row->{'date'}));
151    
152                    # add the body text to the document object
153                    my $path = $row->{'filepath'};
154                    $doc->add_text($path);
155                    $path =~ s/(.)/$1 /g;
156                    $doc->add_hidden_text($path);
157    
158                    print STDERR $doc->dump_draft,"\n" if ($debug > 1);
159    
160                    # register the document object to the database
161                    $db->put_doc($doc, $HyperEstraier::Database::PDCLEAN);
162    
163                    $i++;
164                    if ($i % $dot == 0) {
165                            print "$max ";
166                            $max--;
167                    }
168    
169            }
170    
171            print "sync";
172            $db->sync();
173            print " close";
174            $db->close();
175    
176            my $dur = (time() - $t) || 1;
177            printf(" [%.2f/s dur: %s]\n",
178                    ( $results / $dur ),
179                    fmt_time($dur)
180            );
181    
182            exit;
183    }
184    
185  ###################################create tables############################3  ###################################create tables############################3
186    
187  if ($opt{c}) {  if ($opt{c}) {
188            sub do_index {
189                    my $index = shift || return;
190                    my ($table,$col,$unique) = split(/_/, $index);
191                    $unique ||= '';
192                    $index =~ s/,/_/g;
193                    $dbh->do(qq{ create $unique index $index on $table($col) });
194            }
195    
196          print "creating tables...\n";          print "creating tables...\n";
197                
198          $dbh->do(qq{          $dbh->do(qq{
199                  create table hosts (                  create table hosts (
200                          ID      INTEGER         PRIMARY KEY,                          ID      SERIAL          PRIMARY KEY,
201                          name    VARCHAR(30)     NOT NULL,                          name    VARCHAR(30)     NOT NULL,
202                          IP      VARCHAR(15)                          IP      VARCHAR(15)
203                  );                              );            
# Line 68  if ($opt{c}) { Line 205  if ($opt{c}) {
205                                
206          $dbh->do(qq{          $dbh->do(qq{
207                  create table shares (                  create table shares (
208                          ID      INTEGER         PRIMARY KEY,                          ID      SERIAL          PRIMARY KEY,
209                          hostID  INTEGER         NOT NULL references hosts(id),                          hostID  INTEGER         NOT NULL references hosts(id),
210                          name    VARCHAR(30)     NOT NULL,                          name    VARCHAR(30)     NOT NULL,
211                          share   VARCHAR(200)    NOT NULL,                          share   VARCHAR(200)    NOT NULL,
# Line 80  if ($opt{c}) { Line 217  if ($opt{c}) {
217                  create table backups (                  create table backups (
218                          hostID  INTEGER         NOT NULL references hosts(id),                          hostID  INTEGER         NOT NULL references hosts(id),
219                          num     INTEGER         NOT NULL,                          num     INTEGER         NOT NULL,
220                          date    DATE,                          date    integer         NOT NULL,
221                          type    CHAR(1),                          type    CHAR(4)         not null,
222                          PRIMARY KEY(hostID, num)                          shareID integer         not null references shares(id),
223                            size    integer         not null,
224                            PRIMARY KEY(hostID, num, shareID)
225                  );                              );            
226          });          });
227    
228            #do_index('backups_hostid,num_unique');
229    
230          $dbh->do(qq{          $dbh->do(qq{
231                  create table dvds (                  create table dvds (
232                          ID      INTEGER         PRIMARY KEY,                          ID      SERIAL          PRIMARY KEY,
233                          num     INTEGER         NOT NULL,                          num     INTEGER         NOT NULL,
234                          name    VARCHAR(255)    NOT NULL,                          name    VARCHAR(255)    NOT NULL,
235                          mjesto  VARCHAR(255)                          mjesto  VARCHAR(255)
# Line 97  if ($opt{c}) { Line 238  if ($opt{c}) {
238    
239          $dbh->do(qq{              $dbh->do(qq{    
240                  create table files (                  create table files (
241                          ID      INTEGER         NOT NULL PRIMARY KEY,                            ID      SERIAL          PRIMARY KEY,  
242                          shareID INTEGER         NOT NULL references shares(id),                          shareID INTEGER         NOT NULL references shares(id),
243                          backupNum  INTEGER      NOT NULL references backups(num),                          backupNum  INTEGER      NOT NULL,
244                          name       VARCHAR(255) NOT NULL,                          name       VARCHAR(255) NOT NULL,
245                          path       VARCHAR(255) NOT NULL,                          path       VARCHAR(255) NOT NULL,
246                          fullpath   VARCHAR(255) NOT NULL,                          date       integer      NOT NULL,
                         date       TIMESTAMP    NOT NULL,  
247                          type       INTEGER      NOT NULL,                          type       INTEGER      NOT NULL,
248                          size       INTEGER      NOT NULL,                          size       INTEGER      NOT NULL,
249                          dvdid      INTEGER      references dvds(id)                              dvdid      INTEGER      references dvds(id)    
250                  );                  );
251          });          });
252    
253          print "creating indexes...\n";          print "creating indexes:";
254    
255          foreach my $index (qw(          foreach my $index (qw(
256                  hosts_name                  hosts_name
# Line 124  if ($opt{c}) { Line 264  if ($opt{c}) {
264                  files_date                  files_date
265                  files_size                  files_size
266          )) {          )) {
267                  my ($table,$col) = split(/_/, $index);                  print " $index";
268                  $dbh->do(qq{ create index $index on $table($col) });                  do_index($index);
269          }          }
270            print "...\n";
271    
272            $dbh->commit;
273    
274  }  }
275    
276  if ($opt{d}) {  if ($opt{d}) {
277          print "deleting ";          print "deleting ";
278          foreach my $table (qw(hosts shares files dvds backups)) {          foreach my $table (qw(files dvds backups shares hosts)) {
279                  print "$table ";                  print "$table ";
280                  $dbh->do(qq{ DELETE FROM $table });                  $dbh->do(qq{ DELETE FROM $table });
281          }          }
282          print " done...\n";          print " done...\n";
 }  
283    
284  if ($opt{v}) {          $dbh->commit;
         print "Debug level at $opt{v}\n";  
         $debug = $opt{v};  
285  }  }
286    
287  #################################INSERT VALUES#############################  #################################INSERT VALUES#############################
# Line 162  $sth->{hosts_by_name} = $dbh->prepare(qq Line 301  $sth->{hosts_by_name} = $dbh->prepare(qq
301  SELECT ID FROM hosts WHERE name=?  SELECT ID FROM hosts WHERE name=?
302  });  });
303    
304  $sth->{backups_broj} = $dbh->prepare(qq{  $sth->{backups_count} = $dbh->prepare(qq{
305  SELECT COUNT(*)  SELECT COUNT(*)
306  FROM backups  FROM backups
307  WHERE hostID=? AND num=?  WHERE hostID=? AND num=? AND shareid=?
308  });  });
309    
310  $sth->{insert_backups} = $dbh->prepare(qq{  $sth->{insert_backups} = $dbh->prepare(qq{
311  INSERT INTO backups (hostID, num, date, type)  INSERT INTO backups (hostID, num, date, type, shareid, size)
312  VALUES (?,?,?,?)  VALUES (?,?,?,?,?,?)
313  });  });
314    
315  $sth->{insert_files} = $dbh->prepare(qq{  $sth->{insert_files} = $dbh->prepare(qq{
316  INSERT INTO files  INSERT INTO files
317          (shareID, backupNum, name, path, fullpath, date, type, size)          (shareID, backupNum, name, path, date, type, size)
318          VALUES (?,?,?,?,?,?,?,?)          VALUES (?,?,?,?,?,?,?)
319  });  });
320    
321  foreach my $host_key (keys %{$hosts}) {  foreach my $host_key (keys %{$hosts}) {
# Line 191  foreach my $host_key (keys %{$hosts}) { Line 330  foreach my $host_key (keys %{$hosts}) {
330                          $hosts->{$host_key}->{'ip'}                          $hosts->{$host_key}->{'ip'}
331                  );                  );
332    
333                  $hostID = $dbh->func('last_insert_rowid');                  $hostID = $dbh->last_insert_id(undef,undef,'hosts',undef);
334          }          }
335    
336          print("host ".$hosts->{$host_key}->{'host'}.": ");          print "host ".$hosts->{$host_key}->{'host'}.": ";
337    
338          # get backups for a host          # get backups for a host
339          my @backups = $bpc->BackupInfoRead($hostname);          my @backups = $bpc->BackupInfoRead($hostname);
340          print scalar @backups, " increments\n";          my $incs = scalar @backups;
341            print  "$incs increments\n";
342    
343          my $inc_nr = 0;          my $inc_nr = 0;
344            $beenThere = {};
345    
346          foreach my $backup (@backups) {          foreach my $backup (@backups) {
347    
# Line 210  foreach my $host_key (keys %{$hosts}) { Line 351  foreach my $host_key (keys %{$hosts}) {
351                  my $backupNum = $backup->{'num'};                  my $backupNum = $backup->{'num'};
352                  my @backupShares = ();                  my @backupShares = ();
353    
354                  print $hosts->{$host_key}->{'host'},                  printf("%-10s %2d/%-2d #%-2d %s %5s/%5s files (date: %s dur: %s)\n",
355                          "\t#$backupNum\t", $backup->{type} || '?', " ",                          $hosts->{$host_key}->{'host'},
356                          $backup->{nFilesNew} || '?', "/", $backup->{nFiles} || '?',                          $inc_nr, $incs, $backupNum,
357                          " files\n";                          $backup->{type} || '?',
358                            $backup->{nFilesNew} || '?', $backup->{nFiles} || '?',
359                  $sth->{backups_broj}->execute($hostID, $backupNum);                          strftime($t_fmt,localtime($backup->{startTime})),
360                  my ($broj) = $sth->{backups_broj}->fetchrow_array();                          fmt_time($backup->{endTime} - $backup->{startTime})
361                  next if ($broj > 0);                  );
362    
363                  my $files = BackupPC::View->new($bpc, $hostname, \@backups, 1);                  my $files = BackupPC::View->new($bpc, $hostname, \@backups, 1);
364                  foreach my $share ($files->shareList($backupNum)) {                  foreach my $share ($files->shareList($backupNum)) {
365    
366                          my $t = time();                          my $t = time();
367    
                         print strftime($t_fmt,localtime())," ", $share;  
368                          $shareID = getShareID($share, $hostID, $hostname);                          $shareID = getShareID($share, $hostID, $hostname);
369                                    
370                          my ($f, $nf, $d, $nd) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);                          $sth->{backups_count}->execute($hostID, $backupNum, $shareID);
371                          printf(" %d/%d files %d/%d dirs [%.2f/s]\n",                          my ($count) = $sth->{backups_count}->fetchrow_array();
372                                  $nf, $f, $nd, $d,                          # skip if allready in database!
373                                  ( ($f+$d) / ((time() - $t) || 1) )                          next if ($count > 0);
374    
375                            # dump some log
376                            print curr_time," ", $share;
377    
378                            my ($f, $nf, $d, $nd, $size) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);
379    
380                            $sth->{insert_backups}->execute(
381                                    $hostID,
382                                    $backupNum,
383                                    $backup->{'endTime'},
384                                    $backup->{'type'},
385                                    $shareID,
386                                    $size,
387                          );                          );
388    
389                            print " commit";
390                          $dbh->commit();                          $dbh->commit();
                 }  
391    
392                  $sth->{insert_backups}->execute(                          my $dur = (time() - $t) || 1;
393                          $hostID,                          printf(" %d/%d files %d/%d dirs %0.2f MB [%.2f/s dur: %s]\n",
394                          $backupNum,                                  $nf, $f, $nd, $d,
395                          $backup->{'endTime'},                                  ($size / 1024 / 1024),
396                          $backup->{'type'}                                  ( ($f+$d) / $dur ),
397                  );                                  fmt_time($dur)
398                  $dbh->commit();                          );
399                    }
400    
401          }          }
402  }  }
# Line 249  undef $sth; Line 404  undef $sth;
404  $dbh->commit();  $dbh->commit();
405  $dbh->disconnect();  $dbh->disconnect();
406    
407    print "total duration: ",fmt_time(time() - $start_t),"\n";
408    
409  $pidfile->remove;  $pidfile->remove;
410    
411  sub getShareID() {  sub getShareID() {
# Line 275  sub getShareID() { Line 432  sub getShareID() {
432          $drop_down =~ s#//+#/#g;          $drop_down =~ s#//+#/#g;
433    
434          $sth->{insert_share}->execute($hostID,$share, $drop_down ,undef);          $sth->{insert_share}->execute($hostID,$share, $drop_down ,undef);
435          return $dbh->func('last_insert_rowid');                  return $dbh->last_insert_id(undef,undef,'shares',undef);
436  }  }
437    
438  sub found_in_db {  sub found_in_db {
439    
440          my ($shareID,undef,$name,$path,undef,$date,undef,$size) = @_;          my @data = @_;
441            shift @data;
442    
443            my ($key, $shareID,undef,$name,$path,$date,undef,$size) = @_;
444    
445            return $beenThere->{$key} if (defined($beenThere->{$key}));
446    
447          $sth->{file_in_db} ||= $dbh->prepare(qq{          $sth->{file_in_db} ||= $dbh->prepare(qq{
448                  SELECT count(*) FROM files                  SELECT 1 FROM files
449                  WHERE shareID = ? and                  WHERE shareID = ? and
450                          path = ? and                          path = ? and
                         name = ? and  
451                          date = ? and                          date = ? and
452                          size = ?                          size = ?
453                    LIMIT 1
454          });          });
455    
456          my @param = ($shareID,$path,$name,$date,$size);          my @param = ($shareID,$path,$date,$size);
457          $sth->{file_in_db}->execute(@param);          $sth->{file_in_db}->execute(@param);
458          my ($rows) = $sth->{file_in_db}->fetchrow_array();          my $rows = $sth->{file_in_db}->rows;
459  #       print STDERR ( $rows ? '+' : '-' ), join(" ",@param), "\n";          print STDERR "## found_in_db($shareID,$path,$date,$size) ",( $rows ? '+' : '-' ), join(" ",@param), "\n" if ($debug >= 3);
460    
461            $beenThere->{$key}++;
462    
463            $sth->{'insert_files'}->execute(@data) unless ($rows);
464          return $rows;          return $rows;
465  }  }
466    
# Line 308  sub recurseDir($$$$$$$$) { Line 474  sub recurseDir($$$$$$$$) {
474    
475          print STDERR "\nrecurse($hostname,$backupNum,$share,$dir,$shareID)\n" if ($debug >= 1);          print STDERR "\nrecurse($hostname,$backupNum,$share,$dir,$shareID)\n" if ($debug >= 1);
476    
477          my ($nr_files, $new_files, $nr_dirs, $new_dirs) = (0,0,0,0);          my ($nr_files, $new_files, $nr_dirs, $new_dirs, $size) = (0,0,0,0,0);
478    
479          { # scope          { # scope
480                  my @stack;                  my @stack;
481    
482                    print STDERR "# dirAttrib($backupNum, $share, $dir)\n" if ($debug >= 2);
483                  my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);                  my $filesInBackup = $files->dirAttrib($backupNum, $share, $dir);
484    
485                  # first, add all the entries in current directory                  # first, add all the entries in current directory
486                  foreach my $path_key (keys %{$filesInBackup}) {                  foreach my $path_key (keys %{$filesInBackup}) {
487                            print STDERR "# file ",Dumper($filesInBackup->{$path_key}),"\n" if ($debug >= 3);
488                          my @data = (                          my @data = (
489                                  $shareID,                                  $shareID,
490                                  $backupNum,                                  $backupNum,
491                                  $path_key,                                  $path_key,
492                                  $filesInBackup->{$path_key}->{'relPath'},                                  $filesInBackup->{$path_key}->{'relPath'},
                                 $filesInBackup->{$path_key}->{'fullPath'},  
         #                       $filesInBackup->{$path_key}->{'sharePathM'},  
493                                  $filesInBackup->{$path_key}->{'mtime'},                                  $filesInBackup->{$path_key}->{'mtime'},
494                                  $filesInBackup->{$path_key}->{'type'},                                  $filesInBackup->{$path_key}->{'type'},
495                                  $filesInBackup->{$path_key}->{'size'}                                  $filesInBackup->{$path_key}->{'size'}
# Line 337  sub recurseDir($$$$$$$$) { Line 503  sub recurseDir($$$$$$$$) {
503                                  $filesInBackup->{$path_key}->{'size'}                                  $filesInBackup->{$path_key}->{'size'}
504                          ));                          ));
505    
506                            my $found;
507                          if (! $beenThere->{$key} && ! found_in_db(@data)) {                          if (! defined($beenThere->{$key}) && ! ($found = found_in_db($key, @data)) ) {
508                                  print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);                                  print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);
509                                  $sth->{'insert_files'}->execute(@data);  
510                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
511                                          $new_dirs++;                                          $new_dirs++ unless ($found);
512                                          print STDERR " dir\n" if ($debug >= 2);                                          print STDERR " dir\n" if ($debug >= 2);
513                                  } else {                                  } else {
514                                          $new_files++;                                          $new_files++ unless ($found);
515                                          print STDERR " file\n" if ($debug >= 2);                                          print STDERR " file\n" if ($debug >= 2);
516                                  }                                  }
517                                    $size += $filesInBackup->{$path_key}->{'size'} || 0;
518                          }                          }
                         $beenThere->{$key}++;  
519    
520                          if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {                          if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {
521                                  $nr_dirs++;                                  $nr_dirs++;
# Line 373  sub recurseDir($$$$$$$$) { Line 539  sub recurseDir($$$$$$$$) {
539                  print STDERR "## STACK ",join(", ", @stack),"\n" if ($debug >= 2);                  print STDERR "## STACK ",join(", ", @stack),"\n" if ($debug >= 2);
540    
541                  while ( my $dir = shift @stack ) {                  while ( my $dir = shift @stack ) {
542                          my ($f,$nf,$d,$nd) = recurseDir($bpc, $hostname, $files, $backupNum, $share, $dir, $shareID);                          my ($f,$nf,$d,$nd, $s) = recurseDir($bpc, $hostname, $files, $backupNum, $share, $dir, $shareID);
543                          print STDERR "# $dir f: $f nf: $nf d: $d nd: $nd\n" if ($debug >= 1);                          print STDERR "# $dir f: $f nf: $nf d: $d nd: $nd\n" if ($debug >= 1);
544                          $nr_files += $f;                          $nr_files += $f;
545                          $new_files += $nf;                          $new_files += $nf;
546                          $nr_dirs += $d;                          $nr_dirs += $d;
547                          $new_dirs += $nd;                          $new_dirs += $nd;
548                            $size += $s;
549                  }                  }
550          }          }
551    
552          return ($nr_files, $new_files, $nr_dirs, $new_dirs);          return ($nr_files, $new_files, $nr_dirs, $new_dirs, $size);
553  }  }
554    

Legend:
Removed from v.44  
changed lines
  Added in v.86

  ViewVC Help
Powered by ViewVC 1.1.26