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 d54be655ece6..34e3d4c9a523 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/ignore/VcsRepositoryIgnoredFilesHolderBase.kt +++ b/platform/dvcs-impl/src/com/intellij/dvcs/ignore/VcsRepositoryIgnoredFilesHolderBase.kt @@ -16,6 +16,7 @@ import com.intellij.openapi.vfs.newvfs.events.* import com.intellij.util.EventDispatcher import com.intellij.util.ui.update.ComparableObject import com.intellij.util.ui.update.Update +import com.intellij.vcsUtil.VcsFileUtilKt.isUnder import com.intellij.vcsUtil.VcsUtil import com.intellij.vfs.AsyncVfsEventsListener import com.intellij.vfs.AsyncVfsEventsPostProcessor @@ -61,7 +62,7 @@ abstract class VcsRepositoryIgnoredFilesHolderBase( override fun getIgnoredFilePaths(): Set = SET_LOCK.read { ignoredSet.toHashSet() } override fun containsFile(file: FilePath) = - SET_LOCK.read { isUnder(ignoredSet, file) } + SET_LOCK.read { isUnder(repositoryRootPath, ignoredSet, file) } override fun getSize() = SET_LOCK.read { ignoredSet.size } @@ -140,7 +141,7 @@ abstract class VcsRepositoryIgnoredFilesHolderBase( val ignored = SET_LOCK.read { ignoredSet.toHashSet() } for (filePath in ignored) { - if (isUnder(filePathsSet, filePath)) { + if (isUnder(repositoryRootPath, filePathsSet, filePath)) { removedIgnoredFilePaths.add(filePath) } } @@ -197,7 +198,7 @@ abstract class VcsRepositoryIgnoredFilesHolderBase( private fun addNotContainedIgnores(ignored: Collection) = SET_LOCK.write { ignored.forEach { ignored -> - if (!isUnder(ignoredSet, ignored)) { + if (!isUnder(repositoryRootPath, ignoredSet, ignored)) { ignoredSet.add(ignored) } } @@ -224,9 +225,6 @@ abstract class VcsRepositoryIgnoredFilesHolderBase( listeners.multicaster.updateFinished(paths, isFullRescan) } - private fun isUnder(parents: Set, child: FilePath) = - generateSequence(child) { if (repositoryRootPath == it) null else it.parentPath }.any { it in parents } - @TestOnly inner class Waiter : VcsIgnoredHolderUpdateListener { diff --git a/platform/vcs-impl/src/com/intellij/vcsUtil/VcsFileUtil.kt b/platform/vcs-impl/src/com/intellij/vcsUtil/VcsFileUtil.kt new file mode 100644 index 000000000000..26cf662908f0 --- /dev/null +++ b/platform/vcs-impl/src/com/intellij/vcsUtil/VcsFileUtil.kt @@ -0,0 +1,10 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.vcsUtil + +import com.intellij.openapi.vcs.FilePath + +object VcsFileUtilKt { + @JvmStatic + fun isUnder(repositoryRootPath: FilePath, parents: Set, child: FilePath) = + generateSequence(child) { if (repositoryRootPath == it) null else it.parentPath }.any { it in parents } +} \ No newline at end of file diff --git a/plugins/git4idea/src/git4idea/repo/GitUntrackedFilesHolder.java b/plugins/git4idea/src/git4idea/repo/GitUntrackedFilesHolder.java index 4d02ecd9559e..c3d741b089c5 100644 --- a/plugins/git4idea/src/git4idea/repo/GitUntrackedFilesHolder.java +++ b/plugins/git4idea/src/git4idea/repo/GitUntrackedFilesHolder.java @@ -37,6 +37,7 @@ import org.jetbrains.annotations.Nullable; import java.util.*; import static com.intellij.dvcs.ignore.VcsRepositoryIgnoredFilesHolderBase.getAffectedFilePaths; +import static com.intellij.vcsUtil.VcsFileUtilKt.isUnder; /** *