diff options
author | Marco Miller <marco.miller@ericsson.com> | 2021-03-09 10:49:55 -0500 |
---|---|---|
committer | Marco Miller <marco.miller@ericsson.com> | 2021-03-09 14:51:45 -0500 |
commit | 3aa536101d1885bb64bc6e55a35efbf693c373d8 (patch) | |
tree | cc07ad5e3b8d1ea09478a9c55e1a7db662709a44 | |
parent | 2005b5bfb438adbea7dd1446fc50b0e13e996a04 (diff) | |
parent | 36ffd21f48b1e483ac19a89f2c09dc0e01cf61ba (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
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"); |