Prevents submission of cross-repo above a non-merged commit
Initial implementation only pushed a "Code Review -1". The submission
is now blocked to prevent partial submission of a cross-repo.
Change-Id: I047573afe100a4cd8743bd0853b16306a51c16e7
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 ce7384f..fcd4b9b 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -230,7 +230,9 @@
if (!info.mergeable) {
mergeable = false;
}
- if (!atomicityHelper.isSubmittable(info.project, info._number)) {
+ boolean passesPrologRules = atomicityHelper.isSubmittable(info.project, info._number);
+ boolean dependsOnNonMergedCommit = atomicityHelper.hasDependentReview(info.project, info._number);
+ if (!passesPrologRules || dependsOnNonMergedCommit) {
submittable = false;
}
}
diff --git a/test.rb b/test.rb
index 65d7e24..f0d8cd0 100755
--- a/test.rb
+++ b/test.rb
@@ -68,11 +68,29 @@
approve_review(commit1)
check_status(commit1, 'NEW')
check_status(commit2, 'NEW')
+
approve_review(commit2)
+
check_status(commit1, 'MERGED')
check_status(commit2, 'MERGED')
end
+ def test_crossrepo_topic_2_repos_above_non_mergeable_commit
+ commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
+ commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")
+ commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
+ approve_review(commit1b)
+ check_status(commit1a, 'NEW')
+ check_status(commit1b, 'NEW')
+ check_status(commit2, 'NEW')
+
+ approve_review(commit2)
+
+ check_status(commit1a, 'NEW')
+ check_status(commit1b, 'NEW')
+ check_status(commit2, 'NEW')
+ end
+
def test_crossrepo_topic_2_repos_below_not_merged_commit
commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}", "crossrepo/topic2")
commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}")
@@ -100,6 +118,23 @@
check_status(commit1b, 'MERGED')
end
+ def test_refupdatedevent_merge_upper_crossrepo
+ commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
+ commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")
+ commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
+ approve_review(commit1b)
+ approve_review(commit2)
+ check_status(commit1a, 'NEW')
+ check_status(commit1b, 'NEW')
+ check_status(commit2, 'NEW')
+
+ approve_review(commit1a)
+
+ check_status(commit1a, 'MERGED')
+ check_status(commit1b, 'MERGED')
+ check_status(commit2, 'MERGED')
+ end
+
def test_refupdatedevent_does_not_merge_non_mergeable_upper_crossrepo
commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")