From b505e2a558132d2baf07e4992bc9686d80a63bcf Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Wed, 1 Sep 2010 14:14:54 -0700 Subject: [PATCH] Use 5 MiB for RevWalk default limit 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 --- .../src/org/eclipse/jgit/lib/CoreConfig.java | 15 --------------- .../src/org/eclipse/jgit/revwalk/RevWalk.java | 15 +++------------ 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java index d37973799..249b95ec3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java @@ -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 */ diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java index dd513d8a9..94eb62106 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevWalk.java @@ -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 { + private static final int MB = 1 << 20; + /** * Set on objects whose important header data has been loaded. *

@@ -171,9 +172,6 @@ public class RevWalk implements Iterable { private final ObjectIdSubclassMap 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 { 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 { 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;