package org.tmatesoft.svn.core.internal.wc2.old;
import java.io.File;
import java.util.Date;
import org.tmatesoft.svn.core.SVNErrorCode;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.wc.SVNErrorManager;
import org.tmatesoft.svn.core.internal.wc16.SVNLogClient16;
import org.tmatesoft.svn.core.wc.ISVNAnnotateHandler;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc2.SvnAnnotate;
import org.tmatesoft.svn.core.wc2.SvnAnnotateItem;
import org.tmatesoft.svn.util.SVNLogType;
public class SvnOldAnnotate extends SvnOldRunner<SvnAnnotateItem, SvnAnnotate> implements ISVNAnnotateHandler {
@Override
protected SvnAnnotateItem run() throws SVNException {
if (getOperation().getEndRevision() == SVNRevision.UNDEFINED) {
getOperation().setEndRevision(SVNRevision.BASE);
}
if (getOperation().getStartRevision() == null || !getOperation().getStartRevision().isValid()) {
getOperation().setStartRevision(SVNRevision.create(1));
}
if (getOperation().getEndRevision() == null || !getOperation().getEndRevision().isValid()) {
getOperation().setEndRevision(getOperation().getFirstTarget().getResolvedPegRevision());
}
if (getOperation().getStartRevision() == SVNRevision.WORKING || getOperation().getEndRevision() == SVNRevision.WORKING) {
SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.UNSUPPORTED_FEATURE, "Blame of the WORKING revision is not supported");
SVNErrorManager.error(err, SVNLogType.WC);
}
SVNLogClient16 client = new SVNLogClient16(getOperation().getRepositoryPool(), getOperation().getOptions());
client.setDiffOptions(getOperation().getDiffOptions());
client.setEventHandler(getOperation().getEventHandler());
if (getOperation().hasRemoteTargets()) {
client.doAnnotate(getOperation().getFirstTarget().getURL(), getOperation().getFirstTarget().getResolvedPegRevision(),
getOperation().getStartRevision(), getOperation().getEndRevision(), getOperation().isIgnoreMimeType(),
getOperation().isUseMergeHistory(), this, getOperation().getInputEncoding());
}
else {
client.doAnnotate(getOperation().getFirstTarget().getFile(), getOperation().getFirstTarget().getResolvedPegRevision(),
getOperation().getStartRevision(), getOperation().getEndRevision(), getOperation().isIgnoreMimeType(),
getOperation().isUseMergeHistory(), this, getOperation().getInputEncoding());
}
return getOperation().first();
}
public void handleLine(Date date, long revision, String author, String line, Date mergedDate,
long mergedRevision, String mergedAuthor, String mergedPath, int lineNumber) throws SVNException {
getOperation().receive(getOperation().getFirstTarget(),
new SvnAnnotateItem(date, revision, author, line, mergedDate, mergedRevision, mergedAuthor, mergedPath, lineNumber)
);
}
public boolean handleRevision(Date date, long revision, String author, File contents) throws SVNException{
SvnAnnotateItem item = new SvnAnnotateItem(date, revision, author, contents);
getOperation().receive(getOperation().getFirstTarget(), item);
return item.getReturnResult();
}
public void handleLine(Date date, long revision, String author, String line) throws SVNException {
}
public void handleEOF() {
try {
getOperation().receive(getOperation().getFirstTarget(), new SvnAnnotateItem(true));
} catch (SVNException e) {
}
}
}