#!/usr/bin/perl use strict; use warnings; use FindBin; BEGIN { $ENV{GL_BINDIR} = $FindBin::RealBin; } my $cmd = shift or die "need command"; my $user = shift or die "need user"; my $rc; my %extcmds = ( help => 1, info => 1, desc => 1, fork => 1, perms => 1, writable => 1, ); $ENV{G3T_USER} = $user; if ($extcmds{$cmd}) { $ENV{SSH_ORIGINAL_COMMAND} = join(" ", $cmd, @ARGV); exec( "$ENV{GL_BINDIR}/../src/gitolite-shell", $user ); } elsif ( $cmd eq 'push' ) { print STDERR "TRACE: glt(", join( ")(", @ARGV ), ")\n"; $rc = system( "git", $cmd, "--receive-pack=$ENV{GL_BINDIR}/gitolite-receive-pack", @ARGV ); } else { print STDERR "TRACE: glt(", join( ")(", @ARGV ), ")\n"; $rc = system( "git", $cmd, "--upload-pack=$ENV{GL_BINDIR}/gitolite-upload-pack", @ARGV ); } if ( $? == -1 ) { die "F: failed to execute: $!\n"; } elsif ( $? & 127 ) { printf STDERR "E: child died with signal %d\n", ( $? & 127 ); exit 1; } else { printf STDERR "W: child exited with value %d\n", $? >> 8 if $? >> 8; exit( $? >> 8 ); } exit 0;