#!/usr/local/bin/perl # vim:sts=4 sw=4 use strict; use warnings; use 5.024; sub short_ref { my ($ref) = @_; $ref =~ s{refs/heads/}{}oms; return $ref; } my $push_option_count = $ENV{GIT_PUSH_OPTION_COUNT}; for (my $i = 0; $i < $push_option_count; ++$i) { exit 0 if $ENV{"GIT_PUSH_OPTION_${i}"} eq "unsupported-quarterly"; } my @quarterlies; for (qx{git show-ref --heads}) { chomp; my ($hash, $ref) = split / /; next if $ref !~ m{refs/heads/\d\d\d\dQ\d\z}oms; push @quarterlies, $ref; } @quarterlies = sort @quarterlies; my $latest = $quarterlies[-1]; foreach () { chomp; my ($old, $new, $ref) = split / /; next if $ref !~ m{^refs/heads/20\d\dQ\d\z}oms; next if $ref eq $latest; die "\n================================================================\n" . "$ENV{GL_USER}, you are pushing a commit to ${\(short_ref($ref))} which is not\n" . "the latest quarterly branch. The latest is ${\(short_ref($latest))}.\n" . "\n" . "Please check that you really mean to do this, and if you do, use:\n" . "\tgit push --push-option=unsupported-quarterly\n" . "================================================================\n" } exit 0;