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