Merge changes Ib36ba8ba,Id988bce9
* changes: MergeOp: Always retain canMergeFlag on reset RebaseIfNecessary: Don't copy approvals
This commit is contained in:
@@ -135,6 +135,7 @@ public class MergeOp implements AutoCloseable {
|
||||
rw.sort(RevSort.COMMIT_TIME_DESC, true);
|
||||
rw.setRetainBody(false);
|
||||
canMergeFlag = rw.newFlag("CAN_MERGE");
|
||||
rw.retainOnReset(canMergeFlag);
|
||||
|
||||
ins = repo.newObjectInserter();
|
||||
branches = Maps.newHashMapWithExpectedSize(1);
|
||||
|
@@ -452,21 +452,20 @@ public class MergeUtil {
|
||||
|
||||
public CodeReviewCommit mergeOneCommit(PersonIdent author,
|
||||
PersonIdent committer, Repository repo, CodeReviewRevWalk rw,
|
||||
ObjectInserter inserter, RevFlag canMergeFlag, Branch.NameKey destBranch,
|
||||
ObjectInserter inserter, Branch.NameKey destBranch,
|
||||
CodeReviewCommit mergeTip, CodeReviewCommit n)
|
||||
throws IntegrationException {
|
||||
final ThreeWayMerger m = newThreeWayMerger(repo, inserter);
|
||||
try {
|
||||
if (m.merge(new AnyObjectId[] {mergeTip, n})) {
|
||||
return writeMergeCommit(author, committer, rw, inserter, canMergeFlag,
|
||||
destBranch, mergeTip, m.getResultTreeId(), n);
|
||||
return writeMergeCommit(author, committer, rw, inserter, destBranch,
|
||||
mergeTip, m.getResultTreeId(), n);
|
||||
} else {
|
||||
failed(rw, canMergeFlag, mergeTip, n, CommitMergeStatus.PATH_CONFLICT);
|
||||
failed(rw, mergeTip, n, CommitMergeStatus.PATH_CONFLICT);
|
||||
}
|
||||
} catch (NoMergeBaseException e) {
|
||||
try {
|
||||
failed(rw, canMergeFlag, mergeTip, n,
|
||||
getCommitMergeStatus(e.getReason()));
|
||||
failed(rw, mergeTip, n, getCommitMergeStatus(e.getReason()));
|
||||
} catch (IOException e2) {
|
||||
throw new IntegrationException("Cannot merge " + n.name(), e);
|
||||
}
|
||||
@@ -489,10 +488,9 @@ public class MergeUtil {
|
||||
}
|
||||
|
||||
private static CodeReviewCommit failed(CodeReviewRevWalk rw,
|
||||
RevFlag canMergeFlag, CodeReviewCommit mergeTip, CodeReviewCommit n,
|
||||
CommitMergeStatus failure)
|
||||
CodeReviewCommit mergeTip, CodeReviewCommit n, CommitMergeStatus failure)
|
||||
throws MissingObjectException, IncorrectObjectTypeException, IOException {
|
||||
rw.resetRetain(canMergeFlag);
|
||||
rw.reset();
|
||||
rw.markStart(n);
|
||||
rw.markUninteresting(mergeTip);
|
||||
CodeReviewCommit failed;
|
||||
@@ -504,12 +502,11 @@ public class MergeUtil {
|
||||
|
||||
public CodeReviewCommit writeMergeCommit(PersonIdent author,
|
||||
PersonIdent committer, CodeReviewRevWalk rw, ObjectInserter inserter,
|
||||
RevFlag canMergeFlag, Branch.NameKey destBranch,
|
||||
CodeReviewCommit mergeTip, ObjectId treeId, CodeReviewCommit n)
|
||||
throws IOException, MissingObjectException,
|
||||
Branch.NameKey destBranch, CodeReviewCommit mergeTip, ObjectId treeId,
|
||||
CodeReviewCommit n) throws IOException, MissingObjectException,
|
||||
IncorrectObjectTypeException {
|
||||
final List<CodeReviewCommit> merged = new ArrayList<>();
|
||||
rw.resetRetain(canMergeFlag);
|
||||
rw.reset();
|
||||
rw.markStart(n);
|
||||
rw.markUninteresting(mergeTip);
|
||||
CodeReviewCommit crc;
|
||||
|
@@ -187,9 +187,8 @@ public class CherryPick extends SubmitStrategy {
|
||||
} else {
|
||||
PersonIdent myIdent = new PersonIdent(args.serverIdent, ctx.getWhen());
|
||||
CodeReviewCommit result = args.mergeUtil.mergeOneCommit(myIdent,
|
||||
myIdent, args.repo, args.rw, args.inserter,
|
||||
args.canMergeFlag, args.destBranch, mergeTip.getCurrentTip(),
|
||||
toMerge);
|
||||
myIdent, args.repo, args.rw, args.inserter, args.destBranch,
|
||||
mergeTip.getCurrentTip(), toMerge);
|
||||
mergeTip.moveTipTo(result, toMerge);
|
||||
}
|
||||
args.mergeUtil.markCleanMerges(args.rw, args.canMergeFlag,
|
||||
|
@@ -42,8 +42,8 @@ class MergeOneOp extends SubmitStrategyOp {
|
||||
// BatchUpdate how to produce CodeReviewRevWalks.
|
||||
CodeReviewCommit merged =
|
||||
args.mergeUtil.mergeOneCommit(caller, args.serverIdent,
|
||||
ctx.getRepository(), args.rw, ctx.getInserter(), args.canMergeFlag,
|
||||
args.destBranch, args.mergeTip.getCurrentTip(), toMerge);
|
||||
ctx.getRepository(), args.rw, ctx.getInserter(), args.destBranch,
|
||||
args.mergeTip.getCurrentTip(), toMerge);
|
||||
args.mergeTip.moveTipTo(merged, toMerge);
|
||||
}
|
||||
}
|
||||
|
@@ -14,12 +14,10 @@
|
||||
|
||||
package com.google.gerrit.server.git.strategy;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gerrit.extensions.restapi.MergeConflictException;
|
||||
import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||
import com.google.gerrit.reviewdb.client.PatchSet;
|
||||
import com.google.gerrit.reviewdb.client.PatchSetApproval;
|
||||
import com.google.gerrit.server.change.RebaseChangeOp;
|
||||
import com.google.gerrit.server.git.BatchUpdate.ChangeContext;
|
||||
import com.google.gerrit.server.git.BatchUpdate.Context;
|
||||
@@ -125,7 +123,7 @@ public class RebaseIfNecessary extends SubmitStrategy {
|
||||
rebaseOp = args.rebaseFactory.create(
|
||||
toMerge.getControl(), origPs, args.mergeTip.getCurrentTip().name())
|
||||
.setRunHooks(false)
|
||||
// Bypass approval copier since we're going to copy all approvals
|
||||
// Bypass approval copier since SubmitStrategyOp copy all approvals
|
||||
// later anyway.
|
||||
.setCopyApprovals(false)
|
||||
.setValidatePolicy(CommitValidators.Policy.NONE);
|
||||
@@ -155,18 +153,9 @@ public class RebaseIfNecessary extends SubmitStrategy {
|
||||
}
|
||||
|
||||
rebaseOp.updateChange(ctx);
|
||||
PatchSet.Id newPatchSetId = rebaseOp.getPatchSetId();
|
||||
List<PatchSetApproval> approvals = Lists.newArrayList();
|
||||
// Copy approvals from original patch set.
|
||||
for (PatchSetApproval a : args.approvalsUtil.byPatchSet(ctx.getDb(),
|
||||
ctx.getControl(), toMerge.getPatchsetId())) {
|
||||
approvals.add(new PatchSetApproval(newPatchSetId, a));
|
||||
}
|
||||
args.db.patchSetApprovals().insert(approvals);
|
||||
|
||||
ctx.getChange().setCurrentPatchSet(
|
||||
args.patchSetInfoFactory.get(
|
||||
args.rw, newCommit, newPatchSetId));
|
||||
args.rw, newCommit, rebaseOp.getPatchSetId()));
|
||||
newCommit.setControl(ctx.getControl());
|
||||
return rebaseOp.getPatchSet();
|
||||
}
|
||||
@@ -197,11 +186,9 @@ public class RebaseIfNecessary extends SubmitStrategy {
|
||||
mergeTip.moveTipTo(toMerge, toMerge);
|
||||
acceptMergeTip(mergeTip);
|
||||
} else {
|
||||
// TODO(dborowitz): Can't use repo from ctx due to canMergeFlag.
|
||||
CodeReviewCommit newTip = args.mergeUtil.mergeOneCommit(
|
||||
args.serverIdent, args.serverIdent, args.repo, args.rw,
|
||||
args.inserter, args.canMergeFlag, args.destBranch,
|
||||
mergeTip.getCurrentTip(), toMerge);
|
||||
args.inserter, args.destBranch, mergeTip.getCurrentTip(), toMerge);
|
||||
mergeTip.moveTipTo(newTip, toMerge);
|
||||
}
|
||||
args.mergeUtil.markCleanMerges(args.rw, args.canMergeFlag,
|
||||
|
Reference in New Issue
Block a user