(experimental code) push wild repos across a master slave connection
It creates the repo on the remote side (getting the creator name from the gl-creator file and sending it across), as well as sending gl-perms on subsequent connections. This has only been minimally tested. E.g., complex setups or asymmetric configs on master and slave, etc. have NOT been tested. This has also not been tested with redirected pushes.
This commit is contained in:
parent
42e0bac48c
commit
78866f6f28
3 changed files with 48 additions and 4 deletions
|
@ -10,11 +10,30 @@ use warnings;
|
|||
my $git_commands = "git-upload-pack|git-receive-pack|git-upload-archive";
|
||||
my $hn = $rc{HOSTNAME};
|
||||
|
||||
my ( $mode, $master, %slaves, %trusted_slaves );
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
sub input {
|
||||
return unless $ARGV[0] =~ /^server-(\S+)$/;
|
||||
|
||||
# custom peer-to-peer commands. At present the only one is 'perms -c',
|
||||
# sent from a mirror command
|
||||
if ($ENV{SSH_ORIGINAL_COMMAND} =~ /^CREATOR=(\S+) perms -c '(\S+)'$/) {
|
||||
$ENV{GL_USER} = $1;
|
||||
|
||||
my $repo = $2;
|
||||
details($repo);
|
||||
_die "$hn: '$repo' is local" if $mode eq 'local';
|
||||
_die "$hn: '$repo' is native" if $mode eq 'master';
|
||||
|
||||
# this expects valid perms content on STDIN
|
||||
_system("gitolite perms -c $repo");
|
||||
|
||||
# we're done. Yes, really...
|
||||
exit 0;
|
||||
}
|
||||
|
||||
# note: we treat %rc as our own internal "poor man's %ENV"
|
||||
$rc{FROM_SERVER} = $1;
|
||||
trace( 3, "from_server: $1" );
|
||||
|
@ -33,8 +52,6 @@ sub input {
|
|||
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
my ( $mode, $master, %slaves, %trusted_slaves );
|
||||
|
||||
sub pre_git {
|
||||
return unless $hn;
|
||||
# nothing, and I mean NOTHING, happens if HOSTNAME is not set
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue