my ( $self,$data ) = @_;
}
+sub mkbasedir {
+ my $dir = shift;
+ $dir =~ s{/[^/]+$}{}; # strip filename
+ mkdir $dir unless -e $dir;
+}
+
sub modify_file {
my ( $self,$data ) = @_;
my $sent_files;
open(my $send, '<', $self->blob_path($data) );
while(<$send>) {
-warn $_;
- chomp;
+ s/[\n\r]+$//;
+
my ( $to, $file ) = split(/\s+/,$_,2);
my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) =
getpwnam $to;
}
my $to_path = "$dir/received/$file";
- my $to_dir = $to_path;
- $to_dir =~ s{/[^/]+$}{};
- mkdir $to_dir unless -e $to_dir;
+ mkbasedir $to_path;
warn "SEND $from_path -> $to_path";
$sent_files->{$to} += link $from_path, $to_path;
warn "SENT ",dump $sent_files;
+ return 0; # skip dedup
+ } elsif ( $data->{file} =~ m{^(.*/).sync/pending/([^/]+)$} ) {
+ my $from_dir = $1;
+ warn "PENDIG $2 from $from_dir";
+ open(my $pend, '<', $self->blob_path($data) );
+ while(<$pend>) {
+ s/[\n\r]+$//;
+warn $_;
+ if ( ! /^MOVED\#/ ) {
+ warn "skip $_\n";
+ next;
+ }
+
+ my ( undef, $from, $to ) = split(/\#/,$_,3);
+
+ my ( $from_path, $to_path ) = map {
+ my $tmp = $data;
+ $tmp->{file} = $from_dir . $_;
+ $self->blob_path($tmp);
+ } ( $from, $to );
+
+ warn "MV $from_path -> $to_path";
+ mkbasedir $to_path;
+ rename $from_path, $to_path;
+ }
+
return 0; # skip dedup
}
#!/bin/sh -xe
-user_dir=/srv/cloudstore/users/test/
-rm -Rvf $user_dir/log/* #$user_dir/blob/*
-
-RSYNC_LOGIN=u2000
+RSYNC_LOGIN=fake
push() {
file=`shift`
rm tmp
push . -r --delete -v
-fi # skip tests
-
# test send
ps ax >> send
# order is important! .sync must be last!
push send dir1 dir2 .sync -rv
+
+fi # skip tests
+
+# test file move
+
+pending=/tmp/pending.0610201109464117
+grep ^MOVED $pending | cut -d\# -f2 | xargs -i sh -c "ps ax > {}"
+push . -rv
+
+mkdir -p .sync/pending
+cp $pending .sync/pending/
+push .sync -rv