[JGIT PATCH 05/23] Change walker based fetch to use TreeWalk's MutableObjectId accessor
From: Shawn O. Pearce <hidden>
Date: 2016-06-15 22:45:49
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> --- .../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