--- /dev/null
+package CloudStore::MD5sum;
+use warnings;
+use strict;
+
+use TokyoCabinet;
+use Carp qw(confess);
+
+sub new {
+ my ($class) = @_;
+ my $self = {};
+ bless $self, $class;
+ return $self;
+}
+
+sub md5sum {
+ my ( $self, $data ) = @_;
+
+ my $login = $data;
+ $login = $data->{login} if ref $data eq 'HASH' && exists $data->{login};
+
+ return $self->{md5sum}->{$login} if exists $self->{md5sum}->{$login};
+
+ my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) =
+ getpwnam $login;
+
+ my $md5_path = "$dir/.md5";
+
+ my $db = TokyoCabinet::HDB->new();
+ $db->open($md5_path, $db->OWRITER | $db->OCREAT)
+ or die "can't open $md5_path: ",$db->errmsg( $db->ecode );
+
+ warn "open $md5_path";
+
+ $self->{md5sum}->{$login} = $db;
+ return $db;
+}
+
+sub md5sum_dump {
+ my ( $self, $login ) = @_;
+
+ my @lines;
+
+ my $hdb = $self->md5sum( $login );
+ $hdb->iterinit();
+ while(defined(my $key = $hdb->iternext())){
+ my $value = $hdb->get($key);
+ if(defined($value)){
+ push @lines, "$key $value";
+ }
+ }
+ return @lines;
+}
+
+
+sub md5sum_close {
+ my ( $self, $login ) = @_;
+
+ my @logins;
+# @logins = keys %${ $self->{md5sum} } if exists $self->{md5sum} and ref $self->{md5sum} eq 'HASH';
+ @logins = ( $login ) if $login;
+
+ foreach my $login ( @logins ) {
+ # FIXME only login's?
+ $self->{md5sum}->{$login}->close;
+ warn "close md5sum $login";
+ }
+ delete $self->{md5sum};
+}
+
+1;
use strict;
use lib 'lib';
+use base 'CloudStore::MD5sum';
use CloudStore::API;
use autodie;
use Digest::MD5 qw(md5_base64);
use Data::Dump qw(dump);
use Carp qw(confess);
-use TokyoCabinet;
use WarnColor;
}
}
-sub md5sum {
- my ( $self, $data ) = @_;
-
- my $login = $data->{login} || confess "missing login in ",dump $data;
-
- return $self->{md5sum}->{$login} if exists $self->{md5sum}->{$login};
-
- my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) =
- getpwnam $login;
-
- my $md5_path = "$dir/.md5";
-
- my $db = TokyoCabinet::HDB->new();
- $db->open($md5_path, $db->OWRITER | $db->OCREAT)
- or die "can't open $md5_path: ",$db->errmsg( $db->ecode );
-
- warn "open $md5_path";
-
- $self->{md5sum}->{$login} = $db;
- return $db;
-}
-
sub init_pid_login {
my ( $self, $pid, $login ) = @_;
sub cleanup_pid {
my ( $self, $pid ) = @_;
- foreach my $login ( keys %{ $self->{md5sum} } ) {
- # FIXME only login's?
- $self->{md5sum}->{$login}->close;
- warn "close md5sum $login";
- }
- delete $self->{md5sum};
+
+ $self->md5sum_close;
delete $self->{pid}->{$pid};
warn "removed $pid";
--- /dev/null
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use Test::More tests => 5;
+use Data::Dump qw(dump);
+
+use lib 'lib';
+
+use_ok 'CloudStore::MD5sum';
+
+my $login = $ENV{LOGIN} || 'u2002';
+
+ok my $o = CloudStore::MD5sum->new, 'new';
+
+ok my $db = $o->md5sum($login), 'md5sum';
+diag dump $db;
+
+ok my $l = [ $o->md5sum_dump($login) ], 'md5sum_dump';
+diag dump $l;
+
+ok $o->md5sum_close($login), 'md5sum_close';
+