#!/usr/bin/perl # test script for install side of gitolite (not part of normal test suite) use 5.10.0; use strict; use warnings; use lib "$ENV{HOME}/._s/bin"; use Tsh; my $version_string = get_version(); my $euid=$>; try 'cd'; # invalid arguments clean(); try " ## invalid arguments gitolite/src/gl-system-install bin2 !ok /I need all 3.../ gitolite/src/gl-system-install bin2 share2/gitolite/conf share2/gitolite/hooks !ok /should be an absolute path/ "; # no arguments clean(); try " ## no arguments gitolite/src/gl-system-install ok /using default values for EUID=$euid/ //home/gl-test/bin, /home/gl-test/share/gitolite/conf, /home/gl-test/share/gitolite/hooks/ "; static_checks( "/home/gl-test/bin", "/home/gl-test/share/gitolite/conf", "/home/gl-test/share/gitolite/hooks", $version_string ); # non-default arguments clean(); try " ## non-default arguments gitolite/src/gl-system-install \$PWD/bin2 \$PWD/share2/gitolite/conf \$PWD/share2/gitolite/hooks !ok /WARNING/ /gl-setup is not in your .PATH/ "; static_checks( "/home/gl-test/bin2", "/home/gl-test/share2/gitolite/conf", "/home/gl-test/share2/gitolite/hooks", $version_string ); # occurs earlier in PATH clean(); try " ## occurs earlier in PATH gitolite/src/gl-system-install gitolite/src/gl-system-install \$PWD/bin2 \$PWD/share2/gitolite/conf \$PWD/share2/gitolite/hooks !ok /WARNING/ /in your .PATH .also. contains gl-setup/ " or die; static_checks( "/home/gl-test/bin2", "/home/gl-test/share2/gitolite/conf", "/home/gl-test/share2/gitolite/hooks", $version_string ); # ---------------------------------------------------------------------- sub static_checks { # 3 directory names, version string my ($bin_dir, $conf_dir, $hooks_dir, $verstr) = @_; try " # $bin_dir/gl-setup contains $conf_dir cat $bin_dir/gl-setup ok /\Q$conf_dir\E/ !/\Q/tmp/share\E/ " or die; try " # $conf_dir/example.gitolite.rc has $conf_dir and $hooks_dir cat $conf_dir/example.gitolite.rc ok /\Q$conf_dir\E/ /\Q$hooks_dir\E/ !/\Q/tmp/share\E/ " or die; try " # check $bin_dir got most of the sources ls -al $bin_dir ok /gitolite_env.pm/ /gitolite.pm/ /gitolite_rc.pm/ /gl-auth-command/ /gl-compile-conf/ /gl-install/ /gl-query-rc/ /gl-setup/ /gl-system-install/ " or die; try " # check $conf_dir got the example files ls -al $conf_dir ok /example.gitolite.rc/ /example.conf/ /VERSION/ " or die; try " # check $hooks_dir got the hooks find $hooks_dir -type f ok /\Q$hooks_dir/common/gitolite-hooked\E/ /\Q$hooks_dir/common/update\E/ /\Q$hooks_dir/common/update.secondary.sample\E/ /\Q$hooks_dir/common/post-receive.mirrorpush\E/ /\Q$hooks_dir/common/gl-pre-git.hub-sample\E/ /\Q$hooks_dir/gitolite-admin/post-update\E/ " or die; try " # check version string cat $conf_dir/VERSION ok /\Q$verstr\E/ " or die; } sub clean { chdir($ENV{HOME}); system("rm -rf .ssh*"); system("rm -rf .gito* gitolite-admin projects.list repositories *back.tar share share2 bin bin2 glt-adc td"); mkdir "td"; system("mkdir -p .ssh; chmod go-w .ssh"); system("ssh-keygen -q -N '' -f .ssh/id_rsa"); # set up our identity (impacts some tests; don't change this!) system('git config --global user.name "gitolite tester"'); system('git config --global user.email "tester@example.com"'); } sub cd_g { chdir($ENV{HOME}); chdir("gitolite"); } sub setup { chdir($ENV{HOME}); try "cp .ssh/id_rsa.pub tester.pub"; try "gl-setup -q tester.pub"; } sub get_version { chdir($ENV{HOME}); chdir("gitolite"); try "git describe --tags --long --dirty=-dt 2>/dev/null"; return ((lines())[0]); }