diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java index 4d97e7cd8..2995e17c9 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheTree.java @@ -338,7 +338,7 @@ ObjectId writeTree(final DirCacheEntry[] cache, int cIdx, entryIdx++; } - id = fmt.insert(ow); + id = ow.insert(fmt); } return id; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectInserter.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectInserter.java index 6b2eeaaca..de0c55f65 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectInserter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectInserter.java @@ -176,6 +176,22 @@ public ObjectId idFor(int objectType, long length, InputStream in) return ObjectId.fromRaw(md.digest()); } + /** + * Insert a single tree into the store, returning its unique name. + * + * @param formatter + * the formatter containing the proposed tree's data. + * @return the name of the tree object. + * @throws IOException + * the object could not be stored. + */ + public final ObjectId insert(TreeFormatter formatter) throws IOException { + // Delegate to the formatter, as then it can pass the raw internal + // buffer back to this inserter, avoiding unnecessary data copying. + // + return formatter.insertTo(this); + } + /** * Insert a single commit into the store, returning its unique name. * diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java index 1b2627e01..6e53cc740 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/TreeFormatter.java @@ -279,7 +279,7 @@ private void fmtOverflowBuffer(byte[] nameBuf, int namePos, int nameLen, * @throws IOException * the tree could not be stored. */ - public ObjectId insert(ObjectInserter ins) throws IOException { + public ObjectId insertTo(ObjectInserter ins) throws IOException { if (buf != null) return ins.insert(OBJ_TREE, buf, 0, ptr); @@ -293,7 +293,7 @@ public ObjectId insert(ObjectInserter ins) throws IOException { * This method is not efficient, as it needs to create a copy of the * internal buffer in order to supply an array of the correct size to the * caller. If the buffer is just to pass to an ObjectInserter, consider - * using {@link #insert(ObjectInserter)} instead. + * using {@link ObjectInserter#insert(TreeFormatter)} instead. * * @return a copy of this formatter's buffer. */ diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/notes/FanoutBucket.java b/org.eclipse.jgit/src/org/eclipse/jgit/notes/FanoutBucket.java index e1b96eaae..944e57500 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/notes/FanoutBucket.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/notes/FanoutBucket.java @@ -254,7 +254,7 @@ ObjectId writeTree(ObjectInserter inserter) throws IOException { for (; e != null; e = e.next) e.format(fmt); - return fmt.insert(inserter); + return inserter.insert(fmt); } private int treeSize() { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/notes/LeafBucket.java b/org.eclipse.jgit/src/org/eclipse/jgit/notes/LeafBucket.java index af6c6f455..db56eda2b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/notes/LeafBucket.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/notes/LeafBucket.java @@ -190,7 +190,7 @@ ObjectId writeTree(ObjectInserter inserter) throws IOException { for (; e != null; e = e.next) e.format(fmt); - return fmt.insert(inserter); + return inserter.insert(fmt); } private int treeSize(final int nameLen) {