gitweb/daemon post-create scripts done
This commit is contained in:
parent
24b36f11c5
commit
b1a75b7889
|
@ -246,6 +246,16 @@ __DATA__
|
|||
POST_COMPILE =>
|
||||
[
|
||||
'post-compile/ssh-authkeys',
|
||||
'post-compile/update-gitweb-access-list',
|
||||
'post-compile/update-git-daemon-access-list',
|
||||
],
|
||||
|
||||
# comment out or uncomment as needed
|
||||
# these will run in sequence after a new wild repo is created
|
||||
POST_CREATE =>
|
||||
[
|
||||
# 'post-compile/update-gitweb-access-list',
|
||||
# 'post-compile/update-git-daemon-access-list',
|
||||
],
|
||||
|
||||
# comment out or uncomment as needed
|
||||
|
|
40
src/commands/post-compile/update-git-daemon-access-list
Executable file
40
src/commands/post-compile/update-git-daemon-access-list
Executable file
|
@ -0,0 +1,40 @@
|
|||
#!/bin/sh
|
||||
|
||||
# this is probably the *fastest* git-daemon update possible.
|
||||
|
||||
export EO=git-daemon-export-ok
|
||||
export RB=$(gitolite query-rc GL_REPO_BASE)
|
||||
|
||||
gitolite list-phy-repos | gitolite access % daemon R any |
|
||||
perl -lane '
|
||||
unlink "$ENV{RB}/$F[0].git/$ENV{EO}" if /DENIED/;
|
||||
print $F[0] unless /DENIED/
|
||||
' |
|
||||
while read r
|
||||
do
|
||||
> $RB/$r.git/$EO
|
||||
done
|
||||
|
||||
# A bit of explanation may be in order. The gitolite output looks somewhat
|
||||
# like this:
|
||||
|
||||
# bar^Idaemon^IR any bar daemon DENIED by fallthru$
|
||||
# foo^Idaemon^Irefs/.*$
|
||||
# fubar^Idaemon^Irefs/.*$
|
||||
# gitolite-admin^Idaemon^IR any gitolite-admin daemon DENIED by fallthru$
|
||||
# testing^Idaemon^Irefs/.*$
|
||||
|
||||
# where I've type "^I" to denote a tab.
|
||||
|
||||
# Shell has to fork 'rm' to delete a file but perl doesn't. So removing the
|
||||
# export-ok file from repos where needed is done in perl.
|
||||
|
||||
# On the other hand, perls requires a bit more *code* to even create an empty
|
||||
# file. Shell can do it with just "> file", and it doesn't fork for this. So
|
||||
# that part is handled in shell.
|
||||
|
||||
# You'll also see that the perl part is taking what it needs from the input
|
||||
# and passing the rest on, so the shell part doesn't have to do any grepping,
|
||||
# which would be a horrible slowdown.
|
||||
|
||||
# $F and the rest is the magic of perl's flags (man perlrun).
|
11
src/commands/post-compile/update-gitweb-access-list
Executable file
11
src/commands/post-compile/update-gitweb-access-list
Executable file
|
@ -0,0 +1,11 @@
|
|||
#!/bin/sh
|
||||
|
||||
# this is literally the simplest gitweb update possible. You are free to add
|
||||
# whatever you want and contribute it back, as long as it is upward
|
||||
# compatible.
|
||||
|
||||
plf=$(gitolite query-rc GITWEB_PROJECTS_LIST)
|
||||
[ -z "$plf" ] && plf=$HOME/projects.list
|
||||
|
||||
gitolite list-phy-repos | gitolite access % gitweb R any | grep -v DENIED | cut -f1 | sed -e 's/$/.git/' > $plf
|
||||
|
89
t/all-yall.t
Executable file
89
t/all-yall.t
Executable file
|
@ -0,0 +1,89 @@
|
|||
#!/usr/bin/perl
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
# this is hardcoded; change it if needed
|
||||
use lib "src";
|
||||
use Gitolite::Test;
|
||||
|
||||
# basic tests
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
try "plan 26";
|
||||
|
||||
confreset;confadd '
|
||||
repo @all
|
||||
R = @all
|
||||
repo foo
|
||||
RW+ = u1
|
||||
repo bar
|
||||
RW+ = u2
|
||||
repo dev/..*
|
||||
C = u3 u4
|
||||
RW+ = CREATOR
|
||||
';
|
||||
|
||||
try "
|
||||
rm $ENV{HOME}/projects.list
|
||||
";
|
||||
try "ADMIN_PUSH set1; !/FATAL/" or die text();
|
||||
|
||||
try "
|
||||
glt ls-remote u1 file:///dev/wild1
|
||||
/FATAL: R any dev/wild1 u1 DENIED by fallthru/
|
||||
|
||||
glt clone u3 file:///dev/wild1
|
||||
/Cloning into 'wild1'.../
|
||||
/Initialized empty Git repository in .*/dev/wild1.git//
|
||||
/warning: You appear to have cloned an empty repository./
|
||||
|
||||
cd wild1
|
||||
tc n-855 n-856
|
||||
glt push u3 origin master:wild1
|
||||
/To file:///dev/wild1/
|
||||
/\\* \\[new branch\\] master -> wild1/
|
||||
glt push u1 file:///foo master:br-foo
|
||||
/To file:///foo/
|
||||
/\\* \\[new branch\\] master -> br-foo/
|
||||
glt push u2 file:///bar master:br-bar
|
||||
/To file:///bar/
|
||||
/\\* \\[new branch\\] master -> br-bar/
|
||||
|
||||
glt ls-remote u6 file:///foo
|
||||
/refs/heads/br-foo/
|
||||
|
||||
glt ls-remote u6 file:///bar
|
||||
/refs/heads/br-bar/
|
||||
|
||||
glt ls-remote u6 file:///dev/wild1
|
||||
/refs/heads/wild1/
|
||||
";
|
||||
|
||||
try "
|
||||
gitolite post-compile/update-git-daemon-access-list; ok
|
||||
gitolite post-compile/update-gitweb-access-list; ok
|
||||
cat $ENV{HOME}/projects.list; ok
|
||||
";
|
||||
cmp 'bar.git
|
||||
dev/wild1.git
|
||||
foo.git
|
||||
gitolite-admin.git
|
||||
testing.git
|
||||
';
|
||||
|
||||
my $rb = `gitolite query-rc -n GL_REPO_BASE`;
|
||||
|
||||
try "
|
||||
cd ..
|
||||
cd ..
|
||||
echo $rb
|
||||
find $rb -name git-daemon-export-ok | sort
|
||||
perl s,$rb/,,g
|
||||
";
|
||||
|
||||
cmp 'bar.git/git-daemon-export-ok
|
||||
dev/wild1.git/git-daemon-export-ok
|
||||
foo.git/git-daemon-export-ok
|
||||
gitolite-admin.git/git-daemon-export-ok
|
||||
testing.git/git-daemon-export-ok
|
||||
';
|
Loading…
Reference in a new issue