Fix wrong comment on simple reviews

When a review is not cross-repo and cannot be merged because of a conflict,
we were showing a message prefixed with "Cross-repo comment".
Now, the messages are no more prefixed.
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
index 9c519b5..4801546 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -25,6 +25,7 @@
 import com.google.gerrit.server.change.GetRelated;
 import com.google.gerrit.server.change.PostReview;
 import com.google.gerrit.server.change.Submit;
+import com.google.gerrit.server.data.ApprovalAttribute;
 import com.google.gerrit.server.data.ChangeAttribute;
 import com.google.gerrit.server.events.ChangeEvent;
 import com.google.gerrit.server.events.CommentAddedEvent;
@@ -110,14 +111,7 @@
   }
 
   private void onCommendAdded(final CommentAddedEvent newComment) {
-    // Avoid infinite loop when this plugin comments the review.
-    //
-    // A plugin comment will typically look like:
-    // Patch Set 1:
-    //
-    // Cross-repo comment:
-    // ...
-    if (config.getBotEmail().equals(newComment.author.email) && newComment.comment.contains(config.getCommentPrefix())) {
+    if (!shouldProcessCommentEvent(newComment)) {
       return;
     }
 
@@ -135,6 +129,26 @@
     }
   }
 
+  /**
+   * Returns true if the plugin must handle this comment, i.e. if we are sure it does not come
+   * from this plugin (to avoid infinite loop).
+   *
+   * @param comment
+   * @return a boolean
+   */
+  private boolean shouldProcessCommentEvent(CommentAddedEvent comment) {
+    if (!config.getBotEmail().equals(comment.author.email)) {
+      return true;
+    }
+    for (ApprovalAttribute approval : comment.approvals) {
+      // See ReviewUpdate#setMinusOne
+      if (!("Code-Review".equals(approval.type) && "-1".equals(approval.value))) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   private void attemptToMerge(ChangeAttribute change) throws RestApiException, OrmException, NoSuchChangeException, IOException {
     final List<ChangeInfo> related = Lists.newArrayList();
     final String topic = change.topic;
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomergeConfig.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomergeConfig.java
index 3ff8c17..135c8df 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomergeConfig.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomergeConfig.java
@@ -21,8 +21,6 @@
   private final static String defaultBotEmail = "qabot@criteo.com";
   private final static String defaultTopicPrefix = "crossrepo/";
   public final static String TOPIC_PREFIX_KEY = "topicPrefix";
-  private final static String defaultCommentPrefix = "Cross-repo comment:" + System.lineSeparator();
-  public final static String COMMENT_PREFIX_KEY = "commitPrefix";
 
   public static final String getDefaultBotEmail() {
     return defaultBotEmail;
@@ -35,7 +33,6 @@
   private String botEmail;
   private final File templatesPath;
   private String topicPrefix;
-  private String commentPrefix;
 
   @Inject
   public AutomergeConfig(@GerritServerConfig final Config config, final SitePaths paths) {
@@ -47,10 +44,6 @@
     if (topicPrefix == null) {
       topicPrefix = defaultTopicPrefix;
     }
-    commentPrefix = config.getString(AUTOMERGE_SECTION, null, COMMENT_PREFIX_KEY);
-    if (commentPrefix == null) {
-      commentPrefix = defaultCommentPrefix;
-    }
 
     templatesPath = paths.etc_dir;
   }
@@ -73,8 +66,4 @@
   public final String getTopicPrefix() {
     return topicPrefix;
   }
-
-  public String getCommentPrefix() {
-    return commentPrefix;
-  }
 }
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java b/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java
index ef6a7a1..32c05fe 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/ReviewUpdater.java
@@ -3,7 +3,10 @@
 import com.google.common.base.Charsets;
 import com.google.common.io.Files;
 import com.google.gerrit.extensions.api.changes.ReviewInput;
+import com.google.gerrit.extensions.restapi.AuthException;
+import com.google.gerrit.extensions.restapi.BadRequestException;
 import com.google.gerrit.extensions.restapi.RestApiException;
+import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.change.PostReview;
 import com.google.gerrit.server.change.RevisionResource;
@@ -38,33 +41,32 @@
   private AtomicityHelper atomicityHelper;
 
   public void commentOnReview(final int number, final String commentTemplate) throws RestApiException, OrmException, IOException, NoSuchChangeException {
-    final ReviewInput message = createCrossrepoComment(commentTemplate);
-    final RevisionResource r = atomicityHelper.getRevisionResource(number);
-    reviewer.get().apply(r, message);
-  }
-
-  private final String getCommentFromFile(final String filename) {
-    try {
-      return Files.toString(new File(config.getTemplatesPath(), filename), Charsets.UTF_8);
-
-    } catch (final IOException exc) {
-      final String errmsg =
-          String.format("Cannot find %s file in gerrit etc dir. Please check your gerrit configuration", filename);
-      log.error(errmsg);
-      return errmsg;
-    }
+    final ReviewInput comment = createComment(commentTemplate);
+    applyComment(number, comment);
   }
 
   public void setMinusOne(final int number, final String commentTemplate) throws RestApiException, OrmException, IOException, NoSuchChangeException {
-    final ReviewInput message = createCrossrepoComment(commentTemplate);
-    message.label("Code-Review", -1);
-    final RevisionResource r = atomicityHelper.getRevisionResource(number);
-    reviewer.get().apply(r, message);
+    final ReviewInput message = createComment(commentTemplate).label("Code-Review", -1);
+    applyComment(number, message);
   }
 
-  private ReviewInput createCrossrepoComment(final String commentTemplate) {
-    final ReviewInput message = new ReviewInput();
-    message.message = config.getCommentPrefix() + getCommentFromFile(commentTemplate);
-    return message;
+  private ReviewInput createComment(final String commentTemplate) {
+    return new ReviewInput().message(getCommentFromFile(commentTemplate));
+  }
+
+  private String getCommentFromFile(final String filename) {
+     try {
+       return Files.toString(new File(config.getTemplatesPath(), filename), Charsets.UTF_8);
+     } catch (final IOException exc) {
+       final String errmsg =
+           String.format("Cannot find %s file in gerrit etc dir. Please check your gerrit configuration", filename);
+       log.error(errmsg);
+       return errmsg;
+     }
+   }
+
+  private void applyComment(final int number, ReviewInput comment) throws RestApiException, OrmException, IOException, NoSuchChangeException {
+    final RevisionResource r = atomicityHelper.getRevisionResource(number);
+    reviewer.get().apply(r, comment);
   }
 }
diff --git a/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java b/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java
index ab0053f..3ff50ee 100644
--- a/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java
+++ b/src/test/java/com/criteo/gerrit/plugins/automerge/AutomergeConfigTest.java
@@ -36,12 +36,10 @@
 
       conf.setString(AutomergeConfig.AUTOMERGE_SECTION, null, AutomergeConfig.BOT_EMAIL_KEY, "Foo@bar.com");
       conf.setString(AutomergeConfig.AUTOMERGE_SECTION, null, AutomergeConfig.TOPIC_PREFIX_KEY, "fake_topic_prefix");
-      conf.setString(AutomergeConfig.AUTOMERGE_SECTION, null, AutomergeConfig.COMMENT_PREFIX_KEY, "fake_comment_prefix");
 
       final AutomergeConfig amconf = new AutomergeConfig(conf, paths);
       assertEquals(amconf.getBotEmail(), "Foo@bar.com");
       assertEquals(amconf.getTopicPrefix(), "fake_topic_prefix");
-      assertEquals(amconf.getCommentPrefix(), "fake_comment_prefix");
     } catch (final FileNotFoundException e) {
       fail();
     }
diff --git a/tests.txt b/tests.txt
index 1bd34d2..02ea468 100644
--- a/tests.txt
+++ b/tests.txt
@@ -1,9 +1,23 @@
-Create review1 on repo1.
-Create review1b on top of review1. Set the topic to "crossrepo/test":
+One repo:
+
+Create review0 on repo1.
+Create review0b on top of review1. Set the topic to "crossrepo/test":
   log: Setting -1
   qabot Code-review -1
   message: "This review depends on an unmerged commit."
-Abandon review1b
+Abandon review0b
+Create a parallel review0c on repo1 that conflicts with review0.
+Submit review0c.
+Approve review0:
+  logged: "Change %d is submittable. Will try to merge all related changes."
+  comment: "This review is not mergeable because there is a conflict."
+Make review0 mergeable by rebasing.
+approve review0:
+  merged: review0
+
+Two repos:
+
+Create review1 on repo1.
 Set to the topic of review1 to "crossrepo/test":
   message: "This review is a cross-repo refactoring. It will be merged when all dependant reviews are mergeable."
   logged: "Detected atomic review on change xxx."
@@ -14,7 +28,8 @@
   logged: "Change %d is submittable. Will try to merge all related changes."
 Approve review1 but make it not mergeable (merge an other review that conflicts), then comment on review2: 
   logged: "Change %d is submittable. Will try to merge all related changes."
-  comment: "Some related reviews to this cross-repo refactoring are not mergeable yet."
+  comment: "This review is not mergeable because there is a conflict."
 Make review1 mergeable:
   log DEBUG: "Change %d is mergeable"
   merged: review1 and review2
+