From ce7f70f790abe9e227ec2fb42721232d4e869863 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Wed, 4 Nov 2009 12:31:57 +0100 Subject: [PATCH] taskd: Guard against cloning projects not for clone or already being cloned --- Girocco/Project.pm | 1 + taskd/taskd.pl | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Girocco/Project.pm b/Girocco/Project.pm index 45d4e1e..4775fda 100644 --- a/Girocco/Project.pm +++ b/Girocco/Project.pm @@ -416,6 +416,7 @@ sub clone { my $self = shift; unlink ($self->_clonefail_path()); # Ignore EEXIST error + unlink ($self->_clonelog_path()); # Ignore EEXIST error use IO::Socket; my $sock = IO::Socket::UNIX->new($Girocco::Config::chroot.'/etc/taskd.socket') or die "cannot connect to taskd.socket: $!"; diff --git a/taskd/taskd.pl b/taskd/taskd.pl index 5c0bcad..264ac84 100755 --- a/taskd/taskd.pl +++ b/taskd/taskd.pl @@ -73,7 +73,10 @@ sub spawn { sub clone { my ($name) = @_; - Girocco::Project::does_exist($name) or die "won't clone non-existing project $name"; + my $proj = Girocco::Project->load($name); + $proj or die "failed to load project $name"; + $proj->{clone_in_progress} or die "project $name is not marked for cloning"; + $proj->{clone_logged} and die "project $name is already being cloned"; print STDERR "cloning $name\n"; open STDOUT, ">".$Girocco::Config::reporoot."/".$name.".git/.clonelog" or die "cannot open clonelog: $!"; open STDERR, ">&STDOUT"; -- 2.11.4.GIT