App-Glacier

 view release on metacpan or  search on metacpan

lib/App/Glacier/Directory.pm  view on Meta::CPAN

sub add_version {
    my ($self, $file_name, $val) = @_;
    my $rec = $self->retrieve($file_name);
    my $i;
    if ($rec) {
	my $t = $val->{CreationDate}->epoch;
	for ($i = 0; $i <= $#{$rec}; $i++) {
	    last if $t >= $rec->[$i]{CreationDate}->epoch;
	}
	splice(@{$rec}, $i, 0, $val);
    } else {
	$i = 0;
	$rec = [ $val ];
    }
    $self->SUPER::store($file_name, $rec);
    return $i + 1;
}

sub delete_version {
    my ($self, $file_name, $ver) = @_;
    $ver--;
    my $rec = $self->retrieve($file_name);
    if ($rec && $ver <= $#{$rec}) {
	splice(@{$rec}, $ver, 1);
	if (@{$rec}) {
	    $self->SUPER::store($file_name, $rec);
	} else {
	    $self->delete($file_name);
	}
    } else {
	++$ver;
	croak "can't remove $file_name;$ver: no such version";
    }
}

sub tempname {
    my ($self, $namelen) = @_;
    $namelen = 10 unless defined $namelen; 
    my @alphabet =
	split //,
	      '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    my @name;

    for (my $i = 0; $i < $namelen; $i++) {
	push @name, rand($#alphabet);
    }
    my @orig = @name;
    my $s;
    while ($self->has($s = 'TMP_'.join('', map { $alphabet[$_] } @name))) {
	for (my $i = 0; ; $i++) {
	    die "all permutations exhausted" if ($i > $namelen);
	    $name[$i] = ($name[$i] + 1) % @alphabet;
	    last if $name[$i] != $orig[$i];
	}
    }
    return $s;
}

use constant {
    DIR_UPTODATE => 0,  # Directory is up to date
    DIR_PENDING  => 1,  # Directory is empty, needs synchronization
    DIR_OUTDATED => 2   # Directory needs update
};

sub status {
    my ($self) = @_;
    
    if (defined($self->last_sync_time)) {
	my $dsc = timestamp_deserialize($self->glacier->Describe_vault($self->vault));
	unless ($dsc
		&& $dsc->{LastInventoryDate}->epoch < $self->last_sync_time) {
	    return DIR_OUTDATED;
	}
    } else {
	return DIR_PENDING;
    }
    return DIR_UPTODATE;
}

1;



( run in 1.023 second using v1.01-cache-2.11-cpan-5735350b133 )