#!/usr/bin/perl -w
use strict;
# XXX: apache::test seems to alter inc to use blib
require SVK::Command::Merge;
use POSIX qw(setlocale LC_CTYPE);
# XXX: apache::TestConfig assumes lib.pm is compiled.
require lib;
use SVK::Util qw(can_run uri_escape $EOL);
BEGIN {
use SVK::Test;
plan (skip_all => "Test does not run under root") if $> == 0;
eval { require Apache2 };
eval { require Apache::Test;
$Apache::Test::VERSION >= 1.18 }
or plan (skip_all => "Apache::Test 1.18 required for testing dav");
}
setlocale (LC_CTYPE, $ENV{LC_CTYPE} = 'en_US.UTF-8')
or plan skip_all => 'cannot set locale to en_US.UTF-8';
use Apache::TestConfig;
use File::Spec::Functions qw(rel2abs catdir catfile);
our $output;
my ($xd, $svk) = build_test('test');
my $depotpath = '/test/';
my $pool = SVN::Pool->new_default;
my ($depot, $path) = $xd->find_depotpath($depotpath);
{
local $/ = $EOL;
my $edit = get_editor ($depot->repospath, $path, $depot->repos);
$edit->open_root ();
$edit->add_directory ('/B and K');
$edit->add_directory ('/B and K/A');
$edit->add_directory ('/B and K/A/N P1');
$edit->add_directory ('/B and K/A/N P1/trunk');
$edit->add_directory ('/B and K/A/N P1/trunk/doc');
$edit->modify_file (
$edit->add_file ('/B and K/A/N P1/trunk/doc/ReadMe.txt'),
"first line in pe$/2nd line in pe$/");
$edit->add_directory ('/B and K/A/N P1/trunk/src');
$edit->add_directory ('/B and K/A/N P1/trunk/data');
$edit->modify_file (
$edit->add_file ('/B and K/A/N P1/trunk/data/N M/HOWTO.txt'),
"first line in pe$/2nd line in pe$/");
$edit->add_directory ('/B and K/A/N P1/branches');
$edit->add_directory ('/B and K/A/N P1/tags');
$edit->close_edit ();
}
my ($srepospath, $spath, $srepos) = $xd->find_repos ('/test/B and K', 1);
my (undef, undef, $repos) = $xd->find_repos ('//', 1);
my $apache_root = rel2abs (catdir ('t', 'apache_svn'));
my $apxs = $ENV{APXS} || can_run('apxs2') || can_run ('apxs');
plan skip_all => "Can't find apxs utility. Use APXS env to specify path" unless $apxs;
my $cfg = Apache::TestConfig->new
( top_dir => $apache_root,
t_dir => $apache_root,
apxs => $apxs,
)->httpd_config;
plan skip_all => "apache 2.2 changed auth directives."
if $cfg->server->{version} =~ m|Apache/2\.2|;
unless ($cfg->can('find_and_load_module') and
$cfg->find_and_load_module ('mod_dav.so') and
$cfg->find_and_load_module ('mod_dav_svn.so') and
$cfg->find_and_load_module ('mod_authz_svn.so')) {
plan skip_all => "Can't find mod_dav_svn and mod_authz_svn";
}
plan tests => 5;
$cfg->postamble (Location => "/svn",
qq{DAV svn\n SVNPath $depot->{repospath}\n});
$cfg->generate_httpd_conf;
my $server = $cfg->server;
$server->start;
ok ($server->ping, 'server is alive');
my $uri = 'http://'.$server->{name}.'/svn';
my $uri_trunk = $uri.'/B and K/A/N P1/trunk';
my $uri_trunk_escape = uri_escape($uri_trunk);
$svk->mirror('//mirror/BK', $uri_trunk);
is_output ($svk, 'mirror', ['--list'], [
"Path Source",
"============================================================",
"//mirror/BK $uri/B and K/A/N P1/trunk"]);
is_output ($svk, 'sync', ['//mirror/BK'], [
"Syncing $uri/B and K/A/N P1/trunk",
"Retrieving log information from 1 to 1",
"Committed revision 2 from revision 1."]);
$svk->copy ('-p', '-m', 'branch', '//mirror/BK', '//local/BK');
my ($copath, $corpath) = get_copath('uri-escape-dav-move');
my ($scopath, $scorpath) = get_copath('uri-escape-dav-move-source');
$svk->checkout ('//local/BK', $copath);
chdir($copath);
#ref => #28087 on rt.cpan.org
$svk->move("data/N M/HOWTO.txt", "data/N M/good.txt");
$svk->commit ('-m', 'commit on local branch');
$svk->sync ('//mirror/BK');
is_output ($svk, 'push', ['-C'],
['Auto-merging (0, 4) /local/BK to /mirror/BK (base /mirror/BK:2).',
'===> Auto-merging (0, 3) /local/BK to /mirror/BK (base /mirror/BK:2).',
'Empty merge.',
'===> Auto-merging (3, 4) /local/BK to /mirror/BK (base /mirror/BK:2).',
'A + data/N M/good.txt',
'D data/N M/HOWTO.txt',
qr'New merge ticket: .*:/local/BK:4']);
is_output ($svk, 'push', [''],
['Auto-merging (0, 4) /local/BK to /mirror/BK (base /mirror/BK:2).',
'===> Auto-merging (0, 3) /local/BK to /mirror/BK (base /mirror/BK:2).',
qr'Merging back to mirror source http://[^/]+/svn/B and K/A/N P1/trunk.',
'Empty merge.',
'===> Auto-merging (3, 4) /local/BK to /mirror/BK (base /mirror/BK:2).',
qr'Merging back to mirror source http://[^/]+/svn/B and K/A/N P1/trunk.',
'A + data/N M/good.txt',
'D data/N M/HOWTO.txt',
qr'New merge ticket: .*:/local/BK:4',
'Merge back committed as revision 2.',
qr'Syncing http://[^/]+/svn/B and K/A/N P1/trunk',
'Retrieving log information from 2 to 2',
'Committed revision 5 from revision 2.']);