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 46187a0423c1..8bafea109bd8 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 @@ -165,6 +165,8 @@ class PartialLocalLineStatusTracker(project: Project, } } + updateAffectedChangeLists() + dropExistingUndoActions() if (isValid()) eventDispatcher.multicaster.onBecomingValid(this) } diff --git a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/LineStatusTrackerManagerTest.kt b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/LineStatusTrackerManagerTest.kt index 3de9176784c3..ba2fe3807815 100644 --- a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/LineStatusTrackerManagerTest.kt +++ b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/LineStatusTrackerManagerTest.kt @@ -230,7 +230,7 @@ class LineStatusTrackerManagerTest : BaseLineStatusTrackerManagerTest() { } } - fun `test tracker changes moves - before initialisation`() { + fun `test tracker before initialisation - no changed lines in vcs, local changes reverted`() { createChangelist("Test") val file = addLocalFile(FILE_1, "a_b_c_d_e") @@ -258,7 +258,7 @@ class LineStatusTrackerManagerTest : BaseLineStatusTrackerManagerTest() { } } - fun `test tracker changes moves - before initialisation 2`() { + fun `test tracker before initialisation - typing`() { createChangelist("Test") val file = addLocalFile(FILE_1, "a_b_c_d_e") @@ -282,4 +282,54 @@ class LineStatusTrackerManagerTest : BaseLineStatusTrackerManagerTest() { tracker.assertAffectedChangeLists("Default", "Test") } } + + fun `test tracker before initialisation - no changed lines in vcs`() { + createChangelist("Test") + + val file = addLocalFile(FILE_1, "a_b_c_d_e") + setBaseVersion(FILE_1, "a_b_c_d_e") + refreshCLM() + file.moveAllChangesTo("Test") + + file.withOpenedEditor { + val tracker = file.tracker as PartialLocalLineStatusTracker + + tracker.assertAffectedChangeLists("Test") + + runCommand { tracker.document.replaceString(0, 1, "a2") } + tracker.assertAffectedChangeLists("Default", "Test") + + assertFalse(tracker.isOperational()) + assertNull(tracker.getRanges()) + + lstm.waitUntilBaseContentsLoaded() + assertEquals(1, tracker.getRanges()!!.size) + tracker.assertAffectedChangeLists("Default") + } + } + + fun `test tracker before initialisation - old local changes reverted`() { + createChangelist("Test") + + val file = addLocalFile(FILE_1, "a2_b_c_d_e") + setBaseVersion(FILE_1, "a_b_c_d_e") + refreshCLM() + file.moveAllChangesTo("Test") + + file.withOpenedEditor { + val tracker = file.tracker as PartialLocalLineStatusTracker + + tracker.assertAffectedChangeLists("Test") + + runCommand { tracker.document.replaceString(0, 2, "a") } + tracker.assertAffectedChangeLists("Default", "Test") + + assertFalse(tracker.isOperational()) + assertNull(tracker.getRanges()) + + lstm.waitUntilBaseContentsLoaded() + assertEquals(0, tracker.getRanges()!!.size) + tracker.assertAffectedChangeLists("Default") + } + } } \ No newline at end of file