MergeTip: Record ObjectIds instead of Strings

The values in the map of original commits to merge results are really
object IDs. Use the actual ObjectId type instead of materializing them
to strings, which hurts readability and performance.

Change-Id: I2b59f19ff82def9119cf49e9ec162d73d9cd5ca7
This commit is contained in:
Dave Borowitz
2015-02-17 16:24:11 -08:00
parent d89a1cccae
commit e7f7f9530b
7 changed files with 27 additions and 26 deletions

View File

@@ -612,7 +612,7 @@ public class MergeOp {
idstr, ps.getId()); idstr, ps.getId());
commit.setStatusCode(CommitMergeStatus.ALREADY_MERGED); commit.setStatusCode(CommitMergeStatus.ALREADY_MERGED);
try { try {
setMerged(chg, null, commit.getName()); setMerged(chg, null, commit);
} catch (OrmException e) { } catch (OrmException e) {
logError("Cannot mark change " + chg.getId() + " merged", e); logError("Cannot mark change " + chg.getId() + " merged", e);
} }
@@ -776,10 +776,9 @@ public class MergeOp {
String txt = s.getMessage(); String txt = s.getMessage();
logDebug("Status of change {} ({}) on {}: {}", c.getId(), commit.name(), logDebug("Status of change {} ({}) on {}: {}", c.getId(), commit.name(),
c.getDest(), s); c.getDest(), s);
String commitName = commit.getName();
// If mergeTip is null merge failed and mergeResultRev will not be read. // If mergeTip is null merge failed and mergeResultRev will not be read.
String mergeResultRev = ObjectId mergeResultRev =
mergeTip != null ? mergeTip.getMergeResults().get(commitName) : null; mergeTip != null ? mergeTip.getMergeResults().get(commit) : null;
try { try {
switch (s) { switch (s) {
case CLEAN_MERGE: case CLEAN_MERGE:
@@ -948,7 +947,7 @@ public class MergeOp {
return m; return m;
} }
private void setMerged(Change c, ChangeMessage msg, String mergeResultRev) private void setMerged(Change c, ChangeMessage msg, ObjectId mergeResultRev)
throws OrmException, IOException { throws OrmException, IOException {
logDebug("Setting change {} merged", c.getId()); logDebug("Setting change {} merged", c.getId());
ChangeUpdate update = null; ChangeUpdate update = null;
@@ -985,7 +984,7 @@ public class MergeOp {
try { try {
hooks.doChangeMergedHook(c, hooks.doChangeMergedHook(c,
accountCache.get(submitter.getAccountId()).getAccount(), accountCache.get(submitter.getAccountId()).getAccount(),
merged, db, mergeResultRev); merged, db, mergeResultRev.name());
} catch (OrmException ex) { } catch (OrmException ex) {
logError("Cannot run hook for submitted patch set " + c.getId(), ex); logError("Cannot run hook for submitted patch set " + c.getId(), ex);
} }

View File

@@ -19,6 +19,8 @@ import static com.google.common.base.Preconditions.checkArgument;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.gerrit.common.Nullable; import com.google.gerrit.common.Nullable;
import org.eclipse.jgit.lib.ObjectId;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
@@ -32,7 +34,7 @@ import java.util.Map;
*/ */
public class MergeTip { public class MergeTip {
private CodeReviewCommit branchTip; private CodeReviewCommit branchTip;
private Map<String,String> mergeResults; private Map<ObjectId, ObjectId> mergeResults;
/** /**
* @param initial Tip before the merge operation; may be null, indicating an * @param initial Tip before the merge operation; may be null, indicating an
@@ -48,7 +50,7 @@ public class MergeTip {
this.branchTip = initial; this.branchTip = initial;
// Assume fast-forward merge until opposite is proven. // Assume fast-forward merge until opposite is proven.
for (CodeReviewCommit commit : toMerge) { for (CodeReviewCommit commit : toMerge) {
mergeResults.put(commit.getName(), commit.getName()); mergeResults.put(commit.copy(), commit.copy());
} }
} }
@@ -56,12 +58,12 @@ public class MergeTip {
* Moves this MergeTip to newTip and appends mergeResult. * Moves this MergeTip to newTip and appends mergeResult.
* *
* @param newTip The new tip; may not be null. * @param newTip The new tip; may not be null.
* @param mergedFrom The result of the merge of newTip. * @param mergedFrom The result of the merge of {@code newTip}.
*/ */
public void moveTipTo(CodeReviewCommit newTip, String mergedFrom) { public void moveTipTo(CodeReviewCommit newTip, ObjectId mergedFrom) {
checkArgument(newTip != null); checkArgument(newTip != null);
branchTip = newTip; branchTip = newTip;
mergeResults.put(mergedFrom, newTip.getName()); mergeResults.put(mergedFrom, newTip.copy());
} }
/** /**
@@ -70,7 +72,7 @@ public class MergeTip {
* @return The merge results of the merge operation as a map of SHA-1 to be * @return The merge results of the merge operation as a map of SHA-1 to be
* merged to SHA-1 of the merge result. * merged to SHA-1 of the merge result.
*/ */
public Map<String, String> getMergeResults() { public Map<ObjectId, ObjectId> getMergeResults() {
return mergeResults; return mergeResults;
} }

View File

@@ -108,7 +108,7 @@ public class CherryPick extends SubmitStrategy {
try { try {
CodeReviewCommit merge = CodeReviewCommit merge =
writeCherryPickCommit(mergeTip.getCurrentTip(), n); writeCherryPickCommit(mergeTip.getCurrentTip(), n);
mergeTip.moveTipTo(merge, merge.getName()); mergeTip.moveTipTo(merge, merge);
newCommits.put(mergeTip.getCurrentTip().getPatchsetId() newCommits.put(mergeTip.getCurrentTip().getPatchsetId()
.getParentKey(), mergeTip.getCurrentTip()); .getParentKey(), mergeTip.getCurrentTip());
return mergeTip; return mergeTip;
@@ -130,12 +130,12 @@ public class CherryPick extends SubmitStrategy {
// was configured. // was configured.
if (!args.mergeUtil.hasMissingDependencies(args.mergeSorter, n)) { if (!args.mergeUtil.hasMissingDependencies(args.mergeSorter, n)) {
if (args.rw.isMergedInto(mergeTip.getCurrentTip(), n)) { if (args.rw.isMergedInto(mergeTip.getCurrentTip(), n)) {
mergeTip.moveTipTo(n, n.getName()); mergeTip.moveTipTo(n, n);
} else { } else {
CodeReviewCommit result = args.mergeUtil.mergeOneCommit( CodeReviewCommit result = args.mergeUtil.mergeOneCommit(
args.serverIdent.get(), args.repo, args.rw, args.inserter, args.serverIdent.get(), args.repo, args.rw, args.inserter,
args.canMergeFlag, args.destBranch, mergeTip.getCurrentTip(), n); args.canMergeFlag, args.destBranch, mergeTip.getCurrentTip(), n);
mergeTip.moveTipTo(result, n.getName()); mergeTip.moveTipTo(result, n);
} }
PatchSetApproval submitApproval = args.mergeUtil.markCleanMerges(args.rw, PatchSetApproval submitApproval = args.mergeUtil.markCleanMerges(args.rw,
args.canMergeFlag, mergeTip.getCurrentTip(), args.alreadyAccepted); args.canMergeFlag, mergeTip.getCurrentTip(), args.alreadyAccepted);

View File

@@ -36,7 +36,7 @@ public class FastForwardOnly extends SubmitStrategy {
args.mergeSorter, toMerge); args.mergeSorter, toMerge);
final CodeReviewCommit newMergeTipCommit = final CodeReviewCommit newMergeTipCommit =
args.mergeUtil.getFirstFastForward(branchTip, args.rw, sorted); args.mergeUtil.getFirstFastForward(branchTip, args.rw, sorted);
mergeTip.moveTipTo(newMergeTipCommit, newMergeTipCommit.getName()); mergeTip.moveTipTo(newMergeTipCommit, newMergeTipCommit);
while (!sorted.isEmpty()) { while (!sorted.isEmpty()) {
final CodeReviewCommit n = sorted.remove(0); final CodeReviewCommit n = sorted.remove(0);

View File

@@ -46,7 +46,7 @@ public class MergeAlways extends SubmitStrategy {
args.mergeUtil.mergeOneCommit(args.serverIdent.get(), args.repo, args.rw, args.mergeUtil.mergeOneCommit(args.serverIdent.get(), args.repo, args.rw,
args.inserter, args.canMergeFlag, args.destBranch, mergeTip.getCurrentTip(), args.inserter, args.canMergeFlag, args.destBranch, mergeTip.getCurrentTip(),
mergedFrom); mergedFrom);
mergeTip.moveTipTo(newTip, mergedFrom.getName()); mergeTip.moveTipTo(newTip, mergedFrom);
} }
final PatchSetApproval submitApproval = final PatchSetApproval submitApproval =

View File

@@ -43,7 +43,7 @@ public class MergeIfNecessary extends SubmitStrategy {
branchTip = branchTip =
args.mergeUtil.getFirstFastForward(branchTip, args.rw, sorted); args.mergeUtil.getFirstFastForward(branchTip, args.rw, sorted);
} }
mergeTip.moveTipTo(branchTip, branchTip.getName()); mergeTip.moveTipTo(branchTip, branchTip);
// For every other commit do a pair-wise merge. // For every other commit do a pair-wise merge.
while (!sorted.isEmpty()) { while (!sorted.isEmpty()) {
@@ -52,7 +52,7 @@ public class MergeIfNecessary extends SubmitStrategy {
args.mergeUtil.mergeOneCommit(args.serverIdent.get(), args.repo, args.mergeUtil.mergeOneCommit(args.serverIdent.get(), args.repo,
args.rw, args.inserter, args.canMergeFlag, args.destBranch, args.rw, args.inserter, args.canMergeFlag, args.destBranch,
branchTip, mergedFrom); branchTip, mergedFrom);
mergeTip.moveTipTo(branchTip, mergedFrom.getName()); mergeTip.moveTipTo(branchTip, mergedFrom);
} }
final PatchSetApproval submitApproval = final PatchSetApproval submitApproval =

View File

@@ -68,7 +68,7 @@ public class RebaseIfNecessary extends SubmitStrategy {
// create the branch. // create the branch.
// //
n.setStatusCode(CommitMergeStatus.CLEAN_MERGE); n.setStatusCode(CommitMergeStatus.CLEAN_MERGE);
mergeTip.moveTipTo(n, n.getName()); mergeTip.moveTipTo(n, n);
} else if (n.getParentCount() == 0) { } else if (n.getParentCount() == 0) {
// Refuse to merge a root commit into an existing branch, // Refuse to merge a root commit into an existing branch,
@@ -80,7 +80,7 @@ public class RebaseIfNecessary extends SubmitStrategy {
if (args.mergeUtil.canFastForward(args.mergeSorter, if (args.mergeUtil.canFastForward(args.mergeSorter,
mergeTip.getCurrentTip(), args.rw, n)) { mergeTip.getCurrentTip(), args.rw, n)) {
n.setStatusCode(CommitMergeStatus.CLEAN_MERGE); n.setStatusCode(CommitMergeStatus.CLEAN_MERGE);
mergeTip.moveTipTo(n, n.getName()); mergeTip.moveTipTo(n, n);
} else { } else {
try { try {
@@ -101,9 +101,9 @@ public class RebaseIfNecessary extends SubmitStrategy {
// rebaseChange.rebase() may already have copied some approvals, // rebaseChange.rebase() may already have copied some approvals,
// use upsert, not insert, to avoid constraint violation on database // use upsert, not insert, to avoid constraint violation on database
args.db.patchSetApprovals().upsert(approvals); args.db.patchSetApprovals().upsert(approvals);
mergeTip.moveTipTo((CodeReviewCommit) args.rw.parseCommit(ObjectId CodeReviewCommit newTip = (CodeReviewCommit) args.rw.parseCommit(
.fromString(newPatchSet.getRevision().get())), newPatchSet ObjectId.fromString(newPatchSet.getRevision().get()));
.getRevision().get()); mergeTip.moveTipTo(newTip, newTip);
n.change().setCurrentPatchSet( n.change().setCurrentPatchSet(
patchSetInfoFactory.get(mergeTip.getCurrentTip(), patchSetInfoFactory.get(mergeTip.getCurrentTip(),
newPatchSet.getId())); newPatchSet.getId()));
@@ -133,12 +133,12 @@ public class RebaseIfNecessary extends SubmitStrategy {
// //
try { try {
if (args.rw.isMergedInto(mergeTip.getCurrentTip(), n)) { if (args.rw.isMergedInto(mergeTip.getCurrentTip(), n)) {
mergeTip.moveTipTo(n, n.getName()); mergeTip.moveTipTo(n, n);
} else { } else {
mergeTip.moveTipTo( mergeTip.moveTipTo(
args.mergeUtil.mergeOneCommit(args.serverIdent.get(), args.mergeUtil.mergeOneCommit(args.serverIdent.get(),
args.repo, args.rw, args.inserter, args.canMergeFlag, args.repo, args.rw, args.inserter, args.canMergeFlag,
args.destBranch, mergeTip.getCurrentTip(), n), n.getName()); args.destBranch, mergeTip.getCurrentTip(), n), n);
} }
PatchSetApproval submitApproval = PatchSetApproval submitApproval =
args.mergeUtil.markCleanMerges(args.rw, args.canMergeFlag, args.mergeUtil.markCleanMerges(args.rw, args.canMergeFlag,