summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/project/GarbageCollect.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/project/GarbageCollect.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/project/GarbageCollect.java170
1 files changed, 0 insertions, 170 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/GarbageCollect.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/GarbageCollect.java
deleted file mode 100644
index f81a0f3043..0000000000
--- a/gerrit-server/src/main/java/com/google/gerrit/server/project/GarbageCollect.java
+++ /dev/null
@@ -1,170 +0,0 @@
-// 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.server.project;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.gerrit.common.data.GarbageCollectionResult;
-import com.google.gerrit.common.data.GlobalCapability;
-import com.google.gerrit.extensions.annotations.RequiresCapability;
-import com.google.gerrit.extensions.restapi.BinaryResult;
-import com.google.gerrit.extensions.restapi.Response;
-import com.google.gerrit.extensions.restapi.RestModifyView;
-import com.google.gerrit.extensions.webui.UiAction;
-import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.config.CanonicalWebUrl;
-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.project.GarbageCollect.Input;
-import com.google.gerrit.server.util.IdGenerator;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-import com.google.inject.Singleton;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.util.Collections;
-
-@RequiresCapability(GlobalCapability.RUN_GC)
-@Singleton
-public class GarbageCollect
- implements RestModifyView<ProjectResource, Input>, UiAction<ProjectResource> {
- public static class Input {
- public boolean showProgress;
- public boolean aggressive;
- public boolean async;
- }
-
- private final boolean canGC;
- private final GarbageCollection.Factory garbageCollectionFactory;
- private final WorkQueue workQueue;
- private final Provider<String> canonicalUrl;
-
- @Inject
- GarbageCollect(
- GitRepositoryManager repoManager,
- GarbageCollection.Factory garbageCollectionFactory,
- WorkQueue workQueue,
- @CanonicalWebUrl Provider<String> canonicalUrl) {
- this.workQueue = workQueue;
- this.canonicalUrl = canonicalUrl;
- this.canGC = repoManager instanceof LocalDiskRepositoryManager;
- this.garbageCollectionFactory = garbageCollectionFactory;
- }
-
- @Override
- public Object apply(ProjectResource rsrc, Input input) {
- Project.NameKey project = rsrc.getNameKey();
- if (input.async) {
- return applyAsync(project, input);
- }
- return applySync(project, input);
- }
-
- private Response.Accepted applyAsync(Project.NameKey project, Input input) {
- Runnable job =
- new Runnable() {
- @Override
- public void run() {
- runGC(project, input, null);
- }
-
- @Override
- public String toString() {
- return "Run "
- + (input.aggressive ? "aggressive " : "")
- + "garbage collection on project "
- + project.get();
- }
- };
-
- @SuppressWarnings("unchecked")
- WorkQueue.Task<Void> task = (WorkQueue.Task<Void>) workQueue.getDefaultQueue().submit(job);
-
- String location =
- canonicalUrl.get() + "a/config/server/tasks/" + IdGenerator.format(task.getTaskId());
-
- return Response.accepted(location);
- }
-
- @SuppressWarnings("resource")
- private BinaryResult applySync(Project.NameKey project, Input input) {
- return new BinaryResult() {
- @Override
- public void writeTo(OutputStream out) throws IOException {
- PrintWriter writer =
- new PrintWriter(new OutputStreamWriter(out, UTF_8)) {
- @Override
- public void println() {
- write('\n');
- }
- };
- try {
- PrintWriter progressWriter = input.showProgress ? writer : null;
- GarbageCollectionResult result = runGC(project, input, progressWriter);
- String msg = "Garbage collection completed successfully.";
- if (result.hasErrors()) {
- for (GarbageCollectionResult.Error e : result.getErrors()) {
- switch (e.getType()) {
- case REPOSITORY_NOT_FOUND:
- msg = "Error: project \"" + e.getProjectName() + "\" not found.";
- break;
- case GC_ALREADY_SCHEDULED:
- msg =
- "Error: garbage collection for project \""
- + e.getProjectName()
- + "\" was already scheduled.";
- break;
- case GC_FAILED:
- msg =
- "Error: garbage collection for project \""
- + e.getProjectName()
- + "\" failed.";
- break;
- default:
- msg =
- "Error: garbage collection for project \""
- + e.getProjectName()
- + "\" failed: "
- + e.getType()
- + ".";
- }
- }
- }
- writer.println(msg);
- } finally {
- writer.flush();
- }
- }
- }.setContentType("text/plain").setCharacterEncoding(UTF_8).disableGzip();
- }
-
- GarbageCollectionResult runGC(Project.NameKey project, Input input, PrintWriter progressWriter) {
- return garbageCollectionFactory
- .create()
- .run(Collections.singletonList(project), input.aggressive, progressWriter);
- }
-
- @Override
- public UiAction.Description getDescription(ProjectResource rsrc) {
- return new UiAction.Description()
- .setLabel("Run GC")
- .setTitle("Triggers the Git Garbage Collection for this project.")
- .setVisible(canGC);
- }
-}