Clarify error msg when user's not allowed to '--force push'.

Fix: More descriptive error message when the user tries
to 'Force Push' without having the correct privileges.

Change-Id: I009e3fc50fb316ce94526af5f76da554bd91eccf
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/PermissionRule.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/PermissionRule.java
index 2ddd8a7..9b6695e 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/PermissionRule.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/PermissionRule.java
@@ -15,6 +15,7 @@
 package com.google.gerrit.common.data;
 
 public class PermissionRule implements Comparable<PermissionRule> {
+  public static final String FORCE_PUSH = "Force Push";
   public static enum Action {
     ALLOW, DENY, BLOCK,
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.java
index 7f5b573..e4cced7 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.java
@@ -137,6 +137,7 @@
       String ref = section.getName();
       canForce = !ref.startsWith("refs/for/") && !ref.startsWith("^refs/for/");
     }
+    force.setText(PermissionRule.FORCE_PUSH);
     force.setVisible(canForce);
     force.setEnabled(!readOnly);
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.ui.xml
index e60f3df..26fc229 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.ui.xml
@@ -80,14 +80,7 @@
 
   <q:Hyperlink ui:field='groupNameLink' styleName='{style.groupName}'/>
   <span ui:field='groupNameSpan' styleName='{style.groupName}'/>
-
-  <g:CheckBox
-      ui:field='force'
-      addStyleNames='{style.forcePush}'
-      text='Force Push'>
-    <ui:attribute name='text'/>
-  </g:CheckBox>
-
+  <g:CheckBox ui:field='force' addStyleNames='{style.forcePush}'/>
   <g:Anchor
       ui:field='deleteRule'
       href='javascript:void'
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index ecb6629..e1bedb3 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -19,6 +19,7 @@
 import com.google.gerrit.common.data.ApprovalType;
 import com.google.gerrit.common.data.ApprovalTypes;
 import com.google.gerrit.common.data.Capable;
+import com.google.gerrit.common.data.PermissionRule;
 import com.google.gerrit.common.errors.NoSuchAccountException;
 import com.google.gerrit.reviewdb.Account;
 import com.google.gerrit.reviewdb.ApprovalCategory;
@@ -597,7 +598,8 @@
     if (ctl.canForceUpdate()) {
       // Let the core receive process handle it
     } else {
-      cmd.setResult(ReceiveCommand.Result.REJECTED_NONFASTFORWARD);
+      cmd.setResult(ReceiveCommand.Result.REJECTED_NONFASTFORWARD, " need '"
+          + PermissionRule.FORCE_PUSH + "' privilege.");
     }
   }