The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use Test::More;
use SVK::Test;
use SVK::Mirror;
use SVK::Mirror::Backend::SVNRa;
plan tests => 11;

my ($xd, $svk) = build_test('test');
my ($copath, $corpath) = get_copath ('api-mirror');

our $output;

my $tree = create_basic_tree ($xd, '/test/');
my $depot = $xd->find_depot('');
my $repos = $depot->repos;
my $sdepot = $xd->find_depot('test');
my $srepos = $sdepot->repos;
my $uri = uri($sdepot->repospath);

my $m = SVK::Mirror->create(
        { depot => $depot, path => '/m', backend => 'SVNRa',
	  url => "$uri/A", pool => SVN::Pool->new } );

is_output($svk, 'pg', ['svm:source', '//m'],
	  [uri($sdepot->repospath).'!/A']);

is_output($svk, 'pg', ['svm:uuid', '//m'],
	  [$srepos->fs->get_uuid]);

is_output($svk, 'pg', ['svm:mirror', '//'],
	  ['/m', '' ]);

$m = SVK::Mirror->load(
        { depot => $depot, path => '/m',
	  pool => SVN::Pool->new }
    );

is( $m->url, "$uri/A" );

$m = SVK::Mirror->create(
    {   depot   => $depot,
        path    => '/m2',
        backend => 'SVNRa',
        url     => "$uri/B",
        pool    => SVN::Pool->new
    }
);

is_output($svk, 'pg', ['svm:source', '//m2'],
	  [uri($sdepot->repospath).'!/B']);

is_output($svk, 'pg', ['svm:uuid', '//m2'],
	  [$srepos->fs->get_uuid]);

is_output($svk, 'pg', ['svm:mirror', '//'],
	  ['/m', '/m2', '']);

eval {
SVK::Mirror::Backend::SVNRa->create(
    SVK::Mirror->new(
        { depot => $depot, path => '/m3',
	  url => $uri, pool => SVN::Pool->new }
    )
);
};

is($@, "Mirroring overlapping paths not supported\n");

is_output($svk, 'ls', ['//'], ['m/', 'm2/'], 'm3 not created');

my $mc = SVK::MirrorCatalog->new( { repos => $repos, depot => $depot } );
is_deeply([ sort $mc->entries], ['/m', '/m2']);

$m = SVK::Mirror->load(
        { depot => $depot, path => '/m',
	  pool => SVN::Pool->new }
    );

{
    my @revs;
    $m->traverse_new_changesets(sub { push @revs, $_[0] });
    is_deeply(\@revs, [1,2]);
}

$m->run();
#$m->mirror_changesets();
# XXX: check committed revisions