Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2005-04-06 20:32:37 +0000
committerMichael Valenta2005-04-06 20:32:37 +0000
commit5b732678f6ef0279f1b91105da62f9d9ae84f9d8 (patch)
tree9d3d86812900ef8fa34dc95dd33579011af00016
parentd3e91ab4077fa966e5f850f5750289860c13e636 (diff)
downloadeclipse.platform.team-5b732678f6ef0279f1b91105da62f9d9ae84f9d8.tar.gz
eclipse.platform.team-5b732678f6ef0279f1b91105da62f9d9ae84f9d8.tar.xz
eclipse.platform.team-5b732678f6ef0279f1b91105da62f9d9ae84f9d8.zip
Bug 72304 [Core Performance] Add to .cvsignore does not scale well
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java31
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/SessionPropertySyncInfoCache.java4
2 files changed, 34 insertions, 1 deletions
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
index 62a0295c9..0e3e19c54 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/EclipseSynchronizer.java
@@ -628,8 +628,37 @@ public class EclipseSynchronizer implements IFlushOperation {
rule = beginBatching(container, null);
try {
beginOperation();
+
+ // Record the previous ignore pattterns
+ FileNameMatcher oldIgnores = null;
+ if (sessionPropertyCache.isFolderSyncInfoCached(container)) {
+ oldIgnores = cacheFolderIgnores(container);
+ }
+
+ // Purge the cached state for direct children of the container
changed.addAll(Arrays.asList(
- sessionPropertyCache.purgeCache(container, false /*don't flush children*/)));
+ sessionPropertyCache.purgeCache(container, oldIgnores == null /*flush deeply if the old patterns are not known*/)));
+
+ // Purge the state for any children of previously ignored containers
+ if (oldIgnores != null) {
+ FileNameMatcher newIgnores = cacheFolderIgnores(container);
+ try {
+ IResource[] members = container.members();
+ for (int j = 0; j < members.length; j++) {
+ IResource resource = members[j];
+ if (resource.getType() == IResource.FOLDER) {
+ String name = resource.getName();
+ if (oldIgnores.match(name) && !newIgnores.match(name)) {
+ changed.addAll(Arrays.asList(
+ sessionPropertyCache.purgeCache((IContainer)resource, true /*flush deeply*/)));
+ }
+ }
+ }
+ } catch (CoreException e) {
+ // Just log and continue
+ CVSProviderPlugin.log(e);
+ }
+ }
} finally {
endOperation();
}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/SessionPropertySyncInfoCache.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/SessionPropertySyncInfoCache.java
index e23c79925..7b2821677 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/SessionPropertySyncInfoCache.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/resources/SessionPropertySyncInfoCache.java
@@ -77,6 +77,10 @@ import org.eclipse.team.internal.ccvs.core.util.SyncFileWriter;
}
return matcher;
}
+
+ /* package */ boolean isIgnoresCached(IContainer container) throws CVSException {
+ return safeGetSessionProperty(container, IGNORE_SYNC_KEY) != null;
+ }
/*package*/ boolean isFolderSyncInfoCached(IContainer container) throws CVSException {
Object info = safeGetSessionProperty(container, FOLDER_SYNC_KEY);

Back to the top