From d5a33c06054b93521913ac7c8e1e26b7cdf8fcea Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 18 Jan 2018 20:20:34 +0300 Subject: [PATCH] lst: do not override explicit block moves on Undo --- .../openapi/vcs/ex/PartialLocalLineStatusTracker.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt index 7ce9dbcd5e43..363f65ed489e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/PartialLocalLineStatusTracker.kt @@ -75,6 +75,7 @@ class PartialLocalLineStatusTracker(project: Project, private var isFreezedByBackgroundTask: Boolean = false private var hasUndoInCommand: Boolean = false + private var undoModificationStamp: Int = 0 init { defaultMarker = ChangeListMarker(changeListManager.defaultChangeList) @@ -202,6 +203,7 @@ class PartialLocalLineStatusTracker(project: Project, } } + undoModificationStamp++ updateAffectedChangeLists(false) // no need to notify CLM, as we're inside it's action for (block in affectedBlocks) { @@ -234,7 +236,7 @@ class PartialLocalLineStatusTracker(project: Project, val undoState = documentTracker.readLock { blocks.map { RangeState(it.range, it.marker.changelistId) } } - undoManager.undoableActionPerformed(MyUndoableAction(project, document, undoState, undo)) + undoManager.undoableActionPerformed(MyUndoableAction(project, document, undoModificationStamp, undoState, undo)) } private inner class MyBackgroundVfsOperationListener : BackgroundVfsOperationListener { @@ -465,6 +467,7 @@ class PartialLocalLineStatusTracker(project: Project, } } + undoModificationStamp++ updateAffectedChangeLists() } @@ -531,6 +534,7 @@ class PartialLocalLineStatusTracker(project: Project, private class MyUndoableAction( project: Project, document: Document, + val undoModificationStamp: Int, val states: List, val undo: Boolean ) : BasicUndoableAction(document) { @@ -549,7 +553,8 @@ class PartialLocalLineStatusTracker(project: Project, val project = projectRef.get() if (document != null && project != null) { val tracker = LineStatusTrackerManager.getInstance(project).getLineStatusTracker(document) - if (tracker is PartialLocalLineStatusTracker) { + if (tracker is PartialLocalLineStatusTracker && + tracker.undoModificationStamp == undoModificationStamp) { tracker.restoreState(states) } }