From ea187f2f3f3e337b4e3c97e8f31f70a05e234672 Mon Sep 17 00:00:00 2001 From: Brad Larson Date: Thu, 10 May 2012 14:33:59 -0500 Subject: [PATCH] Add ProjectCache.remove() We need a way to remove data from the project cache so that plugins can do things such as delete projects. Signed-off-by: Brad Larson Change-Id: I37e2ca53614ccb8a06480f7a0a6d9a6884b0c3b5 --- .../google/gerrit/server/project/ProjectCache.java | 6 ++++++ .../gerrit/server/project/ProjectCacheImpl.java | 14 ++++++++++++++ .../gerrit/server/project/RefControlTest.java | 4 ++++ 3 files changed, 24 insertions(+) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java index 70f40132d5..7a11131168 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCache.java @@ -32,6 +32,12 @@ public interface ProjectCache { /** Invalidate the cached information about the given project. */ public void evict(Project p); + /** + * Remove information about the given project from the cache. It will no + * longer be returned from {@link #all()}. + */ + void remove(Project p); + /** @return sorted iteration of projects. */ public abstract Iterable all(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java index 51d8fb2f60..3b1f55c1b8 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectCacheImpl.java @@ -114,6 +114,20 @@ public class ProjectCacheImpl implements ProjectCache { } } + @Override + public void remove(final Project p) { + listLock.lock(); + try { + SortedSet n = list.get(ListKey.ALL); + n = new TreeSet(n); + n.remove(p.getNameKey()); + list.put(ListKey.ALL, Collections.unmodifiableSortedSet(n)); + } finally { + listLock.unlock(); + } + evict(p); + } + @Override public void onCreateProject(Project.NameKey newProjectName) { listLock.lock(); diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java index 340db7e701..469dafe5fd 100644 --- a/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java +++ b/gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java @@ -277,6 +277,10 @@ public class RefControlTest extends TestCase { public void evict(Project p) { } + @Override + public void remove(Project p) { + } + @Override public Iterable all() { return Collections.emptySet();