diff --git a/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java b/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java index a4726d1d15..3d0196b5c8 100644 --- a/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java +++ b/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractDaemonTest.java @@ -32,6 +32,8 @@ import com.google.gerrit.common.data.PermissionRule; import com.google.gerrit.extensions.api.GerritApi; import com.google.gerrit.extensions.api.changes.ReviewInput; import com.google.gerrit.extensions.api.changes.RevisionApi; +import com.google.gerrit.extensions.api.projects.BranchApi; +import com.google.gerrit.extensions.api.projects.BranchInput; import com.google.gerrit.extensions.api.projects.ProjectInput; import com.google.gerrit.extensions.client.InheritableBoolean; import com.google.gerrit.extensions.client.ListChangesOption; @@ -40,6 +42,7 @@ import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.common.EditInfo; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.AccountGroup; +import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.AnonymousUser; @@ -424,6 +427,16 @@ public abstract class AbstractDaemonTest { return result; } + protected BranchApi createBranchWithRevision(Branch.NameKey branch, + String revision) throws Exception { + BranchInput in = new BranchInput(); + in.revision = revision; + return gApi.projects() + .name(branch.getParentKey().get()) + .branch(branch.get()) + .create(in); + } + private static final List RANDOM = Chars.asList(new char[]{'a','b','c','d','e','f','g','h'}); protected PushOneCommit.Result amendChange(String changeId) diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java index ef3faa5555..6d74bf22f6 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java @@ -41,6 +41,7 @@ import com.google.gerrit.extensions.client.ListChangesOption; import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.common.LabelInfo; +import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; @@ -273,6 +274,13 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { assertThat(new Account.Id(cr.all.get(0)._accountId)).isEqualTo(admin.getId()); } + protected void assertMerged(PushOneCommit.Result change) + throws RestApiException { + String changeId = change.getChangeId(); + ChangeStatus status = gApi.changes().id(changeId).info().status; + assertThat(status).isEqualTo(ChangeStatus.MERGED); + } + protected void assertPersonEquals(PersonIdent expected, PersonIdent actual) { assertThat(actual.getEmailAddress()) diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByRebaseIfNecessaryIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByRebaseIfNecessaryIT.java index 2270db2296..6d10b6189e 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByRebaseIfNecessaryIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/SubmitByRebaseIfNecessaryIT.java @@ -22,6 +22,8 @@ import com.google.gerrit.acceptance.PushOneCommit; import com.google.gerrit.acceptance.TestProjectInput; import com.google.gerrit.extensions.client.InheritableBoolean; import com.google.gerrit.extensions.client.SubmitType; +import com.google.gerrit.reviewdb.client.Branch; +import com.google.gerrit.reviewdb.client.Project; import org.eclipse.jgit.revwalk.RevCommit; import org.junit.Test; @@ -144,4 +146,19 @@ public class SubmitByRebaseIfNecessaryIT extends AbstractSubmit { approve(id2); submit(id1); } + + @Test + public void submitChangesAfterBranchOnSecond() throws Exception { + PushOneCommit.Result change = createChange(); + approve(change.getChangeId()); + + PushOneCommit.Result change2nd = createChange(); + approve(change2nd.getChangeId()); + Project.NameKey project = change2nd.getChange().change().getProject(); + Branch.NameKey branch = new Branch.NameKey(project, "branch"); + createBranchWithRevision(branch, change2nd.getCommit().getName()); + gApi.changes().id(change2nd.getChangeId()).current().submit(); + assertMerged(change2nd); + assertMerged(change); + } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java index 3ee2a9b68b..16031ac5a9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java @@ -50,7 +50,10 @@ public class RebaseSorter { rw.resetRetain(canMergeFlag); rw.markStart(n); for (RevCommit c : accepted) { - rw.markUninteresting(c); + // n also tip of directly pushed branch => n remains 'interesting' here + if (!c.equals(n)) { + rw.markUninteresting(c); + } } CodeReviewCommit c;