diff options
author | David Pursehouse <dpursehouse@collab.net> | 2016-11-08 17:33:37 +0900 |
---|---|---|
committer | David Pursehouse <dpursehouse@collab.net> | 2016-11-08 19:02:31 +0900 |
commit | 6d4ae7304040eff49ee8507f245db7b2545b9e3e (patch) | |
tree | 8adef3f8e4d1a181c03d36571f39a39e0267234f | |
parent | 0ff3e30ef25f6a3a15cc52537d448f087282e47a (diff) | |
parent | 3f1de3315de6ba21e80161268a3c38cc8bb16879 (diff) |
Merge branch 'stable-2.12' into stable-2.13
* stable-2.12:
Set version to 2.12.6
Fix formatting of Apache Derby database documentation
CherryPick: Update mergeTip for every cherry-pick
AbstractSubmit: Add more assertions in submitWholeTopic
Notice merged commits even if they appear on a different branch
MergeTip: Expose initial tip
Change-Id: I3aff16da2febf3ee8b2aaccd6175a9c9295dcb12
5 files changed, 56 insertions, 19 deletions
diff --git a/Documentation/database-setup.txt b/Documentation/database-setup.txt index 08d0a54176..0f73bd3e3e 100644 --- a/Documentation/database-setup.txt +++ b/Documentation/database-setup.txt @@ -25,12 +25,13 @@ If Derby is selected, Gerrit will automatically set up the embedded Derby database as backend so no set up or configuration is necessary. Currently only support for embedded mode is added. There are two other -deployment options for Apache Derby that can be added later [1]: -+ -* Derby Network Server (standalone mode) -* Embedded Server (hybrid mode) -+ -[1] http://db.apache.org/derby/papers/DerbyTut/ns_intro.html#ns +deployment options for Apache Derby that can be added later: + +* link:http://db.apache.org/derby/papers/DerbyTut/ns_intro.html#Network+Server+Options[ +Derby Network Server (standalone mode)] + +* link:http://db.apache.org/derby/papers/DerbyTut/ns_intro.html#Embedded+Server[ +Embedded Server (hybrid mode)] [[createdb_postgres]] === PostgreSQL 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 f5b4473103..2424620629 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 @@ -52,6 +52,7 @@ import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.ApprovalsUtil; import com.google.gerrit.server.change.RevisionResource; import com.google.gerrit.server.change.Submit; +import com.google.gerrit.server.git.ProjectConfig; import com.google.gerrit.server.notedb.ChangeNotes; import com.google.gerrit.testutil.ConfigSuite; import com.google.gerrit.testutil.TestTimeUtil; @@ -199,6 +200,39 @@ public abstract class AbstractSubmit extends AbstractDaemonTest { "A change to be submitted with " + num + " is not visible"); } + @Test + public void submitChangeWhenParentOfOtherBranchTip() throws Exception { + // Chain of two commits + // Push both to topic-branch + // Push the first commit for review and submit + // + // C2 -- tip of topic branch + // | + // C1 -- pushed for review + // | + // C0 -- Master + // + ProjectConfig config = projectCache.checkedGet(project).getConfig(); + config.getProject().setCreateNewChangeForAllNotInTarget( + InheritableBoolean.TRUE); + saveProjectConfig(project, config); + + PushOneCommit push1 = pushFactory.create(db, admin.getIdent(), testRepo, + PushOneCommit.SUBJECT, "a.txt", "content"); + PushOneCommit.Result c1 = push1.to("refs/heads/topic"); + c1.assertOkStatus(); + PushOneCommit push2 = pushFactory.create(db, admin.getIdent(), testRepo, + PushOneCommit.SUBJECT, "b.txt", "anotherContent"); + PushOneCommit.Result c2 = push2.to("refs/heads/topic"); + c2.assertOkStatus(); + + PushOneCommit.Result change1 = push1.to("refs/for/master"); + change1.assertOkStatus(); + + approve(change1.getChangeId()); + submit(change1.getChangeId()); + } + private void assertSubmitter(PushOneCommit.Result change) throws Exception { ChangeInfo info = get(change.getChangeId(), ListChangesOption.MESSAGES); assertThat(info.messages).isNotNull(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java index 89ec1d6a27..43d88e528f 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java @@ -682,7 +682,10 @@ public class MergeUtil { rw.sort(RevSort.REVERSE, true); rw.markStart(mergeTip); for (RevCommit c : alreadyAccepted) { - rw.markUninteresting(c); + // If branch was not created by this submit. + if (c != mergeTip) { + rw.markUninteresting(c); + } } CodeReviewCommit c; 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 5952602492..4aedcd3997 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 @@ -32,13 +32,13 @@ import java.util.Set; public class RebaseSorter { private final CodeReviewRevWalk rw; private final RevFlag canMergeFlag; - private final Set<RevCommit> accepted; + private final RevCommit initialTip; - public RebaseSorter(CodeReviewRevWalk rw, Set<RevCommit> alreadyAccepted, + public RebaseSorter(CodeReviewRevWalk rw, RevCommit initialTip, RevFlag canMergeFlag) { this.rw = rw; this.canMergeFlag = canMergeFlag; - this.accepted = alreadyAccepted; + this.initialTip = initialTip; } public List<CodeReviewCommit> sort(Collection<CodeReviewCommit> incoming) @@ -50,11 +50,8 @@ public class RebaseSorter { rw.resetRetain(canMergeFlag); rw.markStart(n); - for (RevCommit c : accepted) { - // n also tip of directly pushed branch => n remains 'interesting' here - if (!c.equals(n)) { - rw.markUninteresting(c); - } + if (initialTip != null) { + rw.markUninteresting(initialTip); } CodeReviewCommit c; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java index f183772d83..a9853c1b11 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java @@ -31,6 +31,8 @@ import com.google.gerrit.server.project.InvalidChangeOperationException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gwtorm.server.OrmException; +import org.eclipse.jgit.revwalk.RevCommit; + import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -45,7 +47,7 @@ public class RebaseIfNecessary extends SubmitStrategy { @Override public List<SubmitStrategyOp> buildOps( Collection<CodeReviewCommit> toMerge) throws IntegrationException { - List<CodeReviewCommit> sorted = sort(toMerge); + List<CodeReviewCommit> sorted = sort(toMerge, args.mergeTip.getCurrentTip()); List<SubmitStrategyOp> ops = new ArrayList<>(sorted.size()); boolean first = true; @@ -212,11 +214,11 @@ public class RebaseIfNecessary extends SubmitStrategy { args.alreadyAccepted.add(mergeTip.getCurrentTip()); } - private List<CodeReviewCommit> sort(Collection<CodeReviewCommit> toSort) - throws IntegrationException { + private List<CodeReviewCommit> sort(Collection<CodeReviewCommit> toSort, + RevCommit initialTip) throws IntegrationException { try { return new RebaseSorter( - args.rw, args.alreadyAccepted, args.canMergeFlag).sort(toSort); + args.rw, initialTip, args.canMergeFlag).sort(toSort); } catch (IOException e) { throw new IntegrationException("Commit sorting failed", e); } |