From fcaf3191e8bcde6e1be25a4c06915b116eb81e74 Mon Sep 17 00:00:00 2001 From: Dmitry Zhuravlev Date: Wed, 12 Jun 2019 20:23:48 +0300 Subject: [PATCH] vcs-ignore: check ignored but not excluded directories only on full ignore holders rescan This will avoid the proposal of some directories which was created inside already ignored dirs GitOrigin-RevId: 263c4adc232e2ae0bc4612fb11220d7cb663bc1e --- .../dvcs/ignore/VcsIgnoredHolderUpdateListener.java | 2 +- .../intellij/dvcs/ignore/IgnoredToExcludedSynchronizer.kt | 3 ++- .../dvcs/ignore/VcsRepositoryIgnoredFilesHolderBase.kt | 8 ++++---- plugins/git4idea/src/git4idea/repo/GitRepositoryImpl.java | 2 +- .../src/org/zmlx/hg4idea/repo/HgRepositoryImpl.java | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/platform/dvcs-api/src/com/intellij/dvcs/ignore/VcsIgnoredHolderUpdateListener.java b/platform/dvcs-api/src/com/intellij/dvcs/ignore/VcsIgnoredHolderUpdateListener.java index 2a3b900c5376..858193a3c9e2 100644 --- a/platform/dvcs-api/src/com/intellij/dvcs/ignore/VcsIgnoredHolderUpdateListener.java +++ b/platform/dvcs-api/src/com/intellij/dvcs/ignore/VcsIgnoredHolderUpdateListener.java @@ -11,6 +11,6 @@ public interface VcsIgnoredHolderUpdateListener extends EventListener { default void updateStarted() {} - default void updateFinished(@NotNull Collection ignoredPaths) {} + default void updateFinished(@NotNull Collection ignoredPaths, boolean isFullRescan) {} } 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 5384a63a5252..e5b36949da5f 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/ignore/IgnoredToExcludedSynchronizer.kt +++ b/platform/dvcs-impl/src/com/intellij/dvcs/ignore/IgnoredToExcludedSynchronizer.kt @@ -90,8 +90,9 @@ class IgnoredToExcludedSynchronizer(project: Project, parentDisposable: Disposab override fun needDoForCurrentProject() = VcsConfiguration.getInstance(project).MARK_IGNORED_AS_EXCLUDED - override fun updateFinished(ignoredPaths: Collection) { + override fun updateFinished(ignoredPaths: Collection, isFullRescan: Boolean) { ProgressManager.checkCanceled() + if (!isFullRescan) return if (!Registry.`is`("vcs.propose.add.ignored.directories.to.exclude", true)) return if (!VcsConfiguration.getInstance(project).MARK_IGNORED_AS_EXCLUDED && wasAskedBefore()) return diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/ignore/VcsRepositoryIgnoredFilesHolderBase.kt b/platform/dvcs-impl/src/com/intellij/dvcs/ignore/VcsRepositoryIgnoredFilesHolderBase.kt index bceb632520a1..f624ccc1e362 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/ignore/VcsRepositoryIgnoredFilesHolderBase.kt +++ b/platform/dvcs-impl/src/com/intellij/dvcs/ignore/VcsRepositoryIgnoredFilesHolderBase.kt @@ -156,7 +156,7 @@ abstract class VcsRepositoryIgnoredFilesHolderBase( fireUpdateStarted() val ignored = action() inUpdateMode.set(false) - fireUpdateFinished(ignored) + fireUpdateFinished(ignored, isFullRescan) doAfterRescan?.run() } }) @@ -197,8 +197,8 @@ abstract class VcsRepositoryIgnoredFilesHolderBase( listeners.multicaster.updateStarted() } - private fun fireUpdateFinished(paths: Collection) { - listeners.multicaster.updateFinished(paths) + private fun fireUpdateFinished(paths: Collection, isFullRescan: Boolean) { + listeners.multicaster.updateFinished(paths, isFullRescan) } private fun isUnder(parents: Set, child: VirtualFile) = generateSequence(child) { it.parent }.any { it in parents } @@ -213,7 +213,7 @@ abstract class VcsRepositoryIgnoredFilesHolderBase( addUpdateStateListener(this) } - override fun updateFinished(ignoredPaths: Collection) = awaitLatch.countDown() + override fun updateFinished(ignoredPaths: Collection, isFullRescan: Boolean) = awaitLatch.countDown() fun waitFor() { awaitLatch.await() diff --git a/plugins/git4idea/src/git4idea/repo/GitRepositoryImpl.java b/plugins/git4idea/src/git4idea/repo/GitRepositoryImpl.java index 08b445469085..74c02e52477a 100644 --- a/plugins/git4idea/src/git4idea/repo/GitRepositoryImpl.java +++ b/plugins/git4idea/src/git4idea/repo/GitRepositoryImpl.java @@ -308,7 +308,7 @@ public class GitRepositoryImpl extends RepositoryImpl implements GitRepository { } @Override - public void updateFinished(@NotNull Collection ignoredPaths) { + public void updateFinished(@NotNull Collection ignoredPaths, boolean isFullRescan) { if(myProject.isDisposed()) return; myChangesViewI.scheduleRefresh(); diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/repo/HgRepositoryImpl.java b/plugins/hg4idea/src/org/zmlx/hg4idea/repo/HgRepositoryImpl.java index 094b72c11002..3c7b1e6ee2ef 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/repo/HgRepositoryImpl.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/repo/HgRepositoryImpl.java @@ -269,7 +269,7 @@ public class HgRepositoryImpl extends RepositoryImpl implements HgRepository { } @Override - public void updateFinished(@NotNull Collection ignoredPaths) { + public void updateFinished(@NotNull Collection ignoredPaths, boolean isFullRescan) { if(myProject.isDisposed()) return; myChangesViewI.scheduleRefresh();