]> source.dussan.org Git - jgit.git/commitdiff
Use 5 MiB for RevWalk default limit 93/1493/3
authorShawn O. Pearce <spearce@spearce.org>
Wed, 1 Sep 2010 21:14:54 +0000 (14:14 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 2 Sep 2010 18:38:40 +0000 (11:38 -0700)
Instead of getting the limit from CoreConfig, use the larger of the
reader's limit or 5 MiB, under the assumption that any annotated tag
or commit of interest should be under 5 MiB.  But if a repository
was really insane and had bigger objects, the reader implementation
can set its streaming limit higher in order to allow RevWalk to
still process it.

Change-Id: If2c15235daa3e2d1f7167e781aa83fedb5af9a30
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java

index d37973799cfbf6115d622107833c7c1ea7cec658..249b95ec3ce067eba2bc5742c07474ea7ca6bea5 100644 (file)
@@ -47,7 +47,6 @@
 package org.eclipse.jgit.lib;
 
 import static java.util.zip.Deflater.DEFAULT_COMPRESSION;
-import static org.eclipse.jgit.lib.ObjectLoader.STREAM_THRESHOLD;
 
 import org.eclipse.jgit.lib.Config.SectionParser;
 
@@ -68,21 +67,12 @@ public class CoreConfig {
 
        private final boolean logAllRefUpdates;
 
-       private final int streamFileThreshold;
-
        private final boolean autoCRLF;
 
        private CoreConfig(final Config rc) {
                compression = rc.getInt("core", "compression", DEFAULT_COMPRESSION);
                packIndexVersion = rc.getInt("pack", "indexversion", 2);
                logAllRefUpdates = rc.getBoolean("core", "logallrefupdates", true);
-
-               long maxMem = Runtime.getRuntime().maxMemory();
-               long sft = rc.getLong("core", null, "streamfilethreshold", STREAM_THRESHOLD);
-               sft = Math.min(sft, maxMem / 4); // don't use more than 1/4 of the heap
-               sft = Math.min(sft, Integer.MAX_VALUE); // cannot exceed array length
-               streamFileThreshold = (int) sft;
-
                autoCRLF = rc.getBoolean("core", "autocrlf", false);
        }
 
@@ -108,11 +98,6 @@ public class CoreConfig {
                return logAllRefUpdates;
        }
 
-       /** @return the size threshold beyond which objects must be streamed. */
-       public int getStreamFileThreshold() {
-               return streamFileThreshold;
-       }
-
        /**
         * @return whether automatic CRLF conversion has been configured
         */
index dd513d8a95a62efa4571378329b967446397da65..94eb62106e8787f856541f5357c6bfa42295e320 100644 (file)
@@ -61,7 +61,6 @@ import org.eclipse.jgit.errors.RevWalkException;
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.AsyncObjectLoaderQueue;
 import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.lib.CoreConfig;
 import org.eclipse.jgit.lib.MutableObjectId;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectIdSubclassMap;
@@ -96,6 +95,8 @@ import org.eclipse.jgit.treewalk.filter.TreeFilter;
  * {@link #next()} does not.
  */
 public class RevWalk implements Iterable<RevCommit> {
+       private static final int MB = 1 << 20;
+
        /**
         * Set on objects whose important header data has been loaded.
         * <p>
@@ -171,9 +172,6 @@ public class RevWalk implements Iterable<RevCommit> {
 
        private final ObjectIdSubclassMap<RevObject> objects;
 
-       /** Largest commit or annotated tag we are willing to touch. */
-       private final int bigFileThreshold;
-
        private int freeFlags = APP_FLAGS;
 
        private int delayFreeFlags;
@@ -230,13 +228,6 @@ public class RevWalk implements Iterable<RevCommit> {
                filter = RevFilter.ALL;
                treeFilter = TreeFilter.ALL;
                retainBody = true;
-
-               if (repo != null) {
-                       CoreConfig cfg = repo.getConfig().get(CoreConfig.KEY);
-                       bigFileThreshold = cfg.getStreamFileThreshold();
-               } else {
-                       bigFileThreshold = 15 * 1024 * 1024;
-               }
        }
 
        /** @return the reader this walker is using to load objects. */
@@ -867,7 +858,7 @@ public class RevWalk implements Iterable<RevCommit> {
        byte[] getCachedBytes(RevObject obj, ObjectLoader ldr)
                        throws LargeObjectException, MissingObjectException, IOException {
                try {
-                       return ldr.getCachedBytes(bigFileThreshold);
+                       return ldr.getCachedBytes(5 * MB);
                } catch (LargeObjectException tooBig) {
                        tooBig.setObjectId(obj);
                        throw tooBig;