MergeSuperSet: collect ancestors for new branches
When pushing changes to a new branch, we need to include all the ancestors into the merge set. Bug: issue 3518 Change-Id: I53e7905704328b0f2e637ba55efef80ead0b897b
This commit is contained in:
@@ -23,8 +23,10 @@ import com.google.gerrit.acceptance.AbstractDaemonTest;
|
|||||||
import com.google.gerrit.acceptance.GitUtil;
|
import com.google.gerrit.acceptance.GitUtil;
|
||||||
import com.google.gerrit.extensions.client.SubmitType;
|
import com.google.gerrit.extensions.client.SubmitType;
|
||||||
import com.google.gerrit.extensions.common.ChangeInfo;
|
import com.google.gerrit.extensions.common.ChangeInfo;
|
||||||
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
import com.google.gerrit.server.git.ProjectConfig;
|
import com.google.gerrit.server.git.ProjectConfig;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.junit.TestRepository;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
import org.eclipse.jgit.revwalk.RevCommit;
|
import org.eclipse.jgit.revwalk.RevCommit;
|
||||||
import org.eclipse.jgit.revwalk.RevWalk;
|
import org.eclipse.jgit.revwalk.RevWalk;
|
||||||
@@ -120,6 +122,28 @@ public class SubmittedTogetherIT extends AbstractDaemonTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNewBranchTwoChangesTogether() throws Exception {
|
||||||
|
Project.NameKey p1 = createProject("a-new-project", null, false);
|
||||||
|
TestRepository<?> repo1 = cloneProject(p1);
|
||||||
|
|
||||||
|
RevCommit c1 = repo1.branch("HEAD").commit().insertChangeId()
|
||||||
|
.add("a.txt", "1")
|
||||||
|
.message("subject: 1")
|
||||||
|
.create();
|
||||||
|
String id1 = GitUtil.getChangeId(repo1, c1).get();
|
||||||
|
pushHead(repo1, "refs/for/master", false);
|
||||||
|
|
||||||
|
RevCommit c2 = repo1.branch("HEAD").commit().insertChangeId()
|
||||||
|
.add("b.txt", "2")
|
||||||
|
.message("subject: 2")
|
||||||
|
.create();
|
||||||
|
String id2 = GitUtil.getChangeId(repo1, c2).get();
|
||||||
|
pushHead(repo1, "refs/for/master", false);
|
||||||
|
assertSubmittedTogether(id1);
|
||||||
|
assertSubmittedTogether(id2, id2, id1);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCherryPickWithoutAncestors() throws Exception {
|
public void testCherryPickWithoutAncestors() throws Exception {
|
||||||
ProjectConfig cfg = projectCache.checkedGet(project).getConfig();
|
ProjectConfig cfg = projectCache.checkedGet(project).getConfig();
|
||||||
|
|||||||
@@ -119,17 +119,14 @@ public class MergeSuperSet {
|
|||||||
Branch.NameKey destBranch = cd.change().getDest();
|
Branch.NameKey destBranch = cd.change().getDest();
|
||||||
repo.getRefDatabase().refresh();
|
repo.getRefDatabase().refresh();
|
||||||
Ref ref = repo.getRefDatabase().getRef(destBranch.get());
|
Ref ref = repo.getRefDatabase().getRef(destBranch.get());
|
||||||
if (ref == null) {
|
|
||||||
ret.add(cd.change());
|
|
||||||
// A new empty branch doesn't have additional changes
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rw.reset();
|
rw.reset();
|
||||||
rw.sort(RevSort.TOPO);
|
rw.sort(RevSort.TOPO);
|
||||||
rw.markStart(commit);
|
rw.markStart(commit);
|
||||||
|
if (ref != null) {
|
||||||
RevCommit head = rw.parseCommit(ref.getObjectId());
|
RevCommit head = rw.parseCommit(ref.getObjectId());
|
||||||
rw.markUninteresting(head);
|
rw.markUninteresting(head);
|
||||||
|
}
|
||||||
|
|
||||||
List<String> hashes = new ArrayList<>();
|
List<String> hashes = new ArrayList<>();
|
||||||
for (RevCommit c : rw) {
|
for (RevCommit c : rw) {
|
||||||
|
|||||||
Reference in New Issue
Block a user