Merge changes Ib36ba8ba,Id988bce9

* changes:
  MergeOp: Always retain canMergeFlag on reset
  RebaseIfNecessary: Don't copy approvals
This commit is contained in:
Edwin Kempin
2016-02-01 08:20:06 +00:00
committed by Gerrit Code Review
5 changed files with 18 additions and 34 deletions

View File

@@ -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);

View File

@@ -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;

View File

@@ -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,

View File

@@ -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);
}
}

View File

@@ -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,