#!/usr/bin/perl use strict; use warnings; # gitolite VREF to check max size of new binary files # see gitolite docs for what the first 7 arguments mean # inputs: # arg-8 is a number # outputs (STDOUT) # arg-7 if any new binary files exist that are greater in size than arg-8 # *and* there is no "signed-off by" line for such a file in the top commit # message. # # Otherwise nothing # exit status: # always 0 die "not meant to be run manually" unless $ARGV[7]; my ( $newsha, $oldtree, $newtree, $refex, $max ) = @ARGV[ 2, 3, 4, 6, 7 ]; exit 0 if $newsha eq '0000000000000000000000000000000000000000'; # / (.*) +\| Bin 0 -> (\d+) bytes/ chomp( my $author_email = `git log --format=%ae -1 $newsha` ); my $msg = `git cat-file -p $newsha`; $msg =~ s/\t/ /g; # makes our regexes simpler for my $newbin (`git diff --stat=999,999 $oldtree $newtree | grep Bin.0.-`) { next unless $newbin =~ /^ (.*) +\| +Bin 0 -> (\d+) bytes/; my ( $f, $s ) = ( $1, $2 ); next if $s <= $max; next if $msg =~ /^ *$f +signed-off by: *$author_email *$/mi; print "$refex $f is larger than $max"; } exit 0