@Test public void submitChangesAcrossReposBlocked() throws Exception { Project.NameKey p1 = createProject("project-where-we-submit"); Project.NameKey p2 = createProject("project-impacted-via-topic"); Project.NameKey p3 = createProject("project-impacted-indirectly-via-topic"); TestRepository<?> repo1 = cloneProject(p1); TestRepository<?> repo2 = cloneProject(p2); TestRepository<?> repo3 = cloneProject(p3); RevCommit initialHead1 = getRemoteHead(p1, "master"); RevCommit initialHead2 = getRemoteHead(p2, "master"); RevCommit initialHead3 = getRemoteHead(p3, "master"); PushOneCommit.Result change1a = createChange( repo1, "master", "An ancestor of the change we want to submit", "a.txt", "1", "dependent-topic"); PushOneCommit.Result change1b = createChange( repo1, "master", "we're interested to submit this change", "a.txt", "2", "topic-to-submit"); PushOneCommit.Result change2a = createChange(repo2, "master", "indirection level 2a", "a.txt", "1", "topic-indirect"); PushOneCommit.Result change2b = createChange( repo2, "master", "should go in with first change", "a.txt", "2", "dependent-topic"); PushOneCommit.Result change3 = createChange(repo3, "master", "indirection level 2b", "a.txt", "1", "topic-indirect"); // Create a merge conflict for change3 which is only indirectly related // via topics. repo3.reset(initialHead3); PushOneCommit.Result change3Conflict = createChange(repo3, "master", "conflicting change", "a.txt", "2\n2", "conflicting-topic"); submit(change3Conflict.getChangeId()); RevCommit tipConflict = getRemoteLog(p3, "master").get(0); assertThat(tipConflict.getShortMessage()) .isEqualTo(change3Conflict.getCommit().getShortMessage()); approve(change1a.getChangeId()); approve(change2a.getChangeId()); approve(change2b.getChangeId()); approve(change3.getChangeId()); if (isSubmitWholeTopicEnabled()) { submitWithConflict(change1b.getChangeId()); } else { submit(change1b.getChangeId()); } RevCommit tip1 = getRemoteLog(p1, "master").get(0); RevCommit tip2 = getRemoteLog(p2, "master").get(0); RevCommit tip3 = getRemoteLog(p3, "master").get(0); if (isSubmitWholeTopicEnabled()) { assertThat(tip1.getShortMessage()).isEqualTo(initialHead1.getShortMessage()); assertThat(tip2.getShortMessage()).isEqualTo(initialHead2.getShortMessage()); assertThat(tip3.getShortMessage()).isEqualTo(change3Conflict.getCommit().getShortMessage()); assertNoSubmitter(change1a.getChangeId(), 1); assertNoSubmitter(change2a.getChangeId(), 1); assertNoSubmitter(change2b.getChangeId(), 1); assertNoSubmitter(change3.getChangeId(), 1); } else { assertThat(tip1.getShortMessage()).isEqualTo(change1b.getCommit().getShortMessage()); assertThat(tip2.getShortMessage()).isEqualTo(initialHead2.getShortMessage()); assertThat(tip3.getShortMessage()).isEqualTo(change3Conflict.getCommit().getShortMessage()); assertNoSubmitter(change2a.getChangeId(), 1); assertNoSubmitter(change2b.getChangeId(), 1); assertNoSubmitter(change3.getChangeId(), 1); } }