package org.tmatesoft.svn.core.internal.wc2.old;
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNLogEntry;
import org.tmatesoft.svn.core.internal.wc16.SVNDiffClient16;
import org.tmatesoft.svn.core.internal.wc2.SvnWcGeneration;
import org.tmatesoft.svn.core.wc2.SvnLogMergeInfo;
import org.tmatesoft.svn.core.wc2.SvnOperationFactory;
import org.tmatesoft.svn.core.wc2.SvnTarget;
public class SvnOldLogMergeInfo extends SvnOldRunner<SVNLogEntry, SvnLogMergeInfo> implements ISVNLogEntryHandler {
@Override
public boolean isApplicable(SvnLogMergeInfo operation, SvnWcGeneration wcGeneration) throws SVNException {
if (operation.getSource().isFile()) {
if (SvnOperationFactory.detectWcGeneration(operation.getSource().getFile(), true) != SvnWcGeneration.V16) {
return false;
}
}
if (operation.getFirstTarget().isFile()) {
if (SvnOperationFactory.detectWcGeneration(operation.getFirstTarget().getFile(), true) != SvnWcGeneration.V16) {
return false;
}
}
return true;
}
@Override
protected SVNLogEntry run() throws SVNException {
SVNDiffClient16 diffClient = new SVNDiffClient16(getOperation().getAuthenticationManager(), getOperation().getOptions());
diffClient.setEventHandler(getOperation().getEventHandler());
SvnTarget target = getOperation().getFirstTarget();
SvnTarget mergeSource = getOperation().getSource();
boolean eligible = !getOperation().isFindMerged();
if (target.isURL() && mergeSource.isURL()) {
if (eligible) {
diffClient.doGetLogEligibleMergeInfo(
target.getURL(),
target.getPegRevision(),
mergeSource.getURL(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
} else {
diffClient.doGetLogMergedMergeInfo(
target.getURL(),
target.getPegRevision(),
mergeSource.getURL(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
}
} else if (target.isURL() && mergeSource.isFile()) {
if (eligible) {
diffClient.doGetLogEligibleMergeInfo(
target.getURL(),
target.getPegRevision(),
mergeSource.getFile(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
} else {
diffClient.doGetLogMergedMergeInfo(
target.getURL(),
target.getPegRevision(),
mergeSource.getFile(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
}
} else if (target.isFile() && mergeSource.isFile()) {
if (eligible) {
diffClient.doGetLogEligibleMergeInfo(
target.getFile(),
target.getPegRevision(),
mergeSource.getFile(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
} else {
diffClient.doGetLogMergedMergeInfo(
target.getFile(),
target.getPegRevision(),
mergeSource.getFile(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
}
} else if (target.isFile() && mergeSource.isURL()) {
if (eligible) {
diffClient.doGetLogEligibleMergeInfo(
target.getFile(),
target.getPegRevision(),
mergeSource.getURL(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
} else {
diffClient.doGetLogMergedMergeInfo(
target.getFile(),
target.getPegRevision(),
mergeSource.getURL(),
mergeSource.getPegRevision(),
getOperation().isDiscoverChangedPaths(),
getOperation().getRevisionProperties(),
this);
}
}
return getOperation().first();
}
public void handleLogEntry(SVNLogEntry logEntry) throws SVNException {
getOperation().receive(getOperation().getSource(), logEntry);
}
}