Ignore:
Timestamp:
2009-02-01T14:36:22+13:00 (15 years ago)
Author:
davidb
Message:

Modifications for incremental building to support files that need to be deleted

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/perllib/arcinfo.pm

    r15889 r18441  
    4242use strict;
    4343
     44use dbutil;
    4445
    4546# File format read in: OID <tab> Filename <tab> Optional-Index-Status
     
    6061}
    6162
    62 sub load_info {
    63     my $self = shift (@_);
    64     my ($filename) = @_;
    65 
    66     $self->{'info'} = {};
    67  
     63sub _load_info_txt
     64{
     65    my $self = shift (@_);
     66    my ($filename) = @_;
     67
    6868    if (defined $filename && -e $filename) {
    6969    open (INFILE, $filename) ||
     
    8080    close (INFILE);
    8181    }
    82 }
    83 
    84 sub save_info {
     82
     83
     84}
     85
     86sub _load_info_gdbm
     87{
     88    my $self = shift (@_);
     89    my ($filename) = @_;
     90
     91    my $infodb_map = {};
     92
     93    &dbutil::read_infodb_file_gdbm($filename,$infodb_map);
     94
     95    foreach my $oid ( keys %$infodb_map ) {
     96    my $vals = $infodb_map->{$oid};
     97    # interested in doc-file and index-status
     98
     99    my ($doc_file) = ($vals=~/^<doc-file>(.*)$/m);
     100    my ($index_status) = ($vals=~/^<index-status>(.*)$/m);
     101    $self->add_info ($oid,$doc_file,$index_status);
     102    }
     103}
     104
     105sub load_info {
     106    my $self = shift (@_);
     107    my ($filename) = @_;
     108
     109    $self->{'info'} = {};
     110
     111    if ((defined $filename) && (-e $filename)) {
     112    if ($filename =~ m/\.inf$/) {
     113        $self->_load_info_txt($filename);
     114    }
     115    else {
     116        $self->_load_info_gdbm($filename);
     117    }
     118    }
     119}
     120
     121sub _load_filelist_gdbm
     122{
     123    my $self = shift (@_);
     124    my ($filename) = @_;
     125
     126    my $infodb_map = {};
     127
     128    &dbutil::read_infodb_keys_gdbm($filename,$infodb_map);
     129
     130    foreach my $file ( keys %$infodb_map ) {
     131    $self->{'import_filelist'}->{$file} = 1;
     132    }
     133}
     134
     135
     136sub load_import_filelist {
     137    my $self = shift (@_);
     138    my ($filename) = @_;
     139
     140    $self->{'import-filelist'} = {};
     141
     142    if ((defined $filename) && (-e $filename)) {
     143    if ($filename =~ m/\.inf$/) {
     144        # e.g. 'archives-src.inf' (which includes complete list of file
     145        # from last time import.pl was run)
     146        $self->_load_info_txt($filename);
     147    }
     148    else {
     149        $self->_load_filelist_gdbm($filename);
     150    }
     151    }
     152}
     153
     154sub _save_info_txt {
    85155    my $self = shift (@_);
    86156    my ($filename) = @_;
     
    97167    }
    98168    close (OUTFILE);
     169}
     170
     171sub _save_info_gdbm {
     172    my $self = shift (@_);
     173    my ($filename) = @_;
     174
     175    # Not the most efficient operation, but will do for now
     176
     177    # read it in
     178    my $infodb_map = {};
     179    &dbutil::read_infodb_file_gdbm($filename,$infodb_map);
     180
     181    # change index-status values
     182    foreach my $info (@{$self->get_OID_list()}) {
     183    if (defined $info) {
     184        my ($oid,$doc_file,$index_status) = @$info;
     185        if (defined $infodb_map->{$oid}) {
     186        my $vals_ref = \$infodb_map->{$oid};
     187        $$vals_ref =~ s/^<index-status>(.*)$/<index-status>$index_status/m;
     188        }
     189        else {
     190        print STDERR "Warning: $filename does not have key $oid\n";
     191        }
     192    }
     193    }
     194
     195
     196    # write out again
     197    my $infodb_handle = &dbutil::open_infodb_write_handle_gdbm($filename);
     198    foreach my $oid ( keys %$infodb_map ) {
     199    # consider making the following a method in dbutil
     200    # e.g. write_infodb_rawentry_gdbm($infodb_handle,$oid,$vals);
     201
     202    # no need to escape, as $infodb_map->{$oid} hasn't been unescaped
     203    print $infodb_handle "[$oid]\n";
     204    print $infodb_handle $infodb_map->{$oid};
     205    print $infodb_handle '-' x 70, "\n";
     206    }
     207    &dbutil::close_infodb_write_handle_gdbm($infodb_handle);
     208
     209}
     210
     211sub save_info {
     212    my $self = shift (@_);
     213    my ($filename) = @_;
     214
     215    if ($filename =~ m/\.inf$/) {
     216    $self->_save_info_txt($filename);
     217    }
     218    else {
     219    $self->_save_info_gdbm($filename);
     220    }
    99221}
    100222
Note: See TracChangeset for help on using the changeset viewer.