/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;