diff options
author | Michael Valenta | 2004-12-04 03:49:27 +0000 |
---|---|---|
committer | Michael Valenta | 2004-12-04 03:49:27 +0000 |
commit | 34227771a369a26b60f8e35c75e812e1d4f7f89b (patch) | |
tree | f3337ce7175648296b9722eb5dfcb923b75960b7 | |
parent | 168839af46219ead13295a7f3cb7e5ef575f31a3 (diff) | |
download | eclipse.platform.team-branch_20041202_Caching.tar.gz eclipse.platform.team-branch_20041202_Caching.tar.xz eclipse.platform.team-branch_20041202_Caching.zip |
*** empty log message ***branch_20041202_Caching
9 files changed, 49 insertions, 11 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/CacheableReference.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/CacheableReference.java index a07409d69..09bf952f6 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/CacheableReference.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/CacheableReference.java @@ -64,6 +64,12 @@ public class CacheableReference implements ICacheableReference { // Let ALWAYS_FETCH override DO_NOT_FETCH_IF_ABSENT return null; } + if ((flags & ONLY_LOAD_REPLICA_IF_ABSENT) > 0 && !source.isLocalReplica()) { + // The source is not a local replica so don't load + return null; + } + + // TODO: should serialize fetch to ensure it doesn't happen concurrently Object o = fetchObject(flags, Policy.monitorFor(monitor)); setCachedObject(o); return o; diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheSource.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheSource.java index f0bac9911..4e2227789 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheSource.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheSource.java @@ -35,4 +35,10 @@ public interface ICacheSource { * @return a cachable object representing the data at he source location */ Object fetch(int flags, IProgressMonitor monitor) throws CoreException; + + /** + * Return whether the cache source is a local replica of a remote source. + * @return whether the cache source is a local replica of a remote source + */ + boolean isLocalReplica(); } diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheableReference.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheableReference.java index 9b7911d5c..524f2c0f6 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheableReference.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/ICacheableReference.java @@ -38,6 +38,12 @@ public interface ICacheableReference { public static final int ALWAYS_FETCH = 2; /** + * Flag indicating that the object should be loaded + * from a local replica if present. + */ + public static final int ONLY_LOAD_REPLICA_IF_ABSENT = 4; + + /** * This contant provides the beginning flag that can be used by clients * to provide custom flags for fetching objects. */ diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/LocalReplica.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/LocalReplica.java index fcb69379a..17d213190 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/LocalReplica.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/caches/LocalReplica.java @@ -67,10 +67,10 @@ public abstract class LocalReplica implements ICacheSource { throw (RuntimeException)e; } // Impossible but handle anyway. - TeamPlugin.log(IStatus.WARNING, "Could no load local replica.", e); //$NON-NLS-1$ + TeamPlugin.log(IStatus.WARNING, "Could not load local replica.", e); //$NON-NLS-1$ return null; } - TeamPlugin.log(IStatus.WARNING, "Could no load local replica. Fetching from the remote source.", e); //$NON-NLS-1$ + TeamPlugin.log(IStatus.WARNING, "Could not load local replica. Fetching from the remote source.", e); //$NON-NLS-1$ return fetchRemote(flags, monitor); } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/LocalTagCache.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/LocalTagCache.java index 10f0d3f56..8f778c04e 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/LocalTagCache.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/LocalTagCache.java @@ -97,4 +97,11 @@ public class LocalTagCache extends XMLLocalReplica { public void dispose() { getFile().delete(); } + + /* (non-Javadoc) + * @see org.eclipse.team.internal.core.caches.ICacheSource#isLocalReplica() + */ + public boolean isLocalReplica() { + return true; + } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesViewContentHandler.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesViewContentHandler.java index 0f845e9a3..1073156d8 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesViewContentHandler.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoriesViewContentHandler.java @@ -97,8 +97,10 @@ public class RepositoriesViewContentHandler extends DefaultHandler { ignoreElements = false; } else if (elementName.equals(MODULE_TAG)) { if (! ignoreElements && currentRepositoryRoot != null) { - currentRepositoryRoot.addTags(currentRemotePath, - (CVSTag[]) tags.toArray(new CVSTag[tags.size()])); + if (!tags.isEmpty()) { + currentRepositoryRoot.addTags(currentRemotePath, + (CVSTag[]) tags.toArray(new CVSTag[tags.size()])); + } if (lastAccessTime > 0) currentRepositoryRoot.setLastAccessedTime(currentRemotePath, lastAccessTime); currentRepositoryRoot.setAutoRefreshFiles(currentRemotePath, diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java index c1b0e64f0..70e549e0a 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RepositoryRoot.java @@ -56,7 +56,7 @@ public class RepositoryRoot extends PlatformObject { String fileName; public TagCacheEntry(RepositoryRoot repo, String remotePath) { this.repo = repo; - this.cache = new CacheableReference(createTagCacheSource(remotePath));; + this.cache = new CacheableReference(createTagCacheSource(remotePath)); accessed(); } public boolean isExpired() { @@ -129,7 +129,7 @@ public class RepositoryRoot extends PlatformObject { } private CVSTag[] getTags() { try { - return (CVSTag[])getReference().getObject(ICacheableReference.DO_NOT_FETCH_IF_ABSENT, null); + return (CVSTag[])getReference().getObject(ICacheableReference.ONLY_LOAD_REPLICA_IF_ABSENT, null); } catch (CoreException e) { CVSUIPlugin.log(e); } catch (ClassCastException e) { @@ -145,7 +145,7 @@ public class RepositoryRoot extends PlatformObject { HashMap attributes = new HashMap(); attributes.put(RepositoriesViewContentHandler.PATH_ATTRIBUTE, fileName); attributes.put(RepositoriesViewContentHandler.LAST_ACCESS_TIME_ATTRIBUTE, Long.toString(lastAccessTime)); - writer.startTag(RepositoriesViewContentHandler.TAG_REPLICA_TAG, attributes, true); + writer.startAndEndTag(RepositoriesViewContentHandler.TAG_REPLICA_TAG, attributes, true); } } @@ -634,7 +634,7 @@ public class RepositoryRoot extends PlatformObject { entry.accessed(); CVSTag[] tags1; try { - tags1 = (CVSTag[]) entry.getReference().getObject(ICacheableReference.DO_NOT_FETCH_IF_ABSENT, null); + tags1 = (CVSTag[]) entry.getReference().getObject(ICacheableReference.ONLY_LOAD_REPLICA_IF_ABSENT, null); } catch (CoreException e) { // Log and continue CVSUIPlugin.log(e); diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/TagCacheSource.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/TagCacheSource.java index 29024fc1c..848ed9840 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/TagCacheSource.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/TagCacheSource.java @@ -73,4 +73,11 @@ public class TagCacheSource implements ICacheSource { public String getRemotePath() { return remoteFolderPath; } + + /* (non-Javadoc) + * @see org.eclipse.team.internal.core.caches.ICacheSource#isLocalReplica() + */ + public boolean isLocalReplica() { + return false; + } } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/XMLLocalReplica.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/XMLLocalReplica.java index e2b36d591..e132d86d1 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/XMLLocalReplica.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/XMLLocalReplica.java @@ -40,13 +40,17 @@ public abstract class XMLLocalReplica extends LocalReplica { XMLMemento memento = XMLMemento.createWriteRoot(getType()); save(o, memento, monitor); Writer writer = null; + File file = getFile(); + File parentDir = file.getParentFile(); + if (!parentDir.exists()) + parentDir.mkdirs(); try { - writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(getFile()))); + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); memento.save(writer); } catch (FileNotFoundException e) { - throw new TeamException("Could not create file " + getFile().getAbsolutePath(), e); + throw new TeamException("Could not create file " + file.getAbsolutePath(), e); } catch (IOException e) { - throw new TeamException("Could not write to file " + getFile().getAbsolutePath(), e); + throw new TeamException("Could not write to file " + file.getAbsolutePath(), e); } finally { if (writer != null) { try { |