1#!/usr/bin/perl
2use Test::More;
3use SVN::Mirror;
4use File::Path;
5use File::Spec;
6use URI::file;
7use strict;
8
9plan skip_all => "can't find svnadmin"
10    unless `svnadmin --version` =~ /version/;
11
12plan tests => 15;
13my $repospath = "t/repos";
14
15rmtree ([$repospath]) if -d $repospath;
16$ENV{SVNFSTYPE} ||= (($SVN::Core::VERSION =~ /^1\.0/) ? 'bdb' : 'fsfs');
17
18my $repos = SVN::Repos::create($repospath, undef, undef, undef,
19			       {'fs-type' => $ENV{SVNFSTYPE}})
20    or die "failed to create repository at $repospath";
21
22my $uri = URI::file->new_abs( $repospath ) ;
23
24`svn mkdir -m 'init' $uri/source`;
25`svnadmin load --parent-dir source $repospath < t/test_repo.dump`;
26
27my $m = SVN::Mirror->new(target_path => '/fullcopy', repos => $repos,
28			 source => "$uri/source");
29is (ref $m, 'SVN::Mirror::Ra');
30$m->init ();
31
32$m = SVN::Mirror->new (target_path => '/fullcopy', repos => $repos,
33		       get_source => 1,);
34
35is ($m->{source}, "$uri/source");
36$m->init ();
37$m->run ();
38
39my @mirrored = SVN::Mirror::list_mirror ($repos);
40is_deeply ([sort @mirrored], ['/fullcopy'],
41	   'list mirror');
42is ((SVN::Mirror::is_mirrored ($repos, '/fullcopy'))[1], '',
43    'is_mirrored anchor');
44is ((SVN::Mirror::is_mirrored ($repos, '/fullcopy/svnperl_002'))[1], '/svnperl_002',
45    'is_mirrored descendent');
46is_deeply ([SVN::Mirror::is_mirrored ($repos, '/nah')], [],
47	  'is_mirrored none');
48
49my $fs = $repos->fs;
50my $uuid = $fs->get_uuid;
51my $root = $fs->revision_root ($fs->youngest_rev);
52
53is ((SVN::Mirror::has_local ($repos, "$uuid:/source/svnperl/t"))[1], '/svnperl/t',
54    'has_local descendent');
55is ((SVN::Mirror::has_local ($repos, "$uuid:/source"))[1], '',
56    'has_local anchor');
57is_deeply ([SVN::Mirror::has_local ($repos, "$uuid:/source-non")], [],
58	   'has_local none');
59
60
61$m = SVN::Mirror::has_local ($repos, "$uuid:/source");
62is ($m->find_local_rev (28), 58, 'find_local_rev');
63is (scalar $m->find_remote_rev (58), 28, 'find_remote_rev');
64is_deeply ({$m->find_remote_rev (58)}, {$m->{source_uuid} => 28}, 'find_remote_rev - hash');
65
66$m->delete;
67
68@mirrored = SVN::Mirror::list_mirror ($repos);
69is_deeply (\@mirrored, [], 'discard mirror');
70
71$m = SVN::Mirror->new(target_path => '/partial', repos => $repos,
72		      source => "$uri/source/svnperl_002");
73$m->init ();
74$m->run ();
75
76ok(1);
77@mirrored = SVN::Mirror::list_mirror ($repos);
78is_deeply ([sort @mirrored], ['/partial'],
79	   'list mirror');
80
81