]> source.dussan.org Git - jgit.git/commitdiff
Allow ObjectReuseAsIs to resort objects during writing 58/2358/1
authorShawn O. Pearce <spearce@spearce.org>
Wed, 26 Jan 2011 01:20:08 +0000 (17:20 -0800)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 27 Jan 2011 16:58:55 +0000 (08:58 -0800)
It can be very handy for the implementation to resort the
object list based on data locality, improving prefetch in
the operating system's buffer cache.

Export the list to the implementation was a proper List,
and document that its mutable and OK to be modified.  The
only caller in PackWriter is already OK with these rules.

Change-Id: I3f51cf4388898917b2be36670587a5aee902ff10
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
org.eclipse.jgit/src/org/eclipse/jgit/storage/file/WindowCursor.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/ObjectReuseAsIs.java

index 8679c0de10f84e81cdae804de03520a6f09f6fa3..86ee460b147936416f1280536847ad2643d492a2 100644 (file)
@@ -48,6 +48,7 @@ import java.io.IOException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.zip.DataFormatException;
 import java.util.zip.Inflater;
 
@@ -147,7 +148,7 @@ final class WindowCursor extends ObjectReader implements ObjectReuseAsIs {
                src.pack.copyAsIs(out, src, this);
        }
 
-       public void writeObjects(PackOutputStream out, Iterable<ObjectToPack> list)
+       public void writeObjects(PackOutputStream out, List<ObjectToPack> list)
                        throws IOException {
                for (ObjectToPack otp : list)
                        out.writeObject(otp);
index bbd4e00349ac41077cfb7e989a80391f1938d297..ce4cd2c0e787e3c397c6a6a1fec19ac202738bed 100644 (file)
@@ -44,6 +44,7 @@
 package org.eclipse.jgit.storage.pack;
 
 import java.io.IOException;
+import java.util.List;
 
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.errors.StoredObjectRepresentationNotAvailableException;
@@ -135,12 +136,13 @@ public interface ObjectReuseAsIs {
         *            the stream to write each object to.
         * @param list
         *            the list of objects to write. Objects should be written in
-        *            approximately this order.
+        *            approximately this order. Implementors may resort the list
+        *            elements in-place during writing if desired.
         * @throws IOException
         *             the stream cannot be written to, or one or more required
         *             objects cannot be accessed from the object database.
         */
-       public void writeObjects(PackOutputStream out, Iterable<ObjectToPack> list)
+       public void writeObjects(PackOutputStream out, List<ObjectToPack> list)
                        throws IOException;
 
        /**