summaryrefslogtreecommitdiffstats
path: root/install
diff options
context:
space:
mode:
Diffstat (limited to 'install')
-rwxr-xr-xinstall99
1 files changed, 99 insertions, 0 deletions
diff --git a/install b/install
new file mode 100755
index 0000000..fa6fc26
--- /dev/null
+++ b/install
@@ -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 );
+}