[JGIT PATCH 03/23] Allow TreeWalk callers to pass a MutableObjectId to get the current id
From: Shawn O. Pearce <hidden>
Date: 2016-06-15 22:45:49
Subsystem:
the rest · Maintainer:
Linus Torvalds
This avoids a memory allocation associated with getting the entry object for each name. Signed-off-by: Shawn O. Pearce <redacted> --- .../src/org/spearce/jgit/treewalk/TreeWalk.java | 28 +++++++++++++++++++- 1 files changed, 27 insertions(+), 1 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
index 26544b5..38a726b 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/treewalk/TreeWalk.java@@ -46,6 +46,7 @@ import org.spearce.jgit.errors.StopWalkException; import org.spearce.jgit.lib.Constants; import org.spearce.jgit.lib.FileMode; +import org.spearce.jgit.lib.MutableObjectId; import org.spearce.jgit.lib.ObjectId; import org.spearce.jgit.lib.Repository; import org.spearce.jgit.revwalk.RevTree;
@@ -513,7 +514,8 @@ public FileMode getFileMode(final int nth) { * <p> * Using this method to compare ObjectId values between trees of this walker * is very inefficient. Applications should try to use - * {@link #idEqual(int, int)} whenever possible. + * {@link #idEqual(int, int)} or {@link #getObjectId(MutableObjectId, int)} + * whenever possible. * <p> * Every tree supplies an object id, even if the tree does not contain the * current entry. In the latter case {@link ObjectId#zeroId()} is returned.
@@ -521,6 +523,7 @@ public FileMode getFileMode(final int nth) { * @param nth * tree to obtain the object identifier from. * @return object identifier for the current tree entry. + * @see #getObjectId(MutableObjectId, int) * @see #idEqual(int, int) */ public ObjectId getObjectId(final int nth) {
@@ -530,6 +533,29 @@ public ObjectId getObjectId(final int nth) { } /** + * Obtain the ObjectId for the current entry. + * <p> + * Every tree supplies an object id, even if the tree does not contain the + * current entry. In the latter case {@link ObjectId#zeroId()} is supplied. + * <p> + * Applications should try to use {@link #idEqual(int, int)} when possible + * as it avoids conversion overheads. + * + * @param out + * buffer to copy the object id into. + * @param nth + * tree to obtain the object identifier from. + * @see #idEqual(int, int) + */ + public void getObjectId(final MutableObjectId out, final int nth) { + final AbstractTreeIterator t = trees[nth]; + if (t.matches == currentHead) + out.fromRaw(t.idBuffer(), t.idOffset()); + else + out.clear(); + } + + /** * Compare two tree's current ObjectId values for equality. * * @param nthA
--
1.6.1.rc4.301.g5497a