package org.tmatesoft.svn.test;
import org.junit.Assert;
import org.junit.Test;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import org.tmatesoft.svn.core.replicator.SVNRepositoryReplicator;
import org.tmatesoft.svn.core.wc2.SvnOperationFactory;
import java.util.Collection;
import java.util.Iterator;
public class ReplicateTest {
@Test
public void testReplacedNodeInHistory() throws Exception {
//SVNKIT-271
final TestOptions options = TestOptions.getInstance();
final SvnOperationFactory svnOperationFactory = new SvnOperationFactory();
final Sandbox sandbox = Sandbox.createWithCleanup(getTestName() + ".testReplacedNodeInHistory", options);
try {
final SVNURL sourceUrl = sandbox.createSvnRepository();
final SVNURL targetUrl = sandbox.createSvnRepository();
final CommitBuilder commitBuilder1 = new CommitBuilder(sourceUrl);
commitBuilder1.addFile("file");
commitBuilder1.addFile("anotherFile");
commitBuilder1.addDirectory("directory");
commitBuilder1.addFile("anotherDirectory");
commitBuilder1.commit();
final CommitBuilder commitBuilder2 = new CommitBuilder(sourceUrl);
commitBuilder2.delete("file");
commitBuilder2.replaceFileByCopying("file", "anotherFile");
commitBuilder2.replaceDirectoryByCopying("directory", "anotherDirectory");
commitBuilder2.commit();
final SVNRepository sourceRepository = SVNRepositoryFactory.create(sourceUrl);
final SVNRepository targetRepository = SVNRepositoryFactory.create(targetUrl);
try {
final SVNRepositoryReplicator replicator = SVNRepositoryReplicator.newInstance();
replicator.replicateRepository(sourceRepository, targetRepository, true);
assertHaveSameHistory(sourceRepository, targetRepository);
} finally {
sourceRepository.closeSession();
targetRepository.closeSession();
}
} finally {
svnOperationFactory.dispose();
sandbox.dispose();
}
}
private void assertHaveSameHistory(SVNRepository sourceRepository, SVNRepository targetRepository) throws SVNException {
final long sourceLatestRevision = sourceRepository.getLatestRevision();
final long targetLatestRevision = targetRepository.getLatestRevision();
Assert.assertEquals(sourceLatestRevision, targetLatestRevision);
final Collection sourceLogEntries = sourceRepository.log(new String[]{""}, null, 0, sourceLatestRevision, true, true);
final Collection targetLogEntries = targetRepository.log(new String[]{""}, null, 0, targetLatestRevision, true, true);
Assert.assertEquals(sourceLogEntries.size(), targetLogEntries.size());
final Iterator sourceIterator = sourceLogEntries.iterator();
final Iterator targetIterator = targetLogEntries.iterator();
for (int i = 0; i < sourceLogEntries.size(); i++) {
Assert.assertEquals(sourceIterator.hasNext(), targetIterator.hasNext());
final SVNLogEntry sourceLogEntry = (SVNLogEntry) sourceIterator.next();
final SVNLogEntry targetLogEntry = (SVNLogEntry) targetIterator.next();
if (sourceLogEntry == null) {
Assert.assertNull(targetLogEntry);
} else {
Assert.assertTrue(sourceLogEntry.equals(targetLogEntry));
}
}
}
private String getTestName() {
return "ReplicateTest";
}
}