summaryrefslogtreecommitdiff
path: root/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/IgnoredFilesComponent.java
diff options
context:
space:
mode:
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.java46
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;