summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryRepositoryManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryRepositoryManager.java')
-rw-r--r--gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryRepositoryManager.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryRepositoryManager.java b/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryRepositoryManager.java
new file mode 100644
index 0000000000..8e2bce66a7
--- /dev/null
+++ b/gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryRepositoryManager.java
@@ -0,0 +1,111 @@
+// Copyright (C) 2013 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.testutil;
+
+import com.google.common.collect.ImmutableSortedSet;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.server.git.GitRepositoryManager;
+import com.google.gerrit.server.git.RepositoryCaseMismatchException;
+
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
+import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
+import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
+import org.eclipse.jgit.lib.Repository;
+
+import java.util.Map;
+import java.util.SortedSet;
+
+/** Repository manager that uses in-memory repositories. */
+public class InMemoryRepositoryManager implements GitRepositoryManager {
+ private static class Description extends DfsRepositoryDescription {
+ private String desc;
+
+ private Description(Project.NameKey name) {
+ super(name.get());
+ desc = "In-memory repository " + name.get();
+ }
+ }
+
+ private static class Repo extends InMemoryRepository {
+ private Repo(Project.NameKey name) {
+ super(new Description(name));
+ }
+
+ @Override
+ public Description getDescription() {
+ return (Description) super.getDescription();
+ }
+ }
+
+ private Map<String, Repo> repos = Maps.newHashMap();
+
+ @Override
+ public Repository openRepository(Project.NameKey name)
+ throws RepositoryNotFoundException {
+ return get(name);
+ }
+
+ @Override
+ public Repository createRepository(Project.NameKey name)
+ throws RepositoryCaseMismatchException, RepositoryNotFoundException {
+ Repo repo;
+ try {
+ repo = get(name);
+ if (!repo.getDescription().getRepositoryName().equals(name.get())) {
+ throw new RepositoryCaseMismatchException(name);
+ }
+ } catch (RepositoryNotFoundException e) {
+ repo = new Repo(name);
+ repos.put(name.get().toLowerCase(), repo);
+ }
+ return repo;
+ }
+
+ @Override
+ public SortedSet<Project.NameKey> list() {
+ SortedSet<Project.NameKey> names = Sets.newTreeSet();
+ for (DfsRepository repo : repos.values()) {
+ names.add(new Project.NameKey(repo.getDescription().getRepositoryName()));
+ }
+ return ImmutableSortedSet.copyOf(names);
+ }
+
+ @Override
+ public String getProjectDescription(Project.NameKey name)
+ throws RepositoryNotFoundException {
+ return get(name).getDescription().desc;
+ }
+
+ @Override
+ public void setProjectDescription(Project.NameKey name, String description) {
+ try {
+ get(name).getDescription().desc = description;
+ } catch (RepositoryNotFoundException e) {
+ // Ignore.
+ }
+ }
+
+ private Repo get(Project.NameKey name) throws RepositoryNotFoundException {
+ Repo repo = repos.get(name.get().toLowerCase());
+ if (repo != null) {
+ return repo;
+ } else {
+ throw new RepositoryNotFoundException(name.get());
+ }
+ }
+}