Convert remaining submit strategies to BatchUpdate
Reuse the helper operations from the previous commit, so these are simple and straightforward. Change-Id: If7914f035905b2052c1c76f0c71daf8162be0e04
This commit is contained in:
@@ -14,9 +14,16 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.git.strategy;
|
package com.google.gerrit.server.git.strategy;
|
||||||
|
|
||||||
|
import static com.google.gerrit.server.git.strategy.MarkCleanMergesOp.anyChangeId;
|
||||||
|
|
||||||
|
import com.google.gerrit.common.TimeUtil;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.server.git.BatchUpdate;
|
||||||
|
import com.google.gerrit.server.git.BatchUpdate.RepoContext;
|
||||||
import com.google.gerrit.server.git.CodeReviewCommit;
|
import com.google.gerrit.server.git.CodeReviewCommit;
|
||||||
import com.google.gerrit.server.git.IntegrationException;
|
import com.google.gerrit.server.git.IntegrationException;
|
||||||
import com.google.gerrit.server.git.MergeTip;
|
import com.google.gerrit.server.git.MergeTip;
|
||||||
|
import com.google.gerrit.server.git.UpdateException;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -27,24 +34,46 @@ public class FastForwardOnly extends SubmitStrategy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MergeTip run(final CodeReviewCommit branchTip,
|
public MergeTip run(CodeReviewCommit branchTip,
|
||||||
final Collection<CodeReviewCommit> toMerge) throws IntegrationException {
|
Collection<CodeReviewCommit> toMerge) throws IntegrationException {
|
||||||
|
List<CodeReviewCommit> sorted =
|
||||||
|
args.mergeUtil.reduceToMinimalMerge(args.mergeSorter, toMerge);
|
||||||
MergeTip mergeTip = new MergeTip(branchTip, toMerge);
|
MergeTip mergeTip = new MergeTip(branchTip, toMerge);
|
||||||
List<CodeReviewCommit> sorted = args.mergeUtil.reduceToMinimalMerge(
|
try (BatchUpdate u = args.newBatchUpdate(TimeUtil.nowTs())) {
|
||||||
args.mergeSorter, toMerge);
|
CodeReviewCommit newTipCommit =
|
||||||
final CodeReviewCommit newMergeTipCommit =
|
args.mergeUtil.getFirstFastForward(branchTip, args.rw, sorted);
|
||||||
args.mergeUtil.getFirstFastForward(branchTip, args.rw, sorted);
|
if (!newTipCommit.equals(branchTip)) {
|
||||||
mergeTip.moveTipTo(newMergeTipCommit, newMergeTipCommit);
|
u.addOp(newTipCommit.change().getId(),
|
||||||
|
new FastForwardOp(mergeTip, newTipCommit));
|
||||||
|
}
|
||||||
|
while (!sorted.isEmpty()) {
|
||||||
|
CodeReviewCommit n = sorted.remove(0);
|
||||||
|
u.addOp(n.change().getId(), new NotFastForwardOp(n));
|
||||||
|
}
|
||||||
|
u.addOp(anyChangeId(toMerge), new MarkCleanMergesOp(args, mergeTip));
|
||||||
|
|
||||||
while (!sorted.isEmpty()) {
|
u.execute();
|
||||||
final CodeReviewCommit n = sorted.remove(0);
|
} catch (RestApiException | UpdateException e) {
|
||||||
n.setStatusCode(CommitMergeStatus.NOT_FAST_FORWARD);
|
if (e.getCause() instanceof IntegrationException) {
|
||||||
|
throw new IntegrationException(e.getCause().getMessage(), e);
|
||||||
|
}
|
||||||
|
throw new IntegrationException(
|
||||||
|
"Cannot fast-forward into " + args.destBranch);
|
||||||
|
}
|
||||||
|
return mergeTip;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class NotFastForwardOp extends BatchUpdate.Op {
|
||||||
|
private final CodeReviewCommit toMerge;
|
||||||
|
|
||||||
|
private NotFastForwardOp(CodeReviewCommit toMerge) {
|
||||||
|
this.toMerge = toMerge;
|
||||||
}
|
}
|
||||||
|
|
||||||
args.mergeUtil.markCleanMerges(args.rw, args.canMergeFlag,
|
@Override
|
||||||
newMergeTipCommit, args.alreadyAccepted);
|
public void updateRepo(RepoContext ctx) {
|
||||||
|
toMerge.setStatusCode(CommitMergeStatus.NOT_FAST_FORWARD);
|
||||||
return mergeTip;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean dryRun(SubmitDryRun.Arguments args,
|
static boolean dryRun(SubmitDryRun.Arguments args,
|
||||||
|
|||||||
@@ -14,11 +14,15 @@
|
|||||||
|
|
||||||
package com.google.gerrit.server.git.strategy;
|
package com.google.gerrit.server.git.strategy;
|
||||||
|
|
||||||
|
import static com.google.gerrit.server.git.strategy.MarkCleanMergesOp.anyChangeId;
|
||||||
|
|
||||||
|
import com.google.gerrit.common.TimeUtil;
|
||||||
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.server.git.BatchUpdate;
|
||||||
import com.google.gerrit.server.git.CodeReviewCommit;
|
import com.google.gerrit.server.git.CodeReviewCommit;
|
||||||
import com.google.gerrit.server.git.IntegrationException;
|
import com.google.gerrit.server.git.IntegrationException;
|
||||||
import com.google.gerrit.server.git.MergeTip;
|
import com.google.gerrit.server.git.MergeTip;
|
||||||
|
import com.google.gerrit.server.git.UpdateException;
|
||||||
import org.eclipse.jgit.lib.PersonIdent;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -31,30 +35,30 @@ public class MergeAlways extends SubmitStrategy {
|
|||||||
@Override
|
@Override
|
||||||
public MergeTip run(CodeReviewCommit branchTip,
|
public MergeTip run(CodeReviewCommit branchTip,
|
||||||
Collection<CodeReviewCommit> toMerge) throws IntegrationException {
|
Collection<CodeReviewCommit> toMerge) throws IntegrationException {
|
||||||
List<CodeReviewCommit> sorted = args.mergeUtil.reduceToMinimalMerge(args.mergeSorter, toMerge);
|
List<CodeReviewCommit> sorted =
|
||||||
MergeTip mergeTip;
|
args.mergeUtil.reduceToMinimalMerge(args.mergeSorter, toMerge);
|
||||||
if (branchTip == null) {
|
MergeTip mergeTip = new MergeTip(branchTip, toMerge);
|
||||||
// The branch is unborn. Take a fast-forward resolution to
|
try (BatchUpdate u = args.newBatchUpdate(TimeUtil.nowTs())) {
|
||||||
// create the branch.
|
if (branchTip == null) {
|
||||||
mergeTip = new MergeTip(sorted.get(0), toMerge);
|
// The branch is unborn. Take a fast-forward resolution to
|
||||||
sorted.remove(0);
|
// create the branch.
|
||||||
} else {
|
CodeReviewCommit first = sorted.remove(0);
|
||||||
mergeTip = new MergeTip(branchTip, toMerge);
|
u.addOp(first.change().getId(), new FastForwardOp(mergeTip, first));
|
||||||
}
|
}
|
||||||
while (!sorted.isEmpty()) {
|
while (!sorted.isEmpty()) {
|
||||||
CodeReviewCommit mergedFrom = sorted.remove(0);
|
CodeReviewCommit n = sorted.remove(0);
|
||||||
PersonIdent caller = args.caller.newCommitterIdent(
|
u.addOp(n.change().getId(), new MergeOneOp(args, mergeTip, n));
|
||||||
args.serverIdent.getWhen(), args.serverIdent.getTimeZone());
|
}
|
||||||
CodeReviewCommit newTip =
|
u.addOp(anyChangeId(toMerge), new MarkCleanMergesOp(args, mergeTip));
|
||||||
args.mergeUtil.mergeOneCommit(caller, args.serverIdent,
|
|
||||||
args.repo, args.rw, args.inserter, args.canMergeFlag,
|
|
||||||
args.destBranch, mergeTip.getCurrentTip(), mergedFrom);
|
|
||||||
mergeTip.moveTipTo(newTip, mergedFrom);
|
|
||||||
}
|
|
||||||
|
|
||||||
args.mergeUtil.markCleanMerges(args.rw, args.canMergeFlag,
|
|
||||||
mergeTip.getCurrentTip(), args.alreadyAccepted);
|
|
||||||
|
|
||||||
|
u.execute();
|
||||||
|
} catch (RestApiException | UpdateException e) {
|
||||||
|
if (e.getCause() instanceof IntegrationException) {
|
||||||
|
throw new IntegrationException(e.getCause().getMessage(), e);
|
||||||
|
}
|
||||||
|
throw new IntegrationException(
|
||||||
|
"Cannot merge into " + args.destBranch);
|
||||||
|
}
|
||||||
return mergeTip;
|
return mergeTip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user