From 07fa429a94188595b13ffed384b735b72a673f01 Mon Sep 17 00:00:00 2001 From: irengrig Date: Thu, 6 Dec 2012 18:38:54 +0400 Subject: [PATCH] fix IDEA-96501 Exception at opening project [^kirill.l] --- .../svn/annotate/SvnAnnotationProvider.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/annotate/SvnAnnotationProvider.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/annotate/SvnAnnotationProvider.java index a104087e10f3..53582d00fc69 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/annotate/SvnAnnotationProvider.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/annotate/SvnAnnotationProvider.java @@ -54,23 +54,26 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn } public FileAnnotation annotate(final VirtualFile file) throws VcsException { - final VcsRevisionDescription currentRevision = ((SvnDiffProvider) myVcs.getDiffProvider()).getCurrentRevisionDescription(file); - if (currentRevision == null) { + final SvnDiffProvider provider = (SvnDiffProvider)myVcs.getDiffProvider(); + final SVNRevision currentRevision = ((SvnRevisionNumber)provider.getCurrentRevision(file)).getRevision(); + final VcsRevisionDescription lastChangedRevision = provider.getCurrentRevisionDescription(file); + if (lastChangedRevision == null) { throw new VcsException("Can not get current revision for file " + file.getPath()); } - final SvnRevisionNumber lastChangedRevision = (SvnRevisionNumber)currentRevision.getRevisionNumber(); - if (! lastChangedRevision.getRevision().isValid()) { + final SVNRevision svnRevision = ((SvnRevisionNumber)lastChangedRevision.getRevisionNumber()).getRevision(); + if (! svnRevision.isValid()) { throw new VcsException("Can not get last changed revision for file: " + file.getPath() + "\nPlease run svn info for this file and file an issue."); } - final SVNRevision svnRevision = lastChangedRevision.getRevision(); - return annotate(file, new SvnFileRevision(myVcs, svnRevision, svnRevision, null, null, null, null, null, file.getCharset()), true); + return annotate(file, new SvnFileRevision(myVcs, currentRevision, currentRevision, null, null, null, null, null, file.getCharset()), + lastChangedRevision.getRevisionNumber(), true); } public FileAnnotation annotate(final VirtualFile file, final VcsFileRevision revision) throws VcsException { - return annotate(file, revision, false); + return annotate(file, revision, revision.getRevisionNumber(), false); } - private FileAnnotation annotate(final VirtualFile file, final VcsFileRevision revision, final boolean loadExternally) throws VcsException { + private FileAnnotation annotate(final VirtualFile file, final VcsFileRevision revision, final VcsRevisionNumber lastChangedRevision, + final boolean loadExternally) throws VcsException { if (file.isDirectory()) { throw new VcsException(SvnBundle.message("exception.text.cannot.annotate.directory")); } @@ -94,7 +97,7 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn contents = LoadTextUtil.getTextByBinaryPresentation(bytes, file, false).toString(); } - final SvnFileAnnotation result = new SvnFileAnnotation(myVcs, file, contents, revision.getRevisionNumber()); + final SvnFileAnnotation result = new SvnFileAnnotation(myVcs, file, contents, lastChangedRevision); SVNWCClient wcClient = myVcs.createWCClient(); info = wcClient.doInfo(ioFile, SVNRevision.UNDEFINED); @@ -229,7 +232,8 @@ public class SvnAnnotationProvider implements AnnotationProvider, VcsCacheableAn charset == null ? CharsetToolkit.UTF8_CHARSET : charset).toString(); SVNLogClient client = myVcs.createLogClient(); setLogClientOptions(client); - final SvnRemoteFileAnnotation result = new SvnRemoteFileAnnotation(myVcs, contents, revision.getRevisionNumber(), pair.getFirst(), pair.getSecond().getPath(), current); + final SvnRemoteFileAnnotation result = new SvnRemoteFileAnnotation(myVcs, contents, revision.getRevisionNumber(), pair.getFirst(), + pair.getSecond().getPath(), current); final ISVNAnnotateHandler annotateHandler = createAnnotationHandler(ProgressManager.getInstance().getProgressIndicator(), result); final boolean calculateMergeinfo = SvnConfiguration.getInstance(myVcs.getProject()).SHOW_MERGE_SOURCES_IN_ANNOTATE &&