From 578bb85b6378f934bc0b76e1c76d0cc3121a552e Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Fri, 15 Aug 2008 21:04:33 +0200 Subject: [PATCH] Separate clonelog viewer to mirrorproj.cgi This can be used to re-trigger failed clones and watch the clonelog scroll. --- Girocco/Project.pm | 15 ++++++++++++ cgi/mirrorproj.cgi | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ cgi/regproj.cgi | 22 ++--------------- 3 files changed, 89 insertions(+), 20 deletions(-) create mode 100755 cgi/mirrorproj.cgi diff --git a/Girocco/Project.pm b/Girocco/Project.pm index b3e5e7d..6edfc2a 100644 --- a/Girocco/Project.pm +++ b/Girocco/Project.pm @@ -92,6 +92,16 @@ sub _nofetch { } } +sub _clonelog_path { + my $self = shift; + $self->_property_path('.clonelog'); +} + +sub _clonefail_path { + my $self = shift; + $self->_property_path('.clone_failed'); +} + sub _clonep_path { my $self = shift; $self->_property_path('.clone_in_progress'); @@ -246,6 +256,9 @@ sub load { $self->{users} = [split /,/, $ulist]; $self->{orig_users} = [@{$self->{users}}]; $self->{mirror} = ! -e $self->_nofetch_path; + $self->{clone_in_progress} = -e $self->_clonep_path; + $self->{clone_logged} = -e $self->_clonelog_path; + $self->{clone_failed} = -e $self->_clonefail_path; $self->{ccrypt} = $self->{crypt}; $self->_properties_load; @@ -368,6 +381,8 @@ sub conjure { sub clone { my $self = shift; + 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"); diff --git a/cgi/mirrorproj.cgi b/cgi/mirrorproj.cgi new file mode 100755 index 0000000..5bbd948 --- /dev/null +++ b/cgi/mirrorproj.cgi @@ -0,0 +1,72 @@ +#!/usr/bin/perl +# (c) Petr Baudis +# GPLv2 + +use strict; +use warnings; + +use lib "."; +use Girocco::CGI; +use Girocco::Config; +use Girocco::Project; +use Girocco::Util; + +my $gcgi = Girocco::CGI->new('Project Registration'); +my $cgi = $gcgi->cgi; + +my $name = $cgi->param('name'); +$name =~ s#.git$## if $name; # + +unless (defined $name) { + print "

I need the project name as an argument now.

\n"; + exit; +} + +if (!Girocco::Project::valid_name($name)) { + print "

Invalid project name. Go away, sorcerer.

\n"; + exit; +} + +if (!Girocco::Project::does_exist($name)) { + print "

Sorry but the project $name does not exist. Now, how did you get here?!

\n"; + exit; +} + +my $proj = Girocco::Project->load($name); +$proj or die "not found project $name, that's really weird!"; + +if (!$proj->{mirror} or !$proj->{clone_in_progress}) { + print "

This project is not a mirror to be cloned.

\n"; + exit; +} + + +$| = 1; + +if (!$proj->{clone_logged} or $proj->{clone_failed}) { + # Kick off the clone since it is not running yet + print "

Initiated mirroring of ".$proj->{url}." to $Girocco::Config::name project ". + "$name.git:

\n"; + $proj->clone; + +} else { + print "

Mirroring of ".$proj->{url}." to $Girocco::Config::name project ". + "$name.git in progress:

\n"; +} + +print "
\n";
+
+open LOG, $proj->_clonelog_path() or die "clonelog: $!";
+tailf: for (;;) {
+	my $curpos;
+	for ($curpos = tell(LOG); ; $curpos = tell(LOG)) {
+		chomp;
+		$_ eq '@OVER@' and last tailf;
+		print "$_\n";
+	}
+	sleep 1;
+	seek(LOG, $curpos, 0);  # seek to where we had been
+}
+close LOG;
+
+print "
\n"; diff --git a/cgi/regproj.cgi b/cgi/regproj.cgi index 61dfa65..53a53ef 100755 --- a/cgi/regproj.cgi +++ b/cgi/regproj.cgi @@ -67,31 +67,13 @@ if ($cgi->param('mode')) { my $proj = Girocco::Project->ghost($name, $mirror); if ($proj->cgi_fill($gcgi)) { if ($mirror) { - $| = 1; unless ($Girocco::Config::mirror) { $gcgi->err("Mirroring mode is not enabled at this site."); exit; } $proj->premirror; - print "

Initiated mirroring of ".$cgi->param('url')." to $Girocco::Config::name project ". - "$name.git:

\n"; - $proj->clone; - print "
\n";
-
-			open LOG, $proj->{path}.'/.clonelog' or die "clonelog: $!";
-			tailf: for (;;) {
-				my $curpos;
-				for ($curpos = tell(LOG); ; $curpos = tell(LOG)) {
-					chomp;
-					$_ eq '@OVER@' and last tailf;
-					print "$_\n";
-				}
-				sleep 1;
-				seek(LOG, $curpos, 0);  # seek to where we had been
-			}
-			close LOG;
-
-			print "
\n"; + print "

Please pass onwards.

\n"; + print "\n"; } else { unless ($Girocco::Config::push) { -- 2.11.4.GIT