Archived
1
0
This repository has been archived on 2021-10-08. You can view files and clone it, but cannot push or open issues or pull requests.
ACU/hooks/submissions.pl
2013-09-16 06:43:17 +02:00

86 lines
1.9 KiB
Perl
Executable File

#!/usr/bin/env perl
use strict;
use warnings;
use v5.10;
use Date::Manip;
use File::Basename;
use ACU::API::Projects;
use ACU::API::Submission;
use ACU::LDAP;
use ACU::Log;
$ACU::Log::log_file = "/var/log/hooks/" . basename($0) . ".log";
use ACU::Process;
# First, check if the repository is in the YYYY/ directory
exit 0 if ($ENV{GL_REPO} !~ /^2[0-9]{3}\/.+\/.+/);
my ($ref, $oldsha, $newsha) = @ARGV;
my $promo = $1 if ($ENV{'GL_REPO'} =~ m/([0-9]{4}).*/);
my $id_project = $1 if ($ENV{'GL_REPO'} =~ m/.*\/(.*)\//);
my $repo_login = $1 if ($ENV{'GL_REPO'} =~ m/.*\/.*\/(.*)/);
log WARN, "This is a project!";
if ($ref =~ m<^refs/tags/(.+)$>)
{
my $tag = $1;
log INFO, "Pushed tag for repository $ENV{GL_REPO}: $tag";
# Get project informations
my $project;
eval {
$project = API::Projects::get($id_project, $promo);
};
if ($@ or !$project) {
my $err = $@;
log TRACE, $err;
log ERROR, "Impossible d'envoyer de tags ; si le problème persiste, passez au laboratoire.";
exit 1;
}
log TRACE, $project;
# Extract lot of data
my @rendus = grep {
exists $_->{vcs} and $_->{vcs}{tag} eq $tag;
} @{ $project->{submissions} };
my $date = $ENV{'GL_TS'};
$date =~ s/\./ /;
my $glts = ParseDate($date);
chomp (my $tokengiven = `git cat-file tag $newsha | sed -e '1,/^\$/d'`);
for my $rendu (@rendus)
{
my $open = ParseDate($rendu->{period}{begin});
my $close = ParseDate($rendu->{period}{end});
# TODO: check exceptions by login/group
if ((Date_Cmp($glts, $open) == -1))
{
print "[ACU] Tag not allowed: upload not yet opened!\n";
exit(4);
}
if ((Date_Cmp($glts, $close) == 1))
{
print "[ACU] Tag not allowed: upload closed!\n";
exit(5);
}
my $token = $rendu->{vcs}{token};
if ($token ne "" and $token ne $tokengiven)
{
print "[ACU] Error 0x65cd58: Bad token.\n";
exit(6);
}
}
}
exit 1;
exit 0;