| package org.jetbrains.idea.svn.annotate; |
| |
| import com.intellij.openapi.vcs.VcsException; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.idea.svn.api.BaseSvnClient; |
| import org.jetbrains.idea.svn.checkin.CommitInfo; |
| import org.jetbrains.idea.svn.diff.DiffOptions; |
| import org.tmatesoft.svn.core.SVNException; |
| import org.tmatesoft.svn.core.wc.ISVNAnnotateHandler; |
| import org.tmatesoft.svn.core.wc.SVNLogClient; |
| import org.tmatesoft.svn.core.wc.SVNRevision; |
| import org.tmatesoft.svn.core.wc2.SvnTarget; |
| |
| import java.io.File; |
| import java.util.Date; |
| |
| /** |
| * @author Konstantin Kolosovsky. |
| */ |
| public class SvnKitAnnotateClient extends BaseSvnClient implements AnnotateClient { |
| |
| @Override |
| public void annotate(@NotNull SvnTarget target, |
| @NotNull SVNRevision startRevision, |
| @NotNull SVNRevision endRevision, |
| @Nullable SVNRevision pegRevision, |
| boolean includeMergedRevisions, |
| @Nullable DiffOptions diffOptions, |
| @Nullable AnnotationConsumer handler) throws VcsException { |
| try { |
| SVNLogClient client = myVcs.getSvnKitManager().createLogClient(); |
| |
| client.setDiffOptions(toDiffOptions(diffOptions)); |
| if (target.isFile()) { |
| client |
| .doAnnotate(target.getFile(), pegRevision, startRevision, endRevision, true, includeMergedRevisions, toAnnotateHandler(handler), |
| null); |
| } |
| else { |
| client |
| .doAnnotate(target.getURL(), pegRevision, startRevision, endRevision, true, includeMergedRevisions, toAnnotateHandler(handler), |
| null); |
| } |
| } |
| catch (SVNException e) { |
| throw new VcsException(e); |
| } |
| } |
| |
| @Nullable |
| private static ISVNAnnotateHandler toAnnotateHandler(@Nullable final AnnotationConsumer handler) { |
| ISVNAnnotateHandler result = null; |
| |
| if (handler != null) { |
| result = new ISVNAnnotateHandler() { |
| @Override |
| public void handleLine(Date date, long revision, String author, String line) throws SVNException { |
| // deprecated - not called |
| } |
| |
| @Override |
| public void handleLine(Date date, |
| long revision, |
| String author, |
| String line, |
| Date mergedDate, |
| long mergedRevision, |
| String mergedAuthor, |
| String mergedPath, |
| int lineNumber) throws SVNException { |
| if (revision > 0) { |
| CommitInfo info = new CommitInfo.Builder(revision, date, author).build(); |
| CommitInfo mergeInfo = mergedDate != null ? new CommitInfo.Builder(mergedRevision, mergedDate, mergedAuthor).build() : null; |
| |
| handler.consume(lineNumber, info, mergeInfo); |
| } |
| } |
| |
| @Override |
| public boolean handleRevision(Date date, long revision, String author, File contents) throws SVNException { |
| return false; |
| } |
| |
| @Override |
| public void handleEOF() throws SVNException { |
| } |
| }; |
| } |
| |
| return result; |
| } |
| } |