Redirect the user to the reverted change.

When the user reverts a change through the
use of the "Revert"-button, the user will get
redirected to the new change.

Change-Id: I6f3f616f67b8d53904968b17cdb96e6778b69475
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
index 003a731..fbf0531 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
@@ -21,6 +21,7 @@
 import com.google.gerrit.client.ui.AccountDashboardLink;
 import com.google.gerrit.client.ui.ComplexDisclosurePanel;
 import com.google.gerrit.client.ui.ListenableAccountDiffPreference;
+import com.google.gerrit.common.PageLinks;
 import com.google.gerrit.common.data.ChangeDetail;
 import com.google.gerrit.common.data.GitwebLink;
 import com.google.gerrit.common.data.PatchSetDetail;
@@ -436,7 +437,7 @@
         @Override
         public void onClick(final ClickEvent event) {
           b.setEnabled(false);
-          new CommentedChangeActionDialog(patchSet.getId(), createCommentedCallback(b),
+          new CommentedChangeActionDialog(patchSet.getId(), createCommentedCallback(b, true),
               Util.C.revertChangeTitle(), Util.C.headingRevertMessage(),
               Util.C.buttonRevertChangeSend(), Util.C.buttonRevertChangeCancel(),
               Gerrit.RESOURCES.css().revertChangeDialog(), Gerrit.RESOURCES.css().revertMessage(),
@@ -456,7 +457,7 @@
         @Override
         public void onClick(final ClickEvent event) {
           b.setEnabled(false);
-          new CommentedChangeActionDialog(patchSet.getId(), createCommentedCallback(b),
+          new CommentedChangeActionDialog(patchSet.getId(), createCommentedCallback(b, false),
               Util.C.abandonChangeTitle(), Util.C.headingAbandonMessage(),
               Util.C.buttonAbandonChangeSend(), Util.C.buttonAbandonChangeCancel(),
               Gerrit.RESOURCES.css().abandonChangeDialog(), Gerrit.RESOURCES.css().abandonMessage()) {
@@ -475,7 +476,7 @@
         @Override
         public void onClick(final ClickEvent event) {
           b.setEnabled(false);
-          new CommentedChangeActionDialog(patchSet.getId(), createCommentedCallback(b),
+          new CommentedChangeActionDialog(patchSet.getId(), createCommentedCallback(b, false),
               Util.C.restoreChangeTitle(), Util.C.headingRestoreMessage(),
               Util.C.buttonRestoreChangeSend(), Util.C.buttonRestoreChangeCancel(),
               Gerrit.RESOURCES.css().abandonChangeDialog(), Gerrit.RESOURCES.css().abandonMessage()) {
@@ -633,10 +634,14 @@
     }
   }
 
-  private AsyncCallback<ChangeDetail> createCommentedCallback(final Button b) {
+  private AsyncCallback<ChangeDetail> createCommentedCallback(final Button b, final boolean redirect) {
     return new AsyncCallback<ChangeDetail>() {
       public void onSuccess(ChangeDetail result) {
-        changeScreen.update(result);
+        if (redirect) {
+          Gerrit.display(PageLinks.toChange(result.getChange().getId()));
+        } else {
+          changeScreen.update(result);
+        }
       }
 
       public void onFailure(Throwable caught) {
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/RevertChange.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/RevertChange.java
index 3dfa0e3..5e007fa 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/RevertChange.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/RevertChange.java
@@ -105,10 +105,10 @@
       throw new NoSuchChangeException(changeId);
     }
 
-    ChangeUtil.revert(patchSetId, currentUser, message, db,
+    Change.Id revertedChangeId = ChangeUtil.revert(patchSetId, currentUser, message, db,
         revertedSenderFactory, hooks, gitManager, patchSetInfoFactory,
         replication, myIdent);
 
-    return changeDetailFactory.create(changeId).call();
+    return changeDetailFactory.create(revertedChangeId).call();
   }
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
index 36ac938..89f5ab2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/ChangeUtil.java
@@ -256,7 +256,7 @@
     hooks.doChangeAbandonedHook(updatedChange, user.getAccount(), message);
   }
 
-  public static void revert(final PatchSet.Id patchSetId,
+  public static Change.Id revert(final PatchSet.Id patchSetId,
       final IdentifiedUser user, final String message, final ReviewDb db,
       final RevertedSender.Factory revertedSenderFactory,
       final ChangeHookRunner hooks, GitRepositoryManager gitManager,
@@ -352,6 +352,8 @@
       cm.send();
 
       hooks.doPatchsetCreatedHook(change, ps);
+
+      return change.getId();
     } finally {
       revWalk.release();
       git.close();