/[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 70 by dpavlin, Wed Aug 24 17:12:22 2005 UTC revision 306 by dpavlin, Sat Jan 28 20:42:42 2006 UTC
# Line 11  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    use BackupPC::SearchLib;
15    use Cwd qw/abs_path/;
16    
17  use constant BPC_FTYPE_DIR => 5;  use constant BPC_FTYPE_DIR => 5;
18    use constant EST_CHUNK => 100000;
19    
20    # daylight saving time change offset for 1h
21    my $dst_offset = 60 * 60;
22    
23  my $debug = 0;  my $debug = 0;
24  $|=1;  $|=1;
25    
26  my $start_t = time();  my $start_t = time();
27    
28  my $pidfile = new File::Pid;  my $pid_path = abs_path($0);
29    $pid_path =~ s/\W+/_/g;
30    
31    my $pidfile = new File::Pid({
32            file => "/tmp/$pid_path",
33    });
34    
35  if (my $pid = $pidfile->running ) {  if (my $pid = $pidfile->running ) {
36          die "$0 already running: $pid\n";          die "$0 already running: $pid\n";
# Line 27  if (my $pid = $pidfile->running ) { Line 38  if (my $pid = $pidfile->running ) {
38          $pidfile->remove;          $pidfile->remove;
39          $pidfile = new File::Pid;          $pidfile = new File::Pid;
40  }  }
 $pidfile->write;  
41  print STDERR "$0 using pid ",$pidfile->pid," file ",$pidfile->file,"\n";  print STDERR "$0 using pid ",$pidfile->pid," file ",$pidfile->file,"\n";
42    $pidfile->write;
43    
44  my $t_fmt = '%Y-%m-%d %H:%M:%S';  my $t_fmt = '%Y-%m-%d %H:%M:%S';
45    
# Line 41  my $beenThere = {}; Line 52  my $beenThere = {};
52  my $dsn = $Conf{SearchDSN} || die "Need SearchDSN in config.pl\n";  my $dsn = $Conf{SearchDSN} || die "Need SearchDSN in config.pl\n";
53  my $user = $Conf{SearchUser} || '';  my $user = $Conf{SearchUser} || '';
54    
55    my $index_node_url = $Conf{HyperEstraierIndex};
56    
57  my $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 0 });  my $dbh = DBI->connect($dsn, $user, "", { RaiseError => 1, AutoCommit => 0 });
58    
59  my %opt;  my %opt;
60    
61  if ( !getopts("cdm:v:", \%opt ) ) {  if ( !getopts("cdm:v:ijf", \%opt ) ) {
62          print STDERR <<EOF;          print STDERR <<EOF;
63  usage: $0 [-c|-d] [-m num] [-v|-v level]  usage: $0 [-c|-d] [-m num] [-v|-v level] [-i|-j|-f]
64    
65  Options:  Options:
66          -c      create database on first use          -c      create database on first use
67          -d      delete database before import          -d      delete database before import
68          -m num  import just num increments for one host          -m num  import just num increments for one host
69          -v num  set verbosity (debug) level (default $debug)          -v num  set verbosity (debug) level (default $debug)
70            -i      update Hyper Estraier full text index
71            -j      update full text, don't check existing files
72            -f      don't do anything with full text index
73    
74    Option -j is variation on -i. It will allow faster initial creation
75    of full-text index from existing database.
76    
77    Option -f will create database which is out of sync with full text index. You
78    will have to re-run $0 with -i to fix it.
79    
80  EOF  EOF
81          exit 1;          exit 1;
82  }  }
83    
84  ###################################create tables############################3  if ($opt{v}) {
85            print "Debug level at $opt{v}\n";
86            $debug = $opt{v};
87    } elsif ($opt{f}) {
88            print "WARNING: disabling full-text index update. You need to re-run $0 -j !\n";
89            $index_node_url = undef;
90    }
91    
92    #---- subs ----
93    
94    sub fmt_time {
95            my $t = shift || return;
96            my $out = "";
97            my ($ss,$mm,$hh) = gmtime($t);
98            $out .= "${hh}h" if ($hh);
99            $out .= sprintf("%02d:%02d", $mm,$ss);
100            return $out;
101    }
102    
103    sub curr_time {
104            return strftime($t_fmt,localtime());
105    }
106    
107    my $hest_node;
108    
109    sub hest_update {
110    
111            my ($host_id, $share_id, $num) = @_;
112    
113            my $skip_check = $opt{j} && print STDERR "Skipping check for existing files -- this should be used only with initital import\n";
114    
115            unless (defined($index_node_url)) {
116                    print STDERR "HyperEstraier support not enabled in configuration\n";
117                    $index_node_url = 0;
118                    return;
119            }
120    
121            print curr_time," updating Hyper Estraier:";
122    
123            my $t = time();
124    
125            my $offset = 0;
126            my $added = 0;
127    
128            print " opening index $index_node_url";
129            if ($index_node_url) {
130                    $hest_node ||= Search::Estraier::Node->new(
131                            url => $index_node_url,
132                            user => 'admin',
133                            passwd => 'admin',
134                            croak_on_error => 1,
135                    );
136                    print " via node URL";
137            } else {
138                    die "don't know how to use Hyper Estraier Index $index_node_url";
139            }
140    
141            my $results = 0;
142    
143            do {
144    
145                    my $where = '';
146                    my @data;
147                    if (defined($host_id) && defined($share_id) && defined($num)) {
148                            $where = qq{
149                            WHERE
150                                    hosts.id = ? AND
151                                    shares.id = ? AND
152                                    files.backupnum = ?
153                            };
154                            @data = ( $host_id, $share_id, $num );
155                    }
156    
157                    my $limit = sprintf('LIMIT '.EST_CHUNK.' OFFSET %d', $offset);
158    
159                    my $sth = $dbh->prepare(qq{
160                            SELECT
161                                    files.id                        AS fid,
162                                    hosts.name                      AS hname,
163                                    shares.name                     AS sname,
164                                    -- shares.share                 AS sharename,
165                                    files.backupnum                 AS backupnum,
166                                    -- files.name                   AS filename,
167                                    files.path                      AS filepath,
168                                    files.date                      AS date,
169                                    files.type                      AS type,
170                                    files.size                      AS size,
171                                    files.shareid                   AS shareid,
172                                    backups.date                    AS backup_date
173                            FROM files
174                                    INNER JOIN shares       ON files.shareID=shares.ID
175                                    INNER JOIN hosts        ON hosts.ID = shares.hostID
176                                    INNER JOIN backups      ON backups.num = files.backupNum and backups.hostID = hosts.ID AND backups.shareID = shares.ID
177                            $where
178                            $limit
179                    });
180    
181                    $sth->execute(@data);
182                    $results = $sth->rows;
183    
184                    if ($results == 0) {
185                            print " - no new files\n";
186                            return;
187                    } else {
188                            print " - $results files: ";
189                    }
190    
191                    sub fmt_date {
192                            my $t = shift || return;
193                            my $iso = BackupPC::Lib::timeStamp($t);
194                            $iso =~ s/\s/T/;
195                            return $iso;
196                    }
197    
198                    while (my $row = $sth->fetchrow_hashref()) {
199    
200                            my $fid = $row->{'fid'} || die "no fid?";
201                            my $uri = 'file:///' . $fid;
202    
203                            unless ($skip_check) {
204                                    my $id = $hest_node->uri_to_id($uri);
205                                    next if ($id && $id == -1);
206                            }
207    
208                            # create a document object
209                            my $doc = Search::Estraier::Document->new;
210    
211                            # add attributes to the document object
212                            $doc->add_attr('@uri', $uri);
213    
214                            foreach my $c (@{ $sth->{NAME} }) {
215                                    print STDERR "attr $c = $row->{$c}\n" if ($debug > 2);
216                                    $doc->add_attr($c, $row->{$c}) if (defined($row->{$c}));
217                            }
218    
219                            #$doc->add_attr('@cdate', fmt_date($row->{'date'}));
220    
221                            # add the body text to the document object
222                            my $path = $row->{'filepath'};
223                            $doc->add_text($path);
224                            $path =~ s/(.)/$1 /g;
225                            $doc->add_hidden_text($path);
226    
227                            print STDERR $doc->dump_draft,"\n" if ($debug > 1);
228    
229                            # register the document object to the database
230                            if ($hest_node) {
231                                    $hest_node->put_doc($doc);
232                            } else {
233                                    die "not supported";
234                            }
235                            $added++;
236                    }
237    
238                    print " $added";
239    
240                    $offset += EST_CHUNK;
241    
242            } while ($results == EST_CHUNK);
243    
244            my $dur = (time() - $t) || 1;
245            printf(" [%.2f/s dur: %s]\n",
246                    ( $added / $dur ),
247                    fmt_time($dur)
248            );
249    }
250    
251    #---- /subs ----
252    
253    
254    ## update index ##
255    if ( ( $opt{i} || $opt{j} ) && !$opt{c} ) {
256            # update all
257            print "force update of Hyper Estraier index ";
258            print "by -i flag" if ($opt{i});
259            print "by -j flag" if ($opt{j});
260            print "\n";
261            hest_update();
262    }
263    
264    ## create tables ##
265  if ($opt{c}) {  if ($opt{c}) {
266          sub do_index {          sub do_index {
267                  my $index = shift || return;                  my $index = shift || return;
268                  my ($table,$col,$unique) = split(/_/, $index);                  my ($table,$col,$unique) = split(/:/, $index);
269                  $unique ||= '';                  $unique ||= '';
270                  $index =~ s/,/_/g;                  $index =~ s/\W+/_/g;
271                    print "$index on $table($col)" . ( $unique ? "u" : "" ) . " ";
272                  $dbh->do(qq{ create $unique index $index on $table($col) });                  $dbh->do(qq{ create $unique index $index on $table($col) });
273          }          }
274    
275          print "creating tables...\n";          print "creating tables...\n";
276          
277          $dbh->do(qq{          $dbh->do( qq{
278                  create table hosts (                  create table hosts (
279                          ID      SERIAL          PRIMARY KEY,                          ID      SERIAL          PRIMARY KEY,
280                          name    VARCHAR(30)     NOT NULL,                          name    VARCHAR(30)     NOT NULL,
281                          IP      VARCHAR(15)                          IP      VARCHAR(15)
282                  );                              );            
283          });  
                 
         $dbh->do(qq{  
284                  create table shares (                  create table shares (
285                          ID      SERIAL          PRIMARY KEY,                          ID      SERIAL          PRIMARY KEY,
286                          hostID  INTEGER         NOT NULL references hosts(id),                          hostID  INTEGER         NOT NULL references hosts(id),
287                          name    VARCHAR(30)     NOT NULL,                          name    VARCHAR(30)     NOT NULL,
288                          share   VARCHAR(200)    NOT NULL,                          share   VARCHAR(200)    NOT NULL
                         localpath VARCHAR(200)        
289                  );                              );            
290          });  
291                            create table dvds (
292          $dbh->do(qq{                          ID      SERIAL          PRIMARY KEY,
293                            num     INTEGER         NOT NULL,
294                            name    VARCHAR(255)    NOT NULL,
295                            mjesto  VARCHAR(255)
296                    );
297    
298                  create table backups (                  create table backups (
299                            id      serial,
300                          hostID  INTEGER         NOT NULL references hosts(id),                          hostID  INTEGER         NOT NULL references hosts(id),
301                          num     INTEGER         NOT NULL,                          num     INTEGER         NOT NULL,
302                          date    integer         NOT NULL,                          date    integer         NOT NULL,
303                          type    CHAR(4)         not null,                          type    CHAR(4)         not null,
304                          shareID integer         not null references shares(id),                          shareID integer         not null references shares(id),
305                          size    integer         not null,                          size    bigint          not null,
306                          PRIMARY KEY(hostID, num, shareID)                          inc_size bigint         not null default -1,
307                            inc_deleted boolean     default false,
308                            parts   integer         not null default 1,
309                            PRIMARY KEY(id)
310                  );                              );            
         });  
311    
312          #do_index('backups_hostid,num_unique');                  create table files (
313                            ID              SERIAL,
314                            shareID         INTEGER NOT NULL references shares(id),
315                            backupNum       INTEGER NOT NULL,
316                            name            VARCHAR(255) NOT NULL,
317                            path            VARCHAR(255) NOT NULL,
318                            date            integer NOT NULL,
319                            type            INTEGER NOT NULL,
320                            size            bigint  NOT NULL,
321                            primary key(id)
322                    );
323    
324          $dbh->do(qq{                  create table archive (
325                  create table dvds (                          id              serial,
326                          ID      SERIAL          PRIMARY KEY,                          dvd_nr          int not null,
327                          num     INTEGER         NOT NULL,                          total_size      bigint default -1,
328                          name    VARCHAR(255)    NOT NULL,                          note            text,
329                          mjesto  VARCHAR(255)                          username        varchar(20) not null,
330                            date            timestamp default now(),
331                            primary key(id)
332                    );      
333    
334                    create table archive_backup (
335                            archive_id      int not null references archive(id) on delete cascade,
336                            backup_id       int not null references backups(id),
337                            primary key(archive_id, backup_id)
338                  );                  );
         });  
339    
340          $dbh->do(qq{                      create table archive_burned (
341                  create table files (                          archive_id      int references archive(id),
342                          ID      SERIAL          PRIMARY KEY,                            date            timestamp default now(),
343                          shareID INTEGER         NOT NULL references shares(id),                          part            int not null default 1,
344                          backupNum  INTEGER      NOT NULL,                          copy            int not null default 1,
345                          name       VARCHAR(255) NOT NULL,                          iso_size bigint default -1
346                          path       VARCHAR(255) NOT NULL,                  );
347                          date       integer      NOT NULL,  
348                          type       INTEGER      NOT NULL,                  create table backup_parts (
349                          size       INTEGER      NOT NULL,                          id serial,
350                          dvdid      INTEGER      references dvds(id)                              backup_id int references backups(id),
351                            part_nr int not null check (part_nr > 0),
352                            tar_size bigint not null check (tar_size > 0),
353                            size bigint not null check (size > 0),
354                            md5 text not null,
355                            items int not null check (items > 0),
356                            date timestamp default now(),
357                            primary key(id)
358                  );                  );
359          });          });
360    
361          print "creating indexes:";          print "creating indexes: ";
362    
363          foreach my $index (qw(          foreach my $index (qw(
364                  hosts_name                  hosts:name
365                  backups_hostID                  backups:hostID
366                  backups_num                  backups:num
367                  shares_hostID                  backups:shareID
368                  shares_name                  shares:hostID
369                  files_shareID                  shares:name
370                  files_path                  files:shareID
371                  files_name                  files:path
372                  files_date                  files:name
373                  files_size                  files:date
374                    files:size
375                    archive:dvd_nr
376                    archive_burned:archive_id
377                    backup_parts:backup_id,part_nr
378          )) {          )) {
                 print " $index";  
379                  do_index($index);                  do_index($index);
380          }          }
381    
382            print " creating sequence: ";
383            foreach my $seq (qw/dvd_nr/) {
384                    print "$seq ";
385                    $dbh->do( qq{ CREATE SEQUENCE $seq } );
386            }
387    
388    
389          print "...\n";          print "...\n";
390    
391          $dbh->commit;          $dbh->commit;
392    
393  }  }
394    
395    ## delete data before inseting ##
396  if ($opt{d}) {  if ($opt{d}) {
397          print "deleting ";          print "deleting ";
398          foreach my $table (qw(files dvds backups shares hosts)) {          foreach my $table (qw(files dvds backups shares hosts)) {
# Line 160  if ($opt{d}) { Line 404  if ($opt{d}) {
404          $dbh->commit;          $dbh->commit;
405  }  }
406    
407  if ($opt{v}) {  ## insert new values ##
         print "Debug level at $opt{v}\n";  
         $debug = $opt{v};  
 }  
   
 #################################INSERT VALUES#############################  
408    
409  # get hosts  # get hosts
410  $hosts = $bpc->HostInfoRead();  $hosts = $bpc->HostInfoRead();
# Line 190  WHERE hostID=? AND num=? AND shareid=? Line 429  WHERE hostID=? AND num=? AND shareid=?
429    
430  $sth->{insert_backups} = $dbh->prepare(qq{  $sth->{insert_backups} = $dbh->prepare(qq{
431  INSERT INTO backups (hostID, num, date, type, shareid, size)  INSERT INTO backups (hostID, num, date, type, shareid, size)
432  VALUES (?,?,?,?,?,?)  VALUES (?,?,?,?,?,-1)
433    });
434    
435    $sth->{update_backups_size} = $dbh->prepare(qq{
436    UPDATE backups SET size = ?
437    WHERE hostID = ? and num = ? and date = ? and type =? and shareid = ?
438  });  });
439    
440  $sth->{insert_files} = $dbh->prepare(qq{  $sth->{insert_files} = $dbh->prepare(qq{
# Line 199  INSERT INTO files Line 443  INSERT INTO files
443          VALUES (?,?,?,?,?,?,?)          VALUES (?,?,?,?,?,?,?)
444  });  });
445    
446  sub fmt_time {  my @hosts = keys %{$hosts};
447          my $t = shift || return;  my $host_nr = 0;
         my $out = "";  
         my ($ss,$mm,$hh) = gmtime($t);  
         $out .= "${hh}h" if ($hh);  
         $out .= sprintf("%02d:%02d", $mm,$ss);  
         return $out;  
 }  
448    
449  foreach my $host_key (keys %{$hosts}) {  foreach my $host_key (@hosts) {
450    
451          my $hostname = $hosts->{$host_key}->{'host'} || die "can't find host for $host_key";          my $hostname = $hosts->{$host_key}->{'host'} || die "can't find host for $host_key";
452    
# Line 223  foreach my $host_key (keys %{$hosts}) { Line 461  foreach my $host_key (keys %{$hosts}) {
461                  $hostID = $dbh->last_insert_id(undef,undef,'hosts',undef);                  $hostID = $dbh->last_insert_id(undef,undef,'hosts',undef);
462          }          }
463    
464          print "host ".$hosts->{$host_key}->{'host'}.": ";          $host_nr++;
465            print "host ", $hosts->{$host_key}->{'host'}, " [",
466                    $host_nr, "/", ($#hosts + 1), "]: ";
467    
468          # get backups for a host          # get backups for a host
469          my @backups = $bpc->BackupInfoRead($hostname);          my @backups = $bpc->BackupInfoRead($hostname);
# Line 263  foreach my $host_key (keys %{$hosts}) { Line 503  foreach my $host_key (keys %{$hosts}) {
503                          next if ($count > 0);                          next if ($count > 0);
504    
505                          # dump some log                          # dump some log
506                          print strftime($t_fmt,localtime())," ", $share;                          print curr_time," ", $share;
   
                         my ($f, $nf, $d, $nd, $size) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);  
507    
508                          $sth->{insert_backups}->execute(                          $sth->{insert_backups}->execute(
509                                  $hostID,                                  $hostID,
510                                  $backupNum,                                  $backupNum,
511                                  $backup->{'endTime'},                                  $backup->{'endTime'},
512                                  $backup->{'type'},                                  substr($backup->{'type'},0,4),
513                                  $shareID,                                  $shareID,
                                 $size,  
514                          );                          );
515    
516                          print " commit";                          my ($f, $nf, $d, $nd, $size) = recurseDir($bpc, $hostname, $files, $backupNum, $share, "", $shareID);
517                          $dbh->commit();  
518                            eval {
519                                    $sth->{update_backups_size}->execute(
520                                            $size,
521                                            $hostID,
522                                            $backupNum,
523                                            $backup->{'endTime'},
524                                            substr($backup->{'type'},0,4),
525                                            $shareID,
526                                    );
527                                    print " commit";
528                                    $dbh->commit();
529                            };
530                            if ($@) {
531                                    print " rollback";
532                                    $dbh->rollback();
533                            }
534    
535                          my $dur = (time() - $t) || 1;                          my $dur = (time() - $t) || 1;
536                          printf(" %d/%d files %d/%d dirs %0.2f MB [%.2f/s dur: %s]\n",                          printf(" %d/%d files %d/%d dirs %0.2f MB [%.2f/s dur: %s]\n",
# Line 286  foreach my $host_key (keys %{$hosts}) { Line 539  foreach my $host_key (keys %{$hosts}) {
539                                  ( ($f+$d) / $dur ),                                  ( ($f+$d) / $dur ),
540                                  fmt_time($dur)                                  fmt_time($dur)
541                          );                          );
542    
543                            hest_update($hostID, $shareID, $backupNum) if ($nf + $nd > 0);
544                  }                  }
545    
546          }          }
# Line 314  sub getShareID() { Line 569  sub getShareID() {
569    
570          $sth->{insert_share} ||= $dbh->prepare(qq{          $sth->{insert_share} ||= $dbh->prepare(qq{
571                  INSERT INTO shares                  INSERT INTO shares
572                          (hostID,name,share,localpath)                          (hostID,name,share)
573                  VALUES (?,?,?,?)                  VALUES (?,?,?)
574          });          });
575    
576          my $drop_down = $hostname . '/' . $share;          my $drop_down = $hostname . '/' . $share;
577          $drop_down =~ s#//+#/#g;          $drop_down =~ s#//+#/#g;
578    
579          $sth->{insert_share}->execute($hostID,$share, $drop_down ,undef);          $sth->{insert_share}->execute($hostID,$share, $drop_down);
580          return $dbh->last_insert_id(undef,undef,'shares',undef);          return $dbh->last_insert_id(undef,undef,'shares',undef);
581  }  }
582    
# Line 330  sub found_in_db { Line 585  sub found_in_db {
585          my @data = @_;          my @data = @_;
586          shift @data;          shift @data;
587    
588          my ($key, $shareID,undef,$name,$path,undef,$date,undef,$size) = @_;          my ($key, $shareID,undef,$name,$path,$date,undef,$size) = @_;
589    
590          return $beenThere->{$key} if (defined($beenThere->{$key}));          return $beenThere->{$key} if (defined($beenThere->{$key}));
591    
# Line 338  sub found_in_db { Line 593  sub found_in_db {
593                  SELECT 1 FROM files                  SELECT 1 FROM files
594                  WHERE shareID = ? and                  WHERE shareID = ? and
595                          path = ? and                          path = ? and
596                          date = ? and                          size = ? and
597                          size = ?                          ( date = ? or date = ? or date = ? )
598                    LIMIT 1
599          });          });
600    
601          my @param = ($shareID,$path,$date,$size);          my @param = ($shareID,$path,$size,$date, $date-$dst_offset, $date+$dst_offset);
602          $sth->{file_in_db}->execute(@param);          $sth->{file_in_db}->execute(@param);
603          my $rows = $sth->{file_in_db}->rows;          my $rows = $sth->{file_in_db}->rows;
604          print STDERR "## found_in_db ",( $rows ? '+' : '-' ), join(" ",@param), "\n" if ($debug >= 3);          print STDERR "## found_in_db($shareID,$path,$date,$size) ",( $rows ? '+' : '-' ), join(" ",@param), "\n" if ($debug >= 3);
605    
606          $beenThere->{$key}++;          $beenThere->{$key}++;
607    
# Line 392  sub recurseDir($$$$$$$$) { Line 648  sub recurseDir($$$$$$$$) {
648                                  $filesInBackup->{$path_key}->{'size'}                                  $filesInBackup->{$path_key}->{'size'}
649                          ));                          ));
650    
651                            my $key_dst_prev = join(" ", (
652                                    $shareID,
653                                    $dir,
654                                    $path_key,
655                                    $filesInBackup->{$path_key}->{'mtime'} - $dst_offset,
656                                    $filesInBackup->{$path_key}->{'size'}
657                            ));
658    
659                            my $key_dst_next = join(" ", (
660                                    $shareID,
661                                    $dir,
662                                    $path_key,
663                                    $filesInBackup->{$path_key}->{'mtime'} + $dst_offset,
664                                    $filesInBackup->{$path_key}->{'size'}
665                            ));
666    
667                          my $found;                          my $found;
668                          if (! defined($beenThere->{$key}) && ! ($found = found_in_db($key, @data)) ) {                          if (
669                                    ! defined($beenThere->{$key}) &&
670                                    ! defined($beenThere->{$key_dst_prev}) &&
671                                    ! defined($beenThere->{$key_dst_next}) &&
672                                    ! ($found = found_in_db($key, @data))
673                            ) {
674                                  print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);                                  print STDERR "# key: $key [", $beenThere->{$key},"]" if ($debug >= 2);
675    
676                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {                                  if ($filesInBackup->{$path_key}->{'type'} == BPC_FTYPE_DIR) {

Legend:
Removed from v.70  
changed lines
  Added in v.306

  ViewVC Help
Powered by ViewVC 1.1.26