#!/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;