#!/usr/bin/perl use strict; use warnings; # Clearly you don't need a program to make one measly symlink, but the git # describe command involved in generating the VERSION string is a bit fiddly. use Getopt::Long; use FindBin; use Config; # meant to be run from the root of the gitolite tree, one level above 'src' BEGIN { $ENV{GL_BINDIR} = $FindBin::RealBin . "/src"; } BEGIN { $ENV{GL_LIBDIR} = "$ENV{GL_BINDIR}/lib"; } use lib $ENV{GL_LIBDIR}; use Gitolite::Common; =for usage Usage (from gitolite clone directory): ./install to run gitolite using an absolute or relative path, for example 'src/gitolite' or '/full/path/to/this/dir/src/gitolite' ./install -ln [] to symlink just the gitolite executable to some that is in $PATH. defaults to $HOME/bin if not specified. is assumed to exist; gitolite will not create it. Please provide a full path, not a relative path. ./install -to to copy the entire 'src' directory to . If is not in $PATH, use the full path to run gitolite commands. Please provide a full path, not a relative path. ./install -to to copy the entire 'src' directory to , but will replace all of the shebangs with the path to . This is a way to force gitolite to use some perl that is not installed at /usr/bin/perl. Simplest use, if $HOME/bin exists and is in $PATH, is: git clone https://github.com/sitaramc/gitolite gitolite/install -ln # now run setup gitolite setup -pk /path/to/YourName.pub =cut my ( $to, $ln, $help, $quiet ); GetOptions( 'to=s' => \$to, 'ln:s' => \$ln, 'help|h' => \$help, 'quiet|q' => \$quiet, ); usage() if $to and $ln or $help; $ln = "$ENV{HOME}/bin" if defined($ln) and not $ln; for my $d ($ln, $to) { next unless $d; # ignore empty values unless ( $d =~ m(^/) ) { print STDERR "FATAL: please use an absolute path, not a relative path\n"; usage(); } if ( not -d $d ) { print STDERR "FATAL: '$d' does not exist.\n"; usage(); } } chdir($ENV{GL_BINDIR}); my $version = `git describe --tags --long --dirty=-dt 2>/dev/null`; unless ($version =~ /^v\d|^gitolite-gentoo/) { print STDERR "git describe failed; cannot deduce version number\n"; $version = "(unknown)"; } if ($to) { _mkdir($to); system("cp -RpP * $to"); _print( "$to/VERSION", $version ); # Replace shebangs if necessary. my $thisperl = $Config{perlpath}; if ($thisperl ne '/usr/bin/perl') { system("cd $to; grep -r -l /usr/bin/perl | xargs perl -pi -e 's(^#!/usr/bin/perl)(#!$thisperl)'"); } } elsif ($ln) { ln_sf( $ENV{GL_BINDIR}, "gitolite", $ln ); _print( "VERSION", $version ); } else { say "use the following full path for gitolite:"; say "\t$ENV{GL_BINDIR}/gitolite"; _print( "VERSION", $version ); }