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)