c54d3eabbc
You can now add your own hooks into src/hooks/ and they get propagated along with the update hook that is present there now. Please read the new section in the admin document, and make sure you understand the security implications of accidentally fiddling with the "update" script. This also prompted a major rename spree of all the files to be consistent, etc. Plus people said that the .sh and .pl suffixes should be avoided (and I was feeling the same way). I've also been inconsistent with that "gl-" prefix, so I cleaned that up, and the 00- and 99- were also funny animals. Time to get all this cleaned up before we get 1.0 :) So these are the changes, in case you're looking at just the commit message and not the diffstat: src/pta-hook.sh -> src/ga-post-update-hook src/conf-convert.pl -> src/gl-conf-convert src/00-easy-install.sh -> src/gl-easy-install src/99-emergency-addkey.sh -> src/gl-emergency-addkey src/install.pl -> src/gl-install src/update-hook.pl -> src/hooks/update
102 lines
2.3 KiB
Perl
Executable file
102 lines
2.3 KiB
Perl
Executable file
#!/usr/bin/perl -w
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
# migrate gitosis.conf to gitolite.conf format
|
|
|
|
# not very smart, but there shouldn't be any errors for simple configurations.
|
|
# the biggest thing you'll find is probably some comments rearranged or
|
|
# something, due to the "flush" thing below
|
|
|
|
# for stuff it can't handle, it'll ignore the trivial ones (like gitweb and
|
|
# daemon), and put in an obviously syntax error-ed line for "repositories" and
|
|
# "map" statements.
|
|
|
|
my @repos;
|
|
my @RO_repos;
|
|
my @comments;
|
|
my @users;
|
|
my $groupname;
|
|
|
|
# a gitosis.conf stanza ends when a new "[group name]" line shows up, so you
|
|
# can't write as you go; you have to accumulate and flush
|
|
sub flush {
|
|
die "repos but no users?\n" if (not @users and (@repos or @RO_repos));
|
|
# just a groupname
|
|
if (@users and not (@repos or @RO_repos)) {
|
|
print "\@$groupname = ", join(" ", @users), "\n";
|
|
}
|
|
# RW repos
|
|
if (@repos)
|
|
{
|
|
print "repo ", join(" ", @repos), "\n";
|
|
print " RW = ", join(" ", @users), "\n";
|
|
}
|
|
# RO repos
|
|
if (@RO_repos)
|
|
{
|
|
print "repo ", join(" ", @RO_repos), "\n";
|
|
print " R = ", join(" ", @users), "\n";
|
|
}
|
|
# comments; yes there'll be some reordering, sorry!
|
|
print @comments if @comments;
|
|
|
|
# empty out for next round
|
|
@users = ();
|
|
@repos = ();
|
|
@RO_repos = ();
|
|
@comments = ();
|
|
}
|
|
|
|
while (<>)
|
|
{
|
|
# pure comment lines or blank lines
|
|
if (/^\s*#/ or /^\s*$/) {
|
|
push @comments, $_;
|
|
next;
|
|
}
|
|
|
|
# not supported
|
|
if (/^repositories *=/ or /^map /) {
|
|
print STDERR "not supported: $_";
|
|
s/^/NOT SUPPORTED: /;
|
|
print;
|
|
next;
|
|
}
|
|
|
|
chomp;
|
|
|
|
# normalise whitespace to help later regexes
|
|
s/\s+/ /g;
|
|
s/ ?= ?/ = /;
|
|
s/^ //;
|
|
s/ $//;
|
|
|
|
# the chaff...
|
|
next if /^\[(gitosis|repo)\]$/
|
|
or /^(gitweb|daemon|loglevel|description|owner) =/;
|
|
|
|
# the wheat...
|
|
if (/^members = (.*)/) {
|
|
push @users, split(' ', $1);
|
|
next;
|
|
}
|
|
if (/^write?able = (.*)/) {
|
|
push @repos, split(' ', $1);
|
|
next;
|
|
}
|
|
if (/^readonly = (.*)/) {
|
|
push @RO_repos, split(' ', $1);
|
|
next;
|
|
}
|
|
|
|
# new group starts
|
|
if (/^\[group (.*?) ?\]/) {
|
|
flush();
|
|
$groupname = $1;
|
|
}
|
|
}
|
|
|
|
flush();
|