Fix wrong "Code Review -1" on cross-repo below independent review
Before this fix, a cross-repo could receive a non blocking "Code
Review -1" with a message stating that it was depending on a
non-merged review. This was wrong as the non-merged review was above
and not below the cross-repo.
Change-Id: Icb772439294dacec56e80f99b45afdc85961939b
diff --git a/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java b/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
index 5cadfbf..834df61 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AtomicityHelper.java
@@ -2,6 +2,7 @@
import com.google.gerrit.common.data.SubmitRecord;
import com.google.gerrit.extensions.api.changes.SubmitInput;
+import com.google.gerrit.extensions.client.ChangeStatus;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Project;
@@ -10,6 +11,7 @@
import com.google.gerrit.server.account.AccountByEmailCache;
import com.google.gerrit.server.change.ChangesCollection;
import com.google.gerrit.server.change.GetRelated;
+import com.google.gerrit.server.change.GetRelated.ChangeAndCommit;
import com.google.gerrit.server.change.GetRelated.RelatedInfo;
import com.google.gerrit.server.change.PostReview;
import com.google.gerrit.server.change.RevisionResource;
@@ -82,7 +84,29 @@
RevisionResource r = getRevisionResource(project, number);
RelatedInfo related = getRelated.apply(r);
log.debug(String.format("Checking for related changes on review %d", number));
- return related.changes.size() > 0;
+
+ String checkedCommitSha1 = r.getPatchSet().getRevision().get();
+ int firstParentIndex = 0;
+ int i = 0;
+ for (ChangeAndCommit c: related.changes) {
+ if (checkedCommitSha1.equals(c.commit.commit)) {
+ firstParentIndex = i+1;
+ log.debug(String.format("First parent index on review %d is %d on commit %s", number, firstParentIndex, c.commit.commit));
+ break;
+ }
+ i++;
+ }
+
+ boolean hasNonMergedParent = false;
+ for (ChangeAndCommit c: related.changes.subList(firstParentIndex, related.changes.size())) {
+ if (!ChangeStatus.MERGED.toString().equals(c.status)) {
+ log.info(String.format("Found non merged parent commit on review %d: %s", number, c.commit.commit));
+ hasNonMergedParent = true;
+ break;
+ }
+ }
+
+ return hasNonMergedParent;
}
/**