From f1e420a925c0689e8fb691bc7124346d94885fda Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Wed, 14 Feb 2018 16:46:08 +0300 Subject: [PATCH] lst: unify partial commit methods --- .../vcs/ex/PartialLocalLineStatusTracker.kt | 18 +++++++++++++----- .../vcs/BaseLineStatusTrackerTestCase.kt | 4 ++++ .../vcs/PartialLineStatusTrackerTest.kt | 10 +++++----- .../checkin/GitCheckinEnvironment.java | 4 ++-- 4 files changed, 24 insertions(+), 12 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 c2054261b57d..d6ce43b3ebb0 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 @@ -369,18 +369,26 @@ class PartialLocalLineStatusTracker(project: Project, } + fun hasPartialChangesToCommit(): Boolean { + return documentTracker.readLock { + affectedChangeLists.size > 1 + } + } + fun getPartiallyAppliedContent(side: Side, changelistIds: List): String { return runReadAction { val markers = changelistIds.mapTo(HashSet()) { ChangeListMarker(it) } - documentTracker.getContentWithPartiallyAppliedBlocks(side) { markers.contains(it.marker) } + val toCommitCondition: (Block) -> Boolean = { markers.contains(it.marker) } + documentTracker.getContentWithPartiallyAppliedBlocks(side, toCommitCondition) } } @CalledInAwt - fun handlePartialCommit(side: Side, changelistId: String): PartialCommitHelper { - val marker = ChangeListMarker(changelistId) + fun handlePartialCommit(side: Side, changelistIds: List): PartialCommitHelper { + val markers = changelistIds.mapTo(HashSet()) { ChangeListMarker(it) } + val toCommitCondition: (Block) -> Boolean = { markers.contains(it.marker) } - val contentToCommit = documentTracker.getContentWithPartiallyAppliedBlocks(side) { it.marker == marker } + val contentToCommit = documentTracker.getContentWithPartiallyAppliedBlocks(side, toCommitCondition) return object : PartialCommitHelper(contentToCommit) { override fun applyChanges() { @@ -388,7 +396,7 @@ class PartialLocalLineStatusTracker(project: Project, val success = updateDocument(side) { doc -> documentTracker.doFrozen(side) { - documentTracker.partiallyApplyBlocks(side, { it.marker == marker }, { _, _ -> }) + documentTracker.partiallyApplyBlocks(side, toCommitCondition, { _, _ -> }) doc.setText(contentToCommit) } diff --git a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/BaseLineStatusTrackerTestCase.kt b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/BaseLineStatusTrackerTestCase.kt index b844a18d53c6..64f3c1aabea8 100644 --- a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/BaseLineStatusTrackerTestCase.kt +++ b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/BaseLineStatusTrackerTestCase.kt @@ -422,6 +422,10 @@ abstract class BaseLineStatusTrackerTestCase : LightPlatformTestCase() { } + fun handlePartialCommit(side: Side, list: String): PartialLocalLineStatusTracker.PartialCommitHelper { + return partialTracker.handlePartialCommit(side, listOf(list.toListId())) + } + fun moveChanges(fromList: String, toList: String) { assertContainsElements(changeListNames(), fromList) assertContainsElements(changeListNames(), toList) diff --git a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/PartialLineStatusTrackerTest.kt b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/PartialLineStatusTrackerTest.kt index db7ecce60618..881e7750e56a 100644 --- a/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/PartialLineStatusTrackerTest.kt +++ b/platform/vcs-tests/testSrc/com/intellij/openapi/vcs/PartialLineStatusTrackerTest.kt @@ -205,7 +205,7 @@ class PartialLineStatusTrackerTest : BaseLineStatusTrackerTestCase() { assertBaseTextContentIs("A_B_C_D_E_F_G_H_") assertAffectedChangelists("Default", "Test") - val helper = partialTracker.handlePartialCommit(Side.LEFT, "Test".toListId()) + val helper = handlePartialCommit(Side.LEFT, "Test") helper.applyChanges() assertHelperContentIs("A_B_C_E_F_G_N_H_", helper) @@ -228,7 +228,7 @@ class PartialLineStatusTrackerTest : BaseLineStatusTrackerTestCase() { assertBaseTextContentIs("A_B_C_D_E_F_G_H_") assertAffectedChangelists("Default", "Test") - val helper = partialTracker.handlePartialCommit(Side.LEFT, "Default".toListId()) + val helper = handlePartialCommit(Side.LEFT, "Default") helper.applyChanges() assertHelperContentIs("A_B1_C_D_E_F_M_G_H_", helper) @@ -251,7 +251,7 @@ class PartialLineStatusTrackerTest : BaseLineStatusTrackerTestCase() { assertBaseTextContentIs("A_B_C_D_E_F_G_H_") assertAffectedChangelists("Default", "Test") - val helper = partialTracker.handlePartialCommit(Side.RIGHT, "Test".toListId()) + val helper = handlePartialCommit(Side.RIGHT, "Test") helper.applyChanges() assertHelperContentIs("A_B1_C_D_E_F_M_G_H_", helper) @@ -278,7 +278,7 @@ class PartialLineStatusTrackerTest : BaseLineStatusTrackerTestCase() { runCommand { "B1_".replace("X_Y_Z_") - val helper = partialTracker.handlePartialCommit(Side.LEFT, "Default".toListId()) + val helper = handlePartialCommit(Side.LEFT, "Default") helper.applyChanges() assertHelperContentIs("A_X_Y_Z_C_D_E_F_M_G_H_", helper) @@ -307,7 +307,7 @@ class PartialLineStatusTrackerTest : BaseLineStatusTrackerTestCase() { runCommand { "B1_".replace("X_Y_Z_") - val helper = partialTracker.handlePartialCommit(Side.LEFT, "Default".toListId()) + val helper = handlePartialCommit(Side.LEFT, "Default") "N".replace("N2") "M".replace("M2") diff --git a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java index 2b06c71a61d0..71620d2b7be7 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java +++ b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java @@ -388,8 +388,8 @@ public class GitCheckinEnvironment implements CheckinEnvironment { return null; // commit failure } - if (tracker.getAffectedChangeListsIds().size() > 1) { - helpers.add(tracker.handlePartialCommit(Side.LEFT, changelistId)); + if (tracker.hasPartialChangesToCommit()) { + helpers.add(tracker.handlePartialCommit(Side.LEFT, Collections.singletonList(changelistId))); partialChanges.add(change); } }