summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RestoreChange.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RestoreChange.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RestoreChange.java157
1 files changed, 0 insertions, 157 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RestoreChange.java b/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RestoreChange.java
deleted file mode 100644
index 53da2b6fdc..0000000000
--- a/gerrit-server/src/main/java/com/google/gerrit/server/changedetail/RestoreChange.java
+++ /dev/null
@@ -1,157 +0,0 @@
-// Copyright (C) 2012 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.changedetail;
-
-import com.google.gerrit.common.ChangeHooks;
-import com.google.gerrit.common.data.ReviewResult;
-import com.google.gerrit.reviewdb.client.Branch;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.ChangeMessage;
-import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.server.ChangeUtil;
-import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.ProjectUtil;
-import com.google.gerrit.server.git.GitRepositoryManager;
-import com.google.gerrit.server.mail.EmailException;
-import com.google.gerrit.server.mail.RestoredSender;
-import com.google.gerrit.server.project.ChangeControl;
-import com.google.gerrit.server.project.InvalidChangeOperationException;
-import com.google.gerrit.server.project.NoSuchChangeException;
-import com.google.gwtorm.server.AtomicUpdate;
-import com.google.gwtorm.server.OrmException;
-import com.google.inject.Inject;
-
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-
-import java.io.IOException;
-import java.util.concurrent.Callable;
-
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
-
-public class RestoreChange implements Callable<ReviewResult> {
-
- private final RestoredSender.Factory restoredSenderFactory;
- private final ChangeControl.Factory changeControlFactory;
- private final ReviewDb db;
- private final GitRepositoryManager repoManager;
- private final IdentifiedUser currentUser;
- private final ChangeHooks hooks;
-
- @Argument(index = 0, required = true, multiValued = false,
- usage = "change to restore", metaVar = "CHANGE")
- private Change.Id changeId;
- public void setChangeId(final Change.Id changeId) {
- this.changeId = changeId;
- }
-
- @Option(name = "--message", aliases = {"-m"},
- usage = "optional message to append to change")
- private String message;
- public void setMessage(final String message) {
- this.message = message;
- }
-
- @Inject
- RestoreChange(final RestoredSender.Factory restoredSenderFactory,
- final ChangeControl.Factory changeControlFactory, final ReviewDb db,
- final GitRepositoryManager repoManager, final IdentifiedUser currentUser,
- final ChangeHooks hooks) {
- this.restoredSenderFactory = restoredSenderFactory;
- this.changeControlFactory = changeControlFactory;
- this.db = db;
- this.repoManager = repoManager;
- this.currentUser = currentUser;
- this.hooks = hooks;
-
- changeId = null;
- message = null;
- }
-
- @Override
- public ReviewResult call() throws EmailException, NoSuchChangeException,
- InvalidChangeOperationException, OrmException,
- RepositoryNotFoundException, IOException {
- if (changeId == null) {
- throw new InvalidChangeOperationException("changeId is required");
- }
-
- final ReviewResult result = new ReviewResult();
- result.setChangeId(changeId);
-
- final ChangeControl control = changeControlFactory.validateFor(changeId);
- final Change change = db.changes().get(changeId);
- final PatchSet.Id patchSetId = change.currentPatchSetId();
- if (!control.canRestore()) {
- result.addError(new ReviewResult.Error(
- ReviewResult.Error.Type.RESTORE_NOT_PERMITTED));
- return result;
- }
-
- final PatchSet patch = db.patchSets().get(patchSetId);
- if (patch == null) {
- throw new NoSuchChangeException(changeId);
- }
-
- final Branch.NameKey destBranch = control.getChange().getDest();
- if (!ProjectUtil.branchExists(repoManager, destBranch)) {
- result.addError(new ReviewResult.Error(
- ReviewResult.Error.Type.DEST_BRANCH_NOT_FOUND, destBranch.get()));
- return result;
- }
-
- // Create a message to accompany the restored change
- final ChangeMessage cmsg =
- new ChangeMessage(new ChangeMessage.Key(changeId, ChangeUtil
- .messageUUID(db)), currentUser.getAccountId(), patchSetId);
- final StringBuilder msgBuf =
- new StringBuilder("Patch Set " + patchSetId.get() + ": Restored");
- if (message != null && message.length() > 0) {
- msgBuf.append("\n\n");
- msgBuf.append(message);
- }
- cmsg.setMessage(msgBuf.toString());
-
- // Restore the change
- final Change updatedChange = db.changes().atomicUpdate(changeId,
- new AtomicUpdate<Change>() {
- @Override
- public Change update(Change change) {
- if (change.getStatus() == Change.Status.ABANDONED) {
- change.setStatus(Change.Status.NEW);
- ChangeUtil.updated(change);
- return change;
- } else {
- return null;
- }
- }
- });
-
- if (updatedChange == null) {
- result.addError(new ReviewResult.Error(
- ReviewResult.Error.Type.CHANGE_NOT_ABANDONED));
- return result;
- }
-
- ChangeUtil.updatedChange(db, currentUser, updatedChange, cmsg,
- restoredSenderFactory);
- hooks.doChangeRestoredHook(updatedChange, currentUser.getAccount(),
- message, db);
-
- return result;
- }
-}