Lufs
view release on metacpan or search on metacpan
lib/Lufs/Svn.pm view on Meta::CPAN
package Lufs::Svn;
# in zoid:
# sub mnt { umount($mp='/mnt/foo'); if ($td && -d $td) { print "REMOVING $td\n";shell("rm -rf $td") } $td=tempdir;print("lufsmount -c 1 -o 'uri=$ENV{SVNROOT}/zut,logfile=/tmp/svnfs.log' perlfs://Lufs.Svn$td $mp\n" ) }
# mnt()
# try something
# mnt()
# ...
# umount($mp)
# lufsmount -c 1 -o uri='svn://datamoeras.org/zut',logfile=/tmp/svnfslog perlfs://Lufs.Svn/mnt/cold /mnt/hot
# a checked out copy will be put in /mnt/cold
use strict;
use base 'Lufs::Local';
use File::Temp qw/tempdir/;
use File::Basename;
sub init {
my $self = shift;
$self->{config} = shift;
$self->{svn} = Lufs::Svn::Svn::System->new(uri => $self->{config}{uri}) or die "no svn implementation available";
$self->checkout or die;
}
sub mount {
my $self = shift;
$self->SUPER::mount(@_);
}
sub umount {
my $self = shift;
$self->SUPER::umount(@_);
}
sub release {
my $self = shift;
$self->commit($_[0]);
}
sub update {
my $self = shift;
$self->{svn}->update(@_);
}
sub checkout {
my $self = shift;
system("rm -rf $self->{config}{root}/{.svn,*}") if (length($self->{config}{root}) > 3 && -d $self->{config}{root});
$self->{svn}->checkout($self->{config}{uri}, $self->{config}{root});
}
sub commit {
my $self = shift;
$self->{svn}->commit('-m', 'svnfs', @_);
}
sub DESTROY {
my $self = shift;
}
sub create {
my $self = shift;
my $node = $_[0];
my $ret = $self->SUPER::create(@_);
return $ret unless $ret;
$self->{svn}->add($node);
$self->commit($node);
}
sub unlink {
my $self = shift;
my $node = shift;
$self->{svn}->rm($node) or return 0;
$self->commit($node);
}
sub readdir {
my $self = shift;
$self->{svn}->update($_[0]);
my $ret = $self->SUPER::readdir(@_);
@{$_[-1]} = grep !/^.svn$/, @{$_[-1]};
$ret;
}
sub mkdir {
my $self = shift;
my $dir = shift;
$self->{svn}->mkdir($dir) or return 0;
$self->commit($dir);
}
sub rmdir {
my $self = shift;
my $dir = shift;
$self->{svn}->update($dir);
$self->{svn}->rm($dir);
$self->commit($dir);
}
sub rename {
my $self = shift;
( run in 0.722 second using v1.01-cache-2.11-cpan-5a3173703d6 )