Merge "ChangeScreen2: Fix NPE in /related caused by wrong variable"
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml
index d50acc9..c2b98b0 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.ui.xml
@@ -86,7 +86,6 @@
 
     .headerTable {
       border-spacing: 0;
-      width: 100%;
     }
 
     .headerTable th {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentBoxUi.css b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentBoxUi.css
index 5b3b91a..7895c9b9 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentBoxUi.css
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/CommentBoxUi.css
@@ -16,6 +16,7 @@
 .commentBox {
   position: relative;
   width: 679px;
+  min-height: 16px;
   font-family: sans-serif;
   background-color: #fcfa96;
   border: 1px solid black;
@@ -31,7 +32,7 @@
 .summary {
   color: #777;
   position: absolute;
-  top: 0;
+  top: 2px;
   left: 120px;
   width: 408px;
   overflow: hidden;
@@ -42,12 +43,13 @@
 .date {
   white-space: nowrap;
   position: absolute;
-  top: 0;
+  top: 2px;
   right: 5px;
 }
 
 .contents {
   margin-left: 28px;
+  padding-top: 2px;
   position: relative;
 }
 .contents p,
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DraftBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DraftBox.java
index 25dcdf0..8d505ee 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DraftBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/diff/DraftBox.java
@@ -92,6 +92,9 @@
     expandTimer = new Timer() {
       @Override
       public void run() {
+        if (isNew()) {
+          cancel.setVisible(!isDirty());
+        }
         expandText();
       }
     };
@@ -291,7 +294,7 @@
   @UiHandler("cancel")
   void onCancel(ClickEvent e) {
     e.stopPropagation();
-    if (comment.id() == null && editArea.getValue().length() == 0) {
+    if (isNew() && !isDirty()) {
       removeUI();
     } else {
       setEdit(false);
@@ -302,7 +305,7 @@
   @UiHandler({"discard1", "discard2"})
   void onDiscard(ClickEvent e) {
     e.stopPropagation();
-    if (comment.id() == null) {
+    if (isNew()) {
       removeUI();
     } else {
       setEdit(false);
@@ -327,11 +330,30 @@
           onSave();
           return;
       }
-    } else if (e.getNativeKeyCode() == KeyCodes.KEY_ESCAPE
-        && comment.id() == null && editArea.getValue().length() == 0) {
-      removeUI();
-      return;
+    } else if (e.getNativeKeyCode() == KeyCodes.KEY_ESCAPE && !isDirty()) {
+      if (isNew()) {
+        removeUI();
+        return;
+      } else {
+        setEdit(false);
+        cm.focus();
+        return;
+      }
     }
     expandTimer.schedule(250);
   }
+
+  private boolean isNew() {
+    return comment.id() == null;
+  }
+
+  private boolean isDirty() {
+    String msg = editArea.getValue().trim();
+    if (isNew()) {
+      return msg.length() > 0;
+    }
+    return msg.equals(comment.message() != null
+        ? comment.message().trim()
+        : "");
+  }
 }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/RestApi.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/RestApi.java
index 073b49e..4666d34 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/RestApi.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/RestApi.java
@@ -93,6 +93,7 @@
       case 405: // Method Not Allowed
       case 409: // Conflict
       case 412: // Precondition Failed
+      case 422: // Unprocessable Entity
       case 429: // Too Many Requests (RFC 6585)
         return true;
 
diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/tools/root/hooks/commit-msg b/gerrit-server/src/main/resources/com/google/gerrit/server/tools/root/hooks/commit-msg
index b29e25c..12dcd52 100644
--- a/gerrit-server/src/main/resources/com/google/gerrit/server/tools/root/hooks/commit-msg
+++ b/gerrit-server/src/main/resources/com/google/gerrit/server/tools/root/hooks/commit-msg
@@ -38,6 +38,11 @@
 		return
 	fi
 
+	if test "false" = "`git config --bool --get gerrit.createChangeId`"
+	then
+		return
+	fi
+
 	# Does Change-Id: already exist? if so, exit (no change).
 	if grep -i '^Change-Id:' "$MSG" >/dev/null
 	then
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/PluginCommandModule.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/PluginCommandModule.java
index 013f070..334f155 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/PluginCommandModule.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/PluginCommandModule.java
@@ -26,7 +26,7 @@
   private CommandName command;
 
   @Inject
-  void setPluginName(@PluginName String name, final String descr) {
+  void setPluginName(@PluginName String name) {
     this.command = Commands.named(name);
   }