import com.intellij.diff.DiffContentFactoryImpl
import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.components.service
+import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.editor.Document
import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.text.StringUtil
+import com.intellij.openapi.vcs.VcsException
import com.intellij.openapi.vcs.ex.LocalLineStatusTracker
import com.intellij.openapi.vcs.impl.LineStatusTrackerContentLoader
import com.intellij.openapi.vcs.impl.LineStatusTrackerContentLoader.ContentInfo
import java.nio.charset.Charset
class GitStageLineStatusTrackerProvider : LineStatusTrackerContentLoader {
+ private val LOG = Logger.getInstance(GitStageLineStatusTrackerProvider::class.java)
+
override fun isMyTracker(tracker: LocalLineStatusTracker<*>): Boolean = tracker is GitStageLineStatusTracker
override fun isTrackedFile(project: Project, file: VirtualFile): Boolean {
val indexFile = indexFileCache.get(repository.root, status.path(ContentVersion.STAGED))
val indexDocument = runReadAction { FileDocumentManager.getInstance().getDocument(indexFile) } ?: return null
- val bytes = GitFileUtils.getFileContent(project, repository.root, GitUtil.HEAD,
- VcsFileUtil.relativePath(repository.root, status.path(ContentVersion.HEAD)))
- val charset: Charset = DiffContentFactoryImpl.guessCharset(project, bytes, filePath)
- val headContent = CharsetToolkit.decodeString(bytes, charset)
- val correctedText = StringUtil.convertLineSeparators(headContent)
-
- return StagedTrackerContent(correctedText, indexDocument)
+ try {
+ val bytes = GitFileUtils.getFileContent(project, repository.root, GitUtil.HEAD,
+ VcsFileUtil.relativePath(repository.root, status.path(ContentVersion.HEAD)))
+ val charset: Charset = DiffContentFactoryImpl.guessCharset(project, bytes, filePath)
+ val headContent = CharsetToolkit.decodeString(bytes, charset)
+ val correctedText = StringUtil.convertLineSeparators(headContent)
+
+ return StagedTrackerContent(correctedText, indexDocument)
+ } catch (e : VcsException) {
+ LOG.warn("Can't load base revision content for ${file.path} with status $status", e)
+ return null
+ }
}
override fun setLoadedContent(tracker: LocalLineStatusTracker<*>, content: TrackerContent) {