37 lines
896 B
Plaintext
37 lines
896 B
Plaintext
|
#!/usr/bin/perl
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
|
||
|
use lib $ENV{GL_LIBDIR};
|
||
|
use Gitolite::Common;
|
||
|
|
||
|
# gitolite VREF to lock and unlock (binary) files. Requires companion command
|
||
|
# 'lock' to be enabled; see doc/locking.mkd for details.
|
||
|
|
||
|
# ----------------------------------------------------------------------
|
||
|
|
||
|
# see gitolite docs for what the first 7 arguments mean
|
||
|
|
||
|
die "not meant to be run manually" unless $ARGV[6];
|
||
|
|
||
|
my $ff = "$ENV{GL_REPO_BASE}/$ENV{GL_REPO}.git/gl-locks";
|
||
|
exit 0 unless -f $ff;
|
||
|
|
||
|
our %locks;
|
||
|
my $t = slurp($ff);
|
||
|
eval $t;
|
||
|
_die "do '$ff' failed with '$@', contact your administrator" if $@;
|
||
|
|
||
|
my ( $oldtree, $newtree, $refex ) = @ARGV[ 3, 4, 6 ];
|
||
|
|
||
|
for my $file (`git diff --name-only $oldtree $newtree` ) {
|
||
|
chomp($file);
|
||
|
|
||
|
if ($locks{$file} and $locks{$file}{USER} ne $ENV{GL_USER}) {
|
||
|
print "$refex '$file' locked by '$locks{$file}{USER}'";
|
||
|
last;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exit 0
|