diff options
Diffstat (limited to 'platform/vcs-impl/src/com/intellij/openapi/vcs/changes/IgnoredFilesComponent.java')
-rw-r--r-- | platform/vcs-impl/src/com/intellij/openapi/vcs/changes/IgnoredFilesComponent.java | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/IgnoredFilesComponent.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/IgnoredFilesComponent.java index 5c8ac2a6b623..b2eaa1f2e6e3 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/IgnoredFilesComponent.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/IgnoredFilesComponent.java @@ -16,6 +16,7 @@ package com.intellij.openapi.vcs.changes; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.newvfs.BulkFileListener; @@ -27,6 +28,7 @@ import java.util.*; public class IgnoredFilesComponent { private final Set<IgnoredFileBean> myFilesToIgnore; private final Map<String, IgnoredFileBean> myFilesMap; + private final Set<String> myDirectoriesManuallyRemovedFromIgnored; public IgnoredFilesComponent(final Project project, final boolean registerListener) { myFilesToIgnore = new LinkedHashSet<IgnoredFileBean>(); @@ -40,20 +42,53 @@ public class IgnoredFilesComponent { } }); } + myDirectoriesManuallyRemovedFromIgnored = new HashSet<String>(); } public IgnoredFilesComponent(final IgnoredFilesComponent other) { myFilesToIgnore = new LinkedHashSet<IgnoredFileBean>(other.myFilesToIgnore); myFilesMap = new HashMap<String, IgnoredFileBean>(other.myFilesMap); + myDirectoriesManuallyRemovedFromIgnored = new HashSet<String>(other.myDirectoriesManuallyRemovedFromIgnored); } public void add(final IgnoredFileBean... filesToIgnore) { - synchronized(myFilesToIgnore) { + synchronized (myFilesToIgnore) { Collections.addAll(myFilesToIgnore, filesToIgnore); addIgnoredFiles(filesToIgnore); } } + public Set<String> getDirectoriesManuallyRemovedFromIgnored() { + return Collections.unmodifiableSet(myDirectoriesManuallyRemovedFromIgnored); + } + + public void setDirectoriesManuallyRemovedFromIgnored(Set<String> directories) { + myDirectoriesManuallyRemovedFromIgnored.clear(); + myDirectoriesManuallyRemovedFromIgnored.addAll(directories); + } + + public void addIgnoredDirectoryImplicitly(@NotNull String path, @NotNull Project project) { + synchronized (myFilesToIgnore) { + if (myDirectoriesManuallyRemovedFromIgnored.contains(path) || myDirectoriesManuallyRemovedFromIgnored.contains(path + "/")) { + return; + } + for (IgnoredFileBean bean : myFilesToIgnore) { + if (bean.getType() == IgnoreSettingsType.UNDER_DIR && FileUtil.isAncestor(bean.getPath(), path, false)) { + return; + } + } + List<IgnoredFileBean> toRemove = new ArrayList<IgnoredFileBean>(); + for (IgnoredFileBean bean : myFilesToIgnore) { + if ((bean.getType() == IgnoreSettingsType.UNDER_DIR || bean.getType() == IgnoreSettingsType.FILE) && + FileUtil.isAncestor(path, bean.getPath(), false)) { + toRemove.add(bean); + } + } + myFilesToIgnore.removeAll(toRemove); + myFilesToIgnore.add(IgnoredBeanFactory.ignoreUnderDirectory(path, project)); + } + } + private void addIgnoredFiles(final IgnoredFileBean... filesToIgnore) { for (IgnoredFileBean bean : filesToIgnore) { if (IgnoreSettingsType.FILE.equals(bean.getType())) { @@ -73,6 +108,7 @@ public class IgnoredFilesComponent { myFilesMap.clear(); } } + public boolean isEmpty() { synchronized (myFilesToIgnore) { return myFilesToIgnore.isEmpty(); @@ -80,7 +116,7 @@ public class IgnoredFilesComponent { } public void set(final IgnoredFileBean... filesToIgnore) { - synchronized(myFilesToIgnore) { + synchronized (myFilesToIgnore) { myFilesToIgnore.clear(); Collections.addAll(myFilesToIgnore, filesToIgnore); myFilesMap.clear(); @@ -89,7 +125,7 @@ public class IgnoredFilesComponent { } public IgnoredFileBean[] getFilesToIgnore() { - synchronized(myFilesToIgnore) { + synchronized (myFilesToIgnore) { return myFilesToIgnore.toArray(new IgnoredFileBean[myFilesToIgnore.size()]); } } @@ -103,14 +139,14 @@ public class IgnoredFilesComponent { } public boolean isIgnoredFile(@NotNull VirtualFile file) { - synchronized(myFilesToIgnore) { + synchronized (myFilesToIgnore) { if (myFilesToIgnore.size() == 0) return false; final String path = FilePathsHelper.convertPath(file); final IgnoredFileBean fileBean = myFilesMap.get(path); if (fileBean != null && fileBean.matchesFile(file)) return true; - for(IgnoredFileBean bean: myFilesToIgnore) { + for (IgnoredFileBean bean : myFilesToIgnore) { if (bean.matchesFile(file)) return true; } return false; |