lst: ensure that target changelist exists when updating base revision

EA-115966 - assert: ChangeListWorker.getDataByIdVerify
This commit is contained in:
Aleksey Pivovarov
2018-02-19 20:26:20 +03:00
parent 2a8e7d1594
commit d660da119f
3 changed files with 21 additions and 8 deletions
@@ -184,7 +184,7 @@ class DocumentTracker : Disposable {
}
}
private fun updateFrozenContentIfNeeded() {
fun updateFrozenContentIfNeeded() {
// ensure blocks are up to date
updateFrozenContentIfNeeded(Side.LEFT)
updateFrozenContentIfNeeded(Side.RIGHT)
@@ -94,6 +94,11 @@ abstract class LineStatusTrackerBase<R : Range> {
@CalledInAwt
fun setBaseRevision(vcsContent: CharSequence) {
setBaseRevision(vcsContent, null)
}
@CalledInAwt
protected fun setBaseRevision(vcsContent: CharSequence, beforeUnfreeze: (() -> Unit)?) {
application.assertIsDispatchThread()
if (isReleased) return
@@ -101,6 +106,8 @@ abstract class LineStatusTrackerBase<R : Range> {
updateDocument(Side.LEFT) {
vcsDocument.setText(vcsContent)
}
beforeUnfreeze?.invoke()
}
if (!isInitialized) {
@@ -144,15 +144,21 @@ class PartialLocalLineStatusTracker(project: Project,
@CalledInAwt
fun setBaseRevision(vcsContent: CharSequence, changelistId: String?) {
currentMarker = if (changelistId != null) ChangeListMarker(changelistId) else null
try {
setBaseRevision(vcsContent)
dropExistingUndoActions()
}
finally {
currentMarker = null
setBaseRevision(vcsContent) {
if (changelistId != null) {
changeListManager.executeUnderDataLock {
if (changeListManager.getChangeList(changelistId) != null) {
documentTracker.writeLock {
currentMarker = ChangeListMarker(changelistId)
documentTracker.updateFrozenContentIfNeeded()
currentMarker = null
}
}
}
}
}
dropExistingUndoActions()
if (isValid()) eventDispatcher.multicaster.onBecomingValid(this)
}