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