Fetch time is usually dominated by network traffic, but while marking objects reachable locally we can still benefit from the reduction in object allocations this variant of getObjectId offers. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- .../jgit/transport/WalkFetchConnection.java | 29 +++++++++++-------- 1 files changed, 17 insertions(+), 12 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java index 91c5ea8..6300f10 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java +++ b/org.spearce.jgit/src/org/spearce/jgit/transport/WalkFetchConnection.java @@ -59,6 +59,7 @@ import org.spearce.jgit.lib.AnyObjectId; import org.spearce.jgit.lib.Constants; import org.spearce.jgit.lib.FileMode; +import org.spearce.jgit.lib.MutableObjectId; import org.spearce.jgit.lib.ObjectChecker; import org.spearce.jgit.lib.ObjectId; import org.spearce.jgit.lib.PackIndex; @@ -152,6 +153,8 @@ */ private final Set<String> packsConsidered; + private final MutableObjectId idBuffer = new MutableObjectId(); + /** * Errors received while trying to obtain an object. * <p> @@ -300,16 +303,17 @@ private void processTree(final RevObject obj) throws TransportException { switch (sType) { case Constants.OBJ_BLOB: - case Constants.OBJ_TREE: { - final ObjectId sId = treeWalk.getObjectId(0); - needs(revWalk.lookupAny(sId, sType)); + case Constants.OBJ_TREE: + treeWalk.getObjectId(idBuffer, 0); + needs(revWalk.lookupAny(idBuffer, sType)); continue; - } + default: if (FileMode.GITLINK.equals(mode)) continue; + treeWalk.getObjectId(idBuffer, 0); throw new CorruptObjectException("Invalid mode " + mode - + " for " + treeWalk.getObjectId(0).name() + " " + + " for " + idBuffer.name() + " " + treeWalk.getPathString() + " in " + obj.getId().name() + "."); } @@ -722,14 +726,14 @@ private void markTreeComplete(final RevTree tree) throws IOException { final int sType = mode.getObjectType(); switch (sType) { - case Constants.OBJ_BLOB: { - final ObjectId sid = treeWalk.getObjectId(0); - revWalk.lookupAny(sid, sType).add(COMPLETE); + case Constants.OBJ_BLOB: + treeWalk.getObjectId(idBuffer, 0); + revWalk.lookupAny(idBuffer, sType).add(COMPLETE); continue; - } + case Constants.OBJ_TREE: { - final ObjectId sid = treeWalk.getObjectId(0); - final RevObject o = revWalk.lookupAny(sid, sType); + treeWalk.getObjectId(idBuffer, 0); + final RevObject o = revWalk.lookupAny(idBuffer, sType); if (!o.has(COMPLETE)) { o.add(COMPLETE); treeWalk.enterSubtree(); @@ -739,8 +743,9 @@ private void markTreeComplete(final RevTree tree) throws IOException { default: if (FileMode.GITLINK.equals(mode)) continue; + treeWalk.getObjectId(idBuffer, 0); throw new CorruptObjectException("Invalid mode " + mode - + " for " + treeWalk.getObjectId(0).name() + " " + + " for " + idBuffer.name() + " " + treeWalk.getPathString() + " in " + tree.name() + "."); } } -- 1.6.1.rc4.301.g5497a -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html