Merge "Fix /submit_type to return only uppercase names"
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
index 996537f..dae1d38 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
@@ -84,6 +84,7 @@
 
 import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.List;
@@ -586,7 +587,7 @@
     idText.setText("Change-Id: " + info.change_id());
     idText.setPreviewText(info.change_id());
     reload.set(info);
-    topic.set(info);
+    topic.set(info, revision);
     commit.set(commentLinkProcessor, info, revision);
     related.set(info, revision);
     quickApprove.set(info, revision);
@@ -644,6 +645,11 @@
 
     JsArray<RevisionInfo> list = info.revisions().values();
     RevisionInfo.sortRevisionInfoByNumber(list);
+    if (Gerrit.isSignedIn()
+        && Gerrit.getUserAccount().getGeneralPreferences()
+            .isReversePatchSetOrder()) {
+      Collections.reverse(Natives.asList(list));
+    }
 
     int selected = -1;
     for (int i = 0; i < list.length(); i++) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyAction.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyAction.java
index e97420c..d320df4 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyAction.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyAction.java
@@ -17,7 +17,7 @@
 import com.google.gerrit.client.changes.ChangeInfo;
 import com.google.gerrit.client.changes.ChangeInfo.LabelInfo;
 import com.google.gerrit.client.rpc.NativeMap;
-import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gwt.core.client.JsArrayString;
 import com.google.gwt.event.logical.shared.CloseEvent;
 import com.google.gwt.event.logical.shared.CloseHandler;
@@ -27,7 +27,7 @@
 import com.google.gwtexpui.user.client.PluginSafePopupPanel;
 
 class ReplyAction {
-  private final Change.Id changeId;
+  private final PatchSet.Id psId;
   private final String revision;
   private final ChangeScreen2.Style style;
   private final Widget replyButton;
@@ -43,7 +43,9 @@
       String revision,
       ChangeScreen2.Style style,
       Widget replyButton) {
-    this.changeId = info.legacy_id();
+    this.psId = new PatchSet.Id(
+        info.legacy_id(),
+        info.revisions().get(revision)._number());
     this.revision = revision;
     this.style = style;
     this.replyButton = replyButton;
@@ -63,7 +65,7 @@
 
     if (replyBox == null) {
       replyBox = new ReplyBox(
-          changeId,
+          psId,
           revision,
           allLabels,
           permittedLabels);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java
index 8b10641..f6492d45 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ReplyBox.java
@@ -23,7 +23,7 @@
 import com.google.gerrit.client.rpc.NativeMap;
 import com.google.gerrit.common.PageLinks;
 import com.google.gerrit.common.data.LabelValue;
-import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JsArrayString;
 import com.google.gwt.core.client.Scheduler;
@@ -64,7 +64,7 @@
     String label_value();
   }
 
-  private final Change.Id changeId;
+  private final PatchSet.Id psId;
   private final String revision;
   private ReviewInput in = ReviewInput.create();
   private List<Runnable> lgtm;
@@ -77,11 +77,11 @@
   @UiField CheckBox email;
 
   ReplyBox(
-      Change.Id changeId,
+      PatchSet.Id psId,
       String revision,
       NativeMap<LabelInfo> all,
       NativeMap<JsArrayString> permitted) {
-    this.changeId = changeId;
+    this.psId = psId;
     this.revision = revision;
     initWidget(uiBinder.createAndBindUi(this));
 
@@ -139,12 +139,14 @@
   @UiHandler("send")
   void onSend(ClickEvent e) {
     in.message(message.getText().trim());
-    ChangeApi.revision(changeId.get(), revision)
+    ChangeApi.revision(psId.getParentKey().get(), revision)
       .view("review")
       .post(in, new GerritCallback<ReviewInput>() {
         @Override
         public void onSuccess(ReviewInput result) {
-          Gerrit.display(PageLinks.toChange2(changeId));
+          Gerrit.display(PageLinks.toChange2(
+              psId.getParentKey(),
+              String.valueOf(psId.get())));
         }
       });
     hide();
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Topic.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Topic.java
index 5154d57..0974d03 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Topic.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Topic.java
@@ -14,9 +14,12 @@
 
 package com.google.gerrit.client.change;
 
+import com.google.gerrit.client.Gerrit;
 import com.google.gerrit.client.changes.ChangeApi;
 import com.google.gerrit.client.changes.ChangeInfo;
 import com.google.gerrit.client.rpc.GerritCallback;
+import com.google.gerrit.common.PageLinks;
+import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -41,7 +44,7 @@
   interface Binder extends UiBinder<HTMLPanel, Topic> {}
   private static Binder uiBinder = GWT.create(Binder.class);
 
-  private int changeId;
+  private PatchSet.Id psId;
   private boolean canEdit;
 
   @UiField FlowPanel show;
@@ -66,12 +69,15 @@
       ClickEvent.getType());
   }
 
-  void set(ChangeInfo info) {
+  void set(ChangeInfo info, String revision) {
     canEdit = info.has_actions()
         && info.actions().containsKey("topic")
         && info.actions().get("topic").enabled();
 
-    changeId = info.legacy_id().get();
+    psId = new PatchSet.Id(
+        info.legacy_id(),
+        info.revisions().get(revision)._number());
+
     text.setText(info.topic());
     editIcon.setVisible(canEdit);
     if (!canEdit) {
@@ -122,18 +128,17 @@
   @UiHandler("save")
   void onSave(ClickEvent e) {
     ChangeApi.topic(
-        changeId,
+        psId.getParentKey().get(),
         input.getValue().trim(),
         message.getValue().trim(),
         new GerritCallback<String>() {
           @Override
           public void onSuccess(String result) {
-            // Cheat and just patch the UI with the current topic.
-            // This saves a full redraw of the change screen but
-            // will cause the message to be missed in the History.
-            text.setText(result);
-            onCancel(null);
+            Gerrit.display(PageLinks.toChange2(
+                psId.getParentKey(),
+                String.valueOf(psId.get())));
           }
         });
+    onCancel(null);
   }
 }