summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Miller <marco.miller@ericsson.com>2021-03-09 10:49:55 -0500
committerMarco Miller <marco.miller@ericsson.com>2021-03-09 14:51:45 -0500
commit3aa536101d1885bb64bc6e55a35efbf693c373d8 (patch)
treecc07ad5e3b8d1ea09478a9c55e1a7db662709a44
parent2005b5bfb438adbea7dd1446fc50b0e13e996a04 (diff)
parent36ffd21f48b1e483ac19a89f2c09dc0e01cf61ba (diff)
Merge branch 'stable-3.0' into stable-3.1
* stable-3.0: Update git submodules Update git submodules GitRepositoryManager should be responsible to enable/disable the GC Adapt GitRepositoryManagerTest to the removal of GerritBaseTests in this branch (commit a36b3580). Adapt that same class also to the local package for Project.NameKey, as well as to the no longer thrown exceptions. Change-Id: I799c8884a779f68bcb341d4be3974e74a1974532
-rw-r--r--java/com/google/gerrit/server/git/GitRepositoryManager.java9
-rw-r--r--java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java5
-rw-r--r--java/com/google/gerrit/server/restapi/project/GarbageCollect.java3
-rw-r--r--javatests/com/google/gerrit/server/git/GitRepositoryManagerTest.java54
-rw-r--r--javatests/com/google/gerrit/server/git/LocalDiskRepositoryManagerTest.java5
5 files changed, 74 insertions, 2 deletions
diff --git a/java/com/google/gerrit/server/git/GitRepositoryManager.java b/java/com/google/gerrit/server/git/GitRepositoryManager.java
index 2697eee213..e4d06965fc 100644
--- a/java/com/google/gerrit/server/git/GitRepositoryManager.java
+++ b/java/com/google/gerrit/server/git/GitRepositoryManager.java
@@ -57,4 +57,13 @@ public interface GitRepositoryManager {
/** @return set of all known projects, sorted by natural NameKey order. */
SortedSet<Project.NameKey> list();
+
+ /**
+ * Check if garbage collection can be performed by the repository manager.
+ *
+ * @return true if repository can perform garbage collection.
+ */
+ default Boolean canPerformGC() {
+ return false;
+ }
}
diff --git a/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java b/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
index 44d1077a92..d42ed2578a 100644
--- a/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
+++ b/java/com/google/gerrit/server/git/LocalDiskRepositoryManager.java
@@ -199,6 +199,11 @@ public class LocalDiskRepositoryManager implements GitRepositoryManager {
}
}
+ @Override
+ public Boolean canPerformGC() {
+ return true;
+ }
+
private boolean isUnreasonableName(Project.NameKey nameKey) {
final String name = nameKey.get();
diff --git a/java/com/google/gerrit/server/restapi/project/GarbageCollect.java b/java/com/google/gerrit/server/restapi/project/GarbageCollect.java
index 25a2c90d7e..537d45ab27 100644
--- a/java/com/google/gerrit/server/restapi/project/GarbageCollect.java
+++ b/java/com/google/gerrit/server/restapi/project/GarbageCollect.java
@@ -29,7 +29,6 @@ import com.google.gerrit.extensions.webui.UiAction;
import com.google.gerrit.server.config.UrlFormatter;
import com.google.gerrit.server.git.GarbageCollection;
import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.git.LocalDiskRepositoryManager;
import com.google.gerrit.server.git.WorkQueue;
import com.google.gerrit.server.ioutil.HexFormat;
import com.google.gerrit.server.project.ProjectResource;
@@ -66,7 +65,7 @@ public class GarbageCollect
DynamicItem<UrlFormatter> urlFormatter) {
this.workQueue = workQueue;
this.urlFormatter = urlFormatter;
- this.canGC = repoManager instanceof LocalDiskRepositoryManager;
+ this.canGC = repoManager.canPerformGC();
this.garbageCollectionFactory = garbageCollectionFactory;
}
diff --git a/javatests/com/google/gerrit/server/git/GitRepositoryManagerTest.java b/javatests/com/google/gerrit/server/git/GitRepositoryManagerTest.java
new file mode 100644
index 0000000000..7832bec143
--- /dev/null
+++ b/javatests/com/google/gerrit/server/git/GitRepositoryManagerTest.java
@@ -0,0 +1,54 @@
+// Copyright (C) 2021 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.server.git;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.gerrit.entities.Project.NameKey;
+import java.util.SortedSet;
+import org.eclipse.jgit.lib.Repository;
+import org.junit.Before;
+import org.junit.Test;
+
+public class GitRepositoryManagerTest {
+
+ private GitRepositoryManager objectUnderTest;
+
+ @Before
+ public void setUp() throws Exception {
+ objectUnderTest = new TestGitRepositoryManager();
+ }
+
+ @Test
+ public void shouldReturnFalseWhenDefaultCanPerformGC() {
+ assertThat(objectUnderTest.canPerformGC()).isFalse();
+ }
+
+ private static class TestGitRepositoryManager implements GitRepositoryManager {
+ @Override
+ public Repository openRepository(NameKey name) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ @Override
+ public Repository createRepository(NameKey name) {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+
+ @Override
+ public SortedSet<NameKey> list() {
+ throw new UnsupportedOperationException("Not implemented");
+ }
+ }
+}
diff --git a/javatests/com/google/gerrit/server/git/LocalDiskRepositoryManagerTest.java b/javatests/com/google/gerrit/server/git/LocalDiskRepositoryManagerTest.java
index 8ab7dd2134..febb1427f6 100644
--- a/javatests/com/google/gerrit/server/git/LocalDiskRepositoryManagerTest.java
+++ b/javatests/com/google/gerrit/server/git/LocalDiskRepositoryManagerTest.java
@@ -252,6 +252,11 @@ public class LocalDiskRepositoryManagerTest {
() -> newRepoManager.createRepository(Project.nameKey("A")));
}
+ @Test
+ public void testRepositoryCanPerformGC() throws Exception {
+ assertThat(repoManager.canPerformGC()).isTrue();
+ }
+
private void createSymLink(Project.NameKey project, String link) throws IOException {
Path base = repoManager.getBasePath(project);
Path projectDir = base.resolve(project.get() + ".git");