Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Baumgart2011-02-09 14:07:32 +0000
committerJens Baumgart2011-02-09 14:07:32 +0000
commit32af98c85000e6f71c4112805ddcfed4ac804d9a (patch)
treebd9f4de746378e42ff41c7ea6f32d6f0b415e628
parent0b71c1ab1cf65b06342dc266c8d6749133671a42 (diff)
downloadegit-32af98c85000e6f71c4112805ddcfed4ac804d9a.tar.gz
egit-32af98c85000e6f71c4112805ddcfed4ac804d9a.tar.xz
egit-32af98c85000e6f71c4112805ddcfed4ac804d9a.zip
Cache DirCache instance in DecoratableResourceHelper
DirCache instances are reused in DecoratableResourceAdapter and DecoratableResourceHelper to improve decoration performance. Depends on jgit change http://egit.eclipse.org/r/2467 Change-Id: I222c5880167c99dee1c3a5c018fb329688720472 Signed-off-by: Jens Baumgart <jens.baumgart@sap.com> Signed-off-by: Philipp Thun <philipp.thun@sap.com>
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java3
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceHelper.java18
2 files changed, 19 insertions, 2 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java
index 3424c23348..5eddaf7b67 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceAdapter.java
@@ -349,10 +349,11 @@ class DecoratableResourceAdapter extends DecoratableResource {
treeWalk.addTree(new EmptyTreeIterator());
// Index
- treeWalk.addTree(new DirCacheIterator(repository.readDirCache()));
+ treeWalk.addTree(new DirCacheIterator(DecoratableResourceHelper.getDirCache(repository)));
// Working directory
treeWalk.addTree(IteratorService.createInitialIterator(repository));
return treeWalk;
}
+
}
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceHelper.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceHelper.java
index 22b7734188..816def25e3 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceHelper.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/decorators/DecoratableResourceHelper.java
@@ -10,6 +10,8 @@ package org.eclipse.egit.ui.internal.decorators;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Map;
+import java.util.WeakHashMap;
import org.eclipse.core.resources.IResource;
import org.eclipse.egit.core.ContainerTreeIterator;
@@ -17,6 +19,7 @@ import org.eclipse.egit.core.ContainerTreeIterator.ResourceEntry;
import org.eclipse.egit.core.IteratorService;
import org.eclipse.egit.core.project.RepositoryMapping;
import org.eclipse.egit.ui.internal.decorators.IDecoratableResource.Staged;
+import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.lib.Constants;
@@ -42,6 +45,8 @@ class DecoratableResourceHelper {
static final int T_WORKSPACE = 2;
+ private static final Map<Repository, DirCache> repoToDirCache = new WeakHashMap<Repository, DirCache>();
+
static IDecoratableResource[] createDecoratableResources(
final IResource[] resources) throws IOException {
// Use first (available) resource to get repository mapping
@@ -112,6 +117,17 @@ class DecoratableResourceHelper {
return decoratableResources;
}
+ static DirCache getDirCache(Repository repository) throws IOException {
+ synchronized(repoToDirCache) {
+ DirCache dirCache = repoToDirCache.get(repository);
+ if (dirCache != null && !dirCache.isOutdated())
+ return dirCache;
+ dirCache = repository.readDirCache();
+ repoToDirCache.put(repository, dirCache);
+ return dirCache;
+ }
+ }
+
private static TreeWalk createThreeWayTreeWalk(
final RepositoryMapping mapping,
final ArrayList<String> resourcePaths) throws IOException {
@@ -136,7 +152,7 @@ class DecoratableResourceHelper {
treeWalk.addTree(new EmptyTreeIterator());
// Index
- treeWalk.addTree(new DirCacheIterator(repository.readDirCache()));
+ treeWalk.addTree(new DirCacheIterator(getDirCache(repository)));
// Working directory
treeWalk.addTree(IteratorService.createInitialIterator(repository));

Back to the top