diff --git a/platform/dvcs-impl/BUILD.bazel b/platform/dvcs-impl/BUILD.bazel
index 318de0605b6b..099b0fac298f 100644
--- a/platform/dvcs-impl/BUILD.bazel
+++ b/platform/dvcs-impl/BUILD.bazel
@@ -34,6 +34,7 @@ jvm_library(
"//platform/dvcs-api:vcs-dvcs",
"@lib//:miglayout-swing",
"@lib//:stream_ex",
+ "//platform/util/jdom",
"//platform/util:util-ui",
"//platform/core-ui",
"//platform/diff-impl",
@@ -81,6 +82,7 @@ jvm_library(
"//platform/vcs-tests:vcs-testFramework",
"@lib//:miglayout-swing",
"@lib//:stream_ex",
+ "//platform/util/jdom",
"//platform/util:util-ui",
"//platform/core-ui",
"//platform/diff-impl",
diff --git a/platform/dvcs-impl/intellij.platform.vcs.dvcs.impl.iml b/platform/dvcs-impl/intellij.platform.vcs.dvcs.impl.iml
index 21bed64c8d73..c73bbe97335e 100644
--- a/platform/dvcs-impl/intellij.platform.vcs.dvcs.impl.iml
+++ b/platform/dvcs-impl/intellij.platform.vcs.dvcs.impl.iml
@@ -33,6 +33,7 @@
+
diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/ignore/IgnoredToExcludedSynchronizer.kt b/platform/dvcs-impl/src/com/intellij/dvcs/ignore/IgnoredToExcludedSynchronizer.kt
index b0678ecc9baf..0ab6192fdae4 100644
--- a/platform/dvcs-impl/src/com/intellij/dvcs/ignore/IgnoredToExcludedSynchronizer.kt
+++ b/platform/dvcs-impl/src/com/intellij/dvcs/ignore/IgnoredToExcludedSynchronizer.kt
@@ -33,7 +33,8 @@ import com.intellij.openapi.vcs.VcsConfiguration
import com.intellij.openapi.vcs.VcsNotificationIdsHolder.Companion.IGNORED_TO_EXCLUDE_NOT_FOUND
import com.intellij.openapi.vcs.VcsNotifier
import com.intellij.openapi.vcs.changes.ChangeListManager
-import com.intellij.openapi.vcs.changes.VcsIgnoreManagerImpl
+import com.intellij.openapi.vcs.changes.ChangeListManagerImpl
+import com.intellij.openapi.vcs.changes.VcsManagedFilesHolder
import com.intellij.openapi.vcs.changes.ignore.lang.IgnoreFileType
import com.intellij.openapi.vcs.changes.shelf.ShelveChangesManager
import com.intellij.openapi.vcs.changes.ui.SelectFilesDialog
@@ -47,9 +48,11 @@ import com.intellij.ui.EditorNotificationPanel
import com.intellij.ui.EditorNotificationProvider
import com.intellij.ui.EditorNotifications
import com.intellij.util.Alarm
+import com.intellij.util.messages.impl.subscribeAsFlow
import com.intellij.util.ui.update.MergingUpdateQueue
import com.intellij.util.ui.update.Update
import kotlinx.coroutines.*
+import kotlinx.coroutines.flow.first
import kotlinx.coroutines.sync.Mutex
import org.jetbrains.annotations.ApiStatus
import java.util.*
@@ -178,7 +181,7 @@ class IgnoredToExcludedSynchronizer(project: Project, private val cs: CoroutineS
try {
val dirsToExclude = withModalProgress(project, ActionsBundle.message("action.CheckIgnoredAndNotExcludedDirectories.progress")) {
- VcsIgnoreManagerImpl.getInstanceImpl(project).awaitRefreshQueue()
+ awaitIgnoredFilesUpdate(project)
val ignoredFilePaths = ChangeListManager.getInstance(project).ignoredFilePaths
determineIgnoredDirsToExclude(project, ignoredFilePaths)
}
@@ -228,6 +231,20 @@ private fun containsShelfDirectoryOrUnderIt(filePath: FilePath, shelfPath: Strin
FileUtil.isAncestor(shelfPath, filePath.path, false) ||
FileUtil.isAncestor(filePath.path, shelfPath, false)
+private suspend fun awaitIgnoredFilesUpdate(project: Project) {
+ withContext(Dispatchers.Default) {
+ project.messageBus.subscribeAsFlow(VcsManagedFilesHolder.TOPIC) {
+ send(Unit)
+ VcsManagedFilesHolder.VcsManagedFilesHolderListener {
+ trySend(Unit)
+ }
+ }.first {
+ val clm = ChangeListManagerImpl.getInstanceImpl(project)
+ !clm.isIgnoredInUpdateMode
+ }
+ }
+}
+
private fun determineIgnoredDirsToExclude(project: Project, ignoredPaths: Collection): List {
val sourceRoots = getProjectSourceRoots(project)
val fileIndex = ProjectFileIndex.getInstance(project)
diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/VcsIgnoreManagerImpl.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/VcsIgnoreManagerImpl.kt
index e2dabbca9094..2b61efcb6156 100644
--- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/VcsIgnoreManagerImpl.kt
+++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/VcsIgnoreManagerImpl.kt
@@ -11,7 +11,6 @@ import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.runBlockingCancellable
-import com.intellij.openapi.progress.util.ProgressIndicatorUtils
import com.intellij.openapi.project.InitialVfsRefreshService
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.ProjectCloseListener
@@ -31,7 +30,6 @@ import com.intellij.vcsUtil.VcsUtil
import kotlinx.coroutines.CoroutineScope
import org.jetbrains.annotations.ApiStatus.Internal
import java.io.IOException
-import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import kotlin.io.path.invariantSeparatorsPathString
@@ -88,14 +86,6 @@ class VcsIgnoreManagerImpl(private val project: Project, coroutineScope: Corouti
}
}
- fun awaitRefreshQueue() {
- assert(!ApplicationManager.getApplication().isReadAccessAllowed)
- if (ignoreRefreshQueue.isEmpty) return
- val waiter = CountDownLatch(1)
- ignoreRefreshQueue.queue(Update.create(waiter) { waiter.countDown() })
- ProgressIndicatorUtils.awaitWithCheckCanceled(waiter)
- }
-
fun findIgnoreFileType(vcs: AbstractVcs): IgnoreFileType? {
val ignoredFileContentProvider = findIgnoredFileContentProvider(vcs) ?: return null
return FileTypeManager.getInstance().getFileTypeByFileName(ignoredFileContentProvider.fileName) as? IgnoreFileType