Merge "Fix /submit_type to return only uppercase names"
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 2cc1f50..bccf018 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -1611,7 +1611,7 @@
   Content-Type: application/json;charset=UTF-8
 
   )]}'
-  "cherry_pick"
+  "CHERRY_PICK"
 ----
 
 [[test-submit-rule]]
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
index 2aff0a8..c773735 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/Mergeable.java
@@ -58,7 +58,7 @@
   private static final Logger log = LoggerFactory.getLogger(Mergeable.class);
 
   public static class MergeableInfo {
-    public String submitType;
+    public Project.SubmitType submitType;
     public boolean mergeable;
   }
 
@@ -123,21 +123,10 @@
 
   private boolean refresh(Change change,
       PatchSet ps,
-      String submitType,
+      Project.SubmitType type,
       Repository git,
       Map<String, Ref> refs,
       Ref ref) throws IOException, OrmException {
-    Project.SubmitType type;
-    try {
-      type = Project.SubmitType.valueOf(submitType);
-    } catch (IllegalArgumentException unsupported) {
-      log.warn(String.format(
-          "Change %d uses unsupported submit_type \"%s\"",
-          change.getId().get(),
-          submitType));
-      return false;
-    }
-
     RevWalk rw = new RevWalk(git) {
       @Override
       protected CodeReviewCommit createCommit(AnyObjectId id) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/TestSubmitType.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/TestSubmitType.java
index e7e1f32..5a4f9e2 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/TestSubmitType.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/TestSubmitType.java
@@ -20,6 +20,7 @@
 import com.google.gerrit.extensions.restapi.BadRequestException;
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.extensions.restapi.RestReadView;
+import com.google.gerrit.reviewdb.client.Project.SubmitType;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.rules.RulesCache;
 import com.google.gerrit.server.change.TestSubmitRule.Filters;
@@ -30,6 +31,7 @@
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 
+import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 
 import org.kohsuke.args4j.Option;
@@ -51,8 +53,8 @@
   }
 
   @Override
-  public String apply(RevisionResource rsrc, Input input) throws OrmException,
-      BadRequestException, AuthException {
+  public SubmitType apply(RevisionResource rsrc, Input input)
+      throws OrmException, BadRequestException, AuthException {
     if (input == null) {
       input = new Input();
     }
@@ -96,7 +98,16 @@
           evaluator.getSubmitRule().toString(),
           type));
     }
-    return type.toString();
+
+    String typeName = ((SymbolTerm) type).name();
+    try {
+      return SubmitType.valueOf(typeName.toUpperCase());
+    } catch (IllegalArgumentException e) {
+      throw new BadRequestException(String.format(
+          "rule %s produced invalid result: %s",
+          evaluator.getSubmitRule().toString(),
+          type));
+    }
   }
 
   static class Get implements RestReadView<RevisionResource> {
@@ -108,8 +119,8 @@
     }
 
     @Override
-    public String apply(RevisionResource resource) throws BadRequestException,
-        OrmException, AuthException {
+    public SubmitType apply(RevisionResource resource)
+        throws BadRequestException, OrmException, AuthException {
       return test.apply(resource, null);
     }
   }