#!/usr/bin/perl -w use Test::More; eval { require SVK::Test; 1 } or plan skip_all => 'requires SVK for testing.'; SVK::Test->import; use SVK::Util 'can_run'; $ENV{SVNLOOK} ||= can_run('svnlook') or plan skip_all => 'requires svnlook testing.'; plan tests => 4; use_ok('SVN::Hook'); use File::Temp 'tempdir'; use File::Path 'mkpath'; my ($xd, $svk) = build_test(); our $output; my ($repospath, $path, $repos) = $xd->find_repos ('//', 1); my $hook = SVN::Hook->new({repospath => $repospath}); $hook->init($_) for SVN::Hook->ALL_HOOKS; my $tmpdir = tempdir( CLEANUP => 1 ); SVN::Hook->_install_perl_hook($hook->hook_path('_pre-commit/partial'), <<'EOF'); use SVN::Hook::Redispatch { 'foo' => 'foo_scripts', 'foo/bar' => 'foobar_scripts', 'bar' => 'bar_scripts', }, @ARGV; exit 0; EOF SVN::Hook->_install_perl_hook($hook->hook_path('_pre-commit/00worky_log'), <<"EOF"); open my \$fh, '>>', "$tmpdir/worky"; print \$fh "this is worky \$ARGV[1]\\n"; EOF mkpath [$hook->hook_path('_pre-commit/foo_scripts')]; SVN::Hook->_install_perl_hook($hook->hook_path('_pre-commit/foo_scripts/00worky_log'), <<"EOF"); open my \$fh, '>>', "$tmpdir/worky"; print \$fh "this is foo worky \$ARGV[1]\\n"; EOF SVN::Hook->_install_perl_hook($hook->hook_path('_pre-commit/foo_scripts/die'), <<"EOF"); die "this is foo die"; EOF is_output($svk, 'mkdir', [-m => 'foo', '//foo'], [qr'Committed']); is_output($svk, 'mkdir', [-m => 'foo', '//foo/shouldtrigger'], [qr'A repository hook failed.*', qr'this is foo die', '']); is_file_content("$tmpdir/worky", 'this is worky 0-1 this is worky 1-1 this is foo worky 1-1 ');