Prevents merge of non mergeable crossrepos when processing RefUpdatedEvent
This was introduced by
2425dfcfb Expand AutomaticSubmit to whole branch/project.
which allowed to submit changes that become "submittable" after a merge.
This fix applies the same policy to define "submittable" as for the
other commits.
Change-Id: I317c33ced201fe3359c1ebf69cd0233c1b567ef8
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 71097aa..ce7384f 100644
--- a/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
+++ b/src/main/java/com/criteo/gerrit/plugins/automerge/AutomaticMerger.java
@@ -159,8 +159,8 @@
+ " during update of ref "
+ refName
+ ": Submitting ...");
- atomicityHelper.mergeReview(submittable.project, submittable._number);
- } catch (RestApiException | OrmException | IOException e) {
+ autoSubmitIfMergeable(Change.from(submittable));
+ } catch (UpdateException | RestApiException | OrmException | IOException e) {
log.error(
"Cannot autosubmit change "
+ submittable._number
diff --git a/test.rb b/test.rb
index 636acbb..a03331a 100755
--- a/test.rb
+++ b/test.rb
@@ -73,6 +73,35 @@
check_status(commit2, 'MERGED')
end
+ def test_refupdatedevent_merge_upper_commit
+ commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
+ commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}")
+ approve_review(commit1b)
+ check_status(commit1a, 'NEW')
+ check_status(commit1b, 'NEW')
+
+ approve_review(commit1a)
+
+ check_status(commit1a, 'MERGED')
+ check_status(commit1b, '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")
+ 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(commit1a)
+
+ check_status(commit1a, 'MERGED')
+ check_status(commit1b, 'NEW')
+ check_status(commit2, 'NEW')
+ end
+
def test_two_reviews_with_same_changed_id
commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}")
change_id = read_change_id(PROJECT1)