# $self->file_set($data);
}
-sub remove_file {
+sub removed_file {
my ( $self, $data ) = @_;
my $md5 = $self->md5sum($data)->get( $data->{file} );
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat($path);
- if ( $nlink == 1 ) {
+
+ my $user = $self->{api}->user_info($data->{login});
+
+ if ( $nlink == 1 && $uid == $user->{uid} ) {
+ $self->append( $user, 'removed', -$size, $uid, $data->{file} );
my $id = getpwnam 'md5';
chown $id,$gid, $path;
warn "# chown $id $gid $path";
my ( $self, $pid, $login ) = @_;
$login =~ s/\@.+//;
- my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) =
- getpwnam $login;
-
- $self->{pid}->{$pid} = {
- login => $login,
- uid => $uid,
- gid => $gid,
- email => $email,
- dir => $dir,
- shell => $shell,
- };
+ $self->{pid}->{$pid} = $self->{api}->user_info($login);
warn "created $pid";
}
my $pid = $1;
$self->cleanup_pid( $pid );
} else {
-# warn "## rsync_log $data";
+ warn "## rsync_log $data";
}
}
die "unknown type $type ", dump $data;
}
} elsif ( $data->{itemize} =~ m/\*deleting/ ) {
- $self->remove_file($data);
+ $self->removed_file($data);
} else {
warn "IGNORED ",dump($data) if $ENV{DEBUG};
}
my $md5 = $data->{md5} || die "no md5 in ",dump $data;
my $path = $self->blob_path($data);
- if ( -e "$pool/$md5" ) {
+ my $pool_md5 = "$pool/$md5";
+
+ if ( -e $pool_md5 ) {
warn "dedup hit $md5 $path\n";
+
+ my ($pool_uid,$pool_size) = (stat($pool_md5))[4,7];
+ my $user = $self->{api}->user_info( $data->{login} );
+
+ if ( $pool_uid != $self->{api}->{md5}->{uid} ) {
+ chown $self->{api}->{md5}->{uid}, $self->{api}->{md5}->{gid}, $pool_md5;
+ chmod oct("0444"), $pool_md5;
+ my $steal_user = $self->{api}->user_info( $pool_uid );
+ $self->append( $steal_user, 'dedup-steal', $pool_size, $pool_uid, $data->{file} );
+ }
+ $self->append( $user, 'dedup', $pool_size, $pool_uid, $data->{file} );
+
my $dedup = $path . '.dedup';
rename $path, $dedup;
link "$pool/$md5", $path;
unlink $dedup;
- # FIXME fix perms?
} else {
link $path, "$pool/$md5";
warn "dedup +++ $md5 $path";
};
my $new_path = $self->blob_path($new);
if ( ! -e $new_path ) {
- # create path from md5sum file
- mkbasedir $new_path;
- $imported += link "$self->{md5path}/$md5", $new_path;
- $self->new_file($new);
- warn "import from $path ",dump($new);
+ $self->{api}->send_file( 'md5' => $md5, $data->{login}, "$dir$file" );
$self->md5pool( $new );
} else {
$self->md5pool( $new );