Defer object flushing when merging

Mergers in the most recent JGit know how to read previously-inserted
objects back, so a series of merges does not require aggressively
flushing the objects. Instead, flush objects in MergeOp just before
updating the relevant refs.

Change-Id: Ia85c5114e86739b4a480bea65f3413fe47cf572d
This commit is contained in:
Dave Borowitz
2013-06-10 16:45:48 -07:00
parent 587c7a235d
commit 5dea1c0fc0
5 changed files with 120 additions and 130 deletions

View File

@@ -430,13 +430,11 @@ public class MergeOp {
String m = "Error opening repository \"" + name.get() + '"';
throw new MergeException(m, err);
}
rw = CodeReviewCommit.newRevWalk(repo);
inserter = repo.newObjectInserter();
rw = CodeReviewCommit.newRevWalk(inserter.newReader());
rw.sort(RevSort.TOPO);
rw.sort(RevSort.COMMIT_TIME_DESC, true);
canMergeFlag = rw.newFlag("CAN_MERGE");
inserter = repo.newObjectInserter();
}
private RefUpdate openBranch()
@@ -674,6 +672,11 @@ public class MergeOp {
+ destProject.getProject().getName(), e);
}
}
try {
inserter.flush();
} catch (IOException e) {
throw new MergeException("Cannot flush merge results", e);
}
branchUpdate.setRefLogIdent(refLogIdent);
branchUpdate.setForceUpdate(false);