App-BCVI-InstallManager

 view release on metacpan or  search on metacpan

lib/App/BCVI/InstallManager.pm  view on Meta::CPAN

package App::BCVI::InstallManager;

use warnings;
use strict;

use Digest::MD5;
use Fcntl;
use SDBM_File;

our $VERSION = '1.03';

my($source_signature, %sig_db, $db_file);

sub update_all_installs {
    my($self) = @_;

    if(my $arg = $self->opt('update-all')) {  # usual value '' is false
        if($arg eq 'list') {
            return $self->list_all_installs
        }
        elsif($arg =~ m{^-(.+)$}) {
            return $self->untrack_host($1);
        }
        die "Unrecognised argument ('$arg') to --update-all\n";
    }

    my $sig = $self->install_source_signature();
    my $host_sigs = $self->all_install_signatures();
    my @hosts = grep { $host_sigs->{$_} ne $sig } sort keys %$host_sigs;
    if(@hosts) {
        $self->install_to_hosts(@hosts);
    }
    else {
        print "All known targets are up to date\n";
        exit(0);
    }
}


sub list_all_installs {
    my($self) = @_;

    my $valid = $self->install_source_signature();

    $self->tie_install_sig_db();

    foreach my $key (sort keys %sig_db) {
        my $sig = $sig_db{$key};
        if($sig eq $valid) {
            printf("%-30s  OK\n", $key);
        }
        else {
            printf("%-30s  Needs update\n", $key);
        }
    }

    $self->untie_install_sig_db();
}


sub untrack_host {
    my($self, $host) = @_;

    print "Discarding install info for $host\n";
    $self->tie_install_sig_db();
    delete $sig_db{$host};
    $self->untie_install_sig_db();
}


sub install_to_host {
    my($self, $host) = @_;

    my $sig = $self->install_source_signature();



( run in 1.247 second using v1.01-cache-2.11-cpan-9581c071862 )