summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Pursehouse <dpursehouse@collab.net>2016-11-08 17:33:37 +0900
committerDavid Pursehouse <dpursehouse@collab.net>2016-11-08 19:02:31 +0900
commit6d4ae7304040eff49ee8507f245db7b2545b9e3e (patch)
tree8adef3f8e4d1a181c03d36571f39a39e0267234f
parent0ff3e30ef25f6a3a15cc52537d448f087282e47a (diff)
parent3f1de3315de6ba21e80161268a3c38cc8bb16879 (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
-rw-r--r--Documentation/database-setup.txt13
-rw-r--r--gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/change/AbstractSubmit.java34
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java5
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/RebaseSorter.java13
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/git/strategy/RebaseIfNecessary.java10
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);
}