diff options
Diffstat (limited to 'install')
-rwxr-xr-x | install | 99 |
1 files changed, 99 insertions, 0 deletions
@@ -0,0 +1,99 @@ +#!/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 [<dir>] + to symlink just the gitolite executable to some <dir> that is in + $PATH. <dir> defaults to $HOME/bin if <dir> not specified. <dir> is + assumed to exist; gitolite will not create it. + + Please provide a full path, not a relative path. + + ./install -to <dir> + to copy the entire 'src' directory to <dir>. If <dir> is not in + $PATH, use the full path to run gitolite commands. + + Please provide a full path, not a relative path. + + <perl-executable> ./install -to <dir> + to copy the entire 'src' directory to <dir>, but will replace + all of the shebangs with the path to <perl-executable>. 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/) { + 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 ); +} |