Ignore:
Timestamp:
12/27/12 18:26:31 (11 years ago)
Author:
nanardon
Message:

store module freshness state in inifile

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/SyncManager.pm

    r1198 r1200  
    55use LATMOS::Accounts::Log; 
    66use LATMOS::Accounts; 
     7use Config::IniFiles; 
    78 
    89=head1 NAME 
     
    6667=cut 
    6768 
    68 sub dbrev { $_[0]->{lastrev} } 
    69  
    70 =head2 updrev 
    71  
    72 Update status file with with current base revision as restart point 
    73  
    74 =cut 
    75  
    76 sub updrev { 
     69sub dbrev { 
    7770    my ($self) = @_; 
    7871    my $LA = LATMOS::Accounts->new($self->{config}, noacl => 1); 
    7972    my $base = $LA->base; 
    80     my $newrev = $base->current_rev; 
    81     $self->{lastrev} = $newrev; 
    82     return $newrev; 
     73    return $base->current_rev; 
     74} 
     75 
     76sub _load_state_ini { 
     77    my ($self) = @_; 
     78    my $la = LATMOS::Accounts->new($self->{config}, noacl => 1); 
     79 
     80    my $state_file =  $la->val('_default_', 'state_dir', '/'); 
     81    $state_file .= '/la-sync-manager.ini'; 
     82    la_log(LA_DEBUG, "Status file is %s", $state_file); 
     83    if ($state_file && ! -w $state_file) { 
     84        # don't exists, we have to create it 
     85        open(my $handle, '>', $state_file) or do { 
     86            la_log(LA_ERR, "Cannot open build net status file %s", 
     87                $state_file); 
     88            return; 
     89        }; 
     90        print $handle "[_default_]\n"; 
     91        close($handle); 
     92    } 
     93    return Config::IniFiles->new( 
     94        -file => $state_file 
     95    ); 
     96} 
     97 
     98=head2 get_last_rev($module) 
     99 
     100Return the last revision the module succeed 
     101 
     102=cut 
     103 
     104sub get_last_rev { 
     105    my ($self, $module) = @_; 
     106 
     107    my $ini = $self->_load_state_ini or return; 
     108 
     109    return ($ini->val($module, 'rev', 0), $ini->val($module, 'time', 0)); 
    83110} 
    84111 
     
    94121} 
    95122 
    96 =head2 process_module($module, $dbrev) 
     123=head2 process_module($module) 
    97124 
    98125Process C<$module>. 
     
    103130 
    104131sub process_module { 
    105     my ($self, $module, $dbrev) = @_; 
     132    my ($self, $module) = @_; 
    106133 
    107134    eval { 
     
    115142            $modtype, 
    116143            config => $self->{config}, 
     144            name   => $module, 
     145            syncm  => $self, 
    117146        ) 
    118147            or do { 
     
    126155        } 
    127156 
    128         if (!$task->needupd($dbrev, $self)) { 
     157        my ($lastrev) = $self->get_last_rev($module); 
     158        my $currentrev = $self->dbrev; 
     159        if (!$task->needupd($lastrev, $currentrev, $self)) { 
    129160            la_log LA_DEBUG, "No change on main base, aborting"; 
    130161            return 1; 
    131162        } 
    132  
    133163 
    134164        my $res = $task->run; 
     
    137167        } 
    138168        $task->post if ($res); 
     169        my $ini = $self->_load_state_ini or return; 
     170 
     171        $ini->newval($module, 'rev', $currentrev); 
     172        my $time = time; 
     173        $ini->newval($module, 'time', $time); 
     174        $ini->SetParameterComment( 
     175            $module, 'time', 
     176            scalar(localtime(time)), 
     177        ); 
     178        $ini->RewriteConfig; 
     179 
    139180        la_log LA_DEBUG, "end process $module"; 
    140181        return $res; 
Note: See TracChangeset for help on using the changeset viewer.