From d9d22e51fbffa55b60e84ec2c7acd39827ada248 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Wed, 4 Nov 2009 09:51:28 +0100 Subject: [PATCH] taskd: Listen on $chroot/etc/taskd.socket, change protocol to allow multiple commands --- Girocco/Project.pm | 4 ++-- taskd/taskd.pl | 29 ++++++++++++++++++----------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Girocco/Project.pm b/Girocco/Project.pm index e30b53a..6017fc1 100644 --- a/Girocco/Project.pm +++ b/Girocco/Project.pm @@ -418,8 +418,8 @@ sub clone { unlink ($self->_clonefail_path()); # Ignore EEXIST error use IO::Socket; - my $sock = IO::Socket::UNIX->new('/tmp/girocco.cloned') or die "cannot connect to girocco.cloned: $!"; - $sock->print($self->{name}.".git\n"); + my $sock = IO::Socket::UNIX->new($Girocco::Config::chroot.'/etc/taskd.socket') or die "cannot connect to taskd.socket: $!"; + $sock->print("clone ".$self->{name}.".git\n"); # Just ignore reply, we are going to succeed anyway and the I/O # would apparently get quite hairy. $sock->flush(); diff --git a/taskd/taskd.pl b/taskd/taskd.pl index 609537b..0893612 100755 --- a/taskd/taskd.pl +++ b/taskd/taskd.pl @@ -31,7 +31,7 @@ $| = 1; sub logmsg { print '['.(scalar localtime)."] $0 $$: @_\n" } -my $NAME = '/tmp/girocco.cloned'; +my $NAME = $Girocco::Config::chroot.'/etc/taskd.socket'; my $uaddr = sockaddr_un($NAME); socket(Server, PF_UNIX, SOCK_STREAM, 0) or die "socket: $!"; @@ -76,6 +76,15 @@ sub spawn { exit &$coderef(); } +sub clone { + my ($name) = @_; + print "1\n"; + print STDERR "cloning $name\n"; + open STDOUT, ">".$Girocco::Config::reporoot."/".$name."/.clonelog" or die "cannot open clonelog: $!"; + open STDERR, ">&STDOUT"; + open STDIN, "; - print STDERR "read\n"; - chomp $name; - print STDERR "print\n"; - print "1\n"; - print STDERR "cloning $name\n"; - open STDOUT, ">".$Girocco::Config::reporoot."/".$name."/.clonelog" or die "cannot open clonelog: $!"; - open STDERR, ">&STDOUT"; - open STDIN, "; + chomp $inp; + my ($cmd, $arg) = $inp =~ /^(\w+) (.*)$/; + if ($cmd eq 'clone') { + clone($arg); + } else { + die "unknown command: $cmd"; + } }; close Client; sleep 1; -- 2.11.4.GIT