/usr/local/CPAN/Pushmi/Pushmi/Mirror.pm
package Pushmi::Mirror;
use strict;
use SVN::Core;
use SVN::Repos;
use SVN::Fs;
use SVK::Util qw(abs_path can_run);
sub install_hook {
shift;
my $repospath = shift;
my $repos = SVN::Repos::open($repospath) or die; # XXX proper error
$repos->fs->change_rev_prop(0, 'svk:notify-commit', '*');
my $perl = join(' ', $^X, map { "'-I$_'" } @INC);
my $pushmi = can_run('pushmi') or die "can't find pushmi";
no warnings 'uninitialized';
_install_hook($repospath, 'pre-commit', << "END");
#!/bin/sh
export SVKNOSVNCONFIG=1
export PUSHMI_CONFIG=$ENV{PUSHMI_CONFIG}
$perl $pushmi runhook \$1 --txnname \$2
END
_install_hook($repospath, 'post-commit', << "END");
#!/bin/sh
export SVKNOSVNCONFIG=1
export PUSHMI_CONFIG=$ENV{PUSHMI_CONFIG}
$perl $pushmi unlock \$1 --revision \$2
$perl $pushmi verify \$1 --revision \$2 &
END
}
sub _install_hook {
my ($repospath, $hook, $content) = @_;
my $hpath = "$repospath/hooks/$hook";
open my $fh, '>', $hpath or die $!;
print $fh $content;
close $fh;
chmod 0755, $hpath;
unless (-x $hpath) {
# log info
return 0;
}
return 1;
}
1;