]> source.dussan.org Git - jgit.git/commitdiff
Configure core.bigFileThreshold into PackWriter 06/1106/1
authorShawn O. Pearce <spearce@spearce.org>
Fri, 9 Jul 2010 14:57:47 +0000 (07:57 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Sat, 10 Jul 2010 02:02:54 +0000 (19:02 -0700)
C Git's fast-import uses this to determine the maximum file size
that it tries to delta compress, anything equal to or above this
setting is stored with as a whole object with simple deflate.

Define the configuration so we can use it later.

Change-Id: Iea46e787d019a1b6c51135cc73d7688a02e207f5
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackConfig.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java

index b3d140a8e16fba9a5751ea7550a3afeb567807ff..bd506a75914f59adf75817ce8a0ab5abe9cd0af5 100644 (file)
@@ -65,12 +65,15 @@ class PackConfig {
 
        final int indexVersion;
 
+       final long bigFileThreshold;
+
        private PackConfig(Config rc) {
                deltaWindow = rc.getInt("pack", "window", PackWriter.DEFAULT_DELTA_SEARCH_WINDOW_SIZE);
                deltaWindowMemory = rc.getLong("pack", null, "windowmemory", 0);
                deltaDepth = rc.getInt("pack", "depth", PackWriter.DEFAULT_MAX_DELTA_DEPTH);
                compression = compression(rc);
                indexVersion = rc.getInt("pack", "indexversion", 2);
+               bigFileThreshold = rc.getLong("core", null, "bigfilethreshold", PackWriter.DEFAULT_BIG_FILE_THRESHOLD);
        }
 
        private static int compression(Config rc) {
index 25e2bea1ab4073cc3a908909c8cce6c92cd60f21..7cf8d2a26ebcfb14fc81cb15e2a05acefabbc943 100644 (file)
@@ -172,6 +172,8 @@ public class PackWriter {
         */
        public static final int DEFAULT_DELTA_SEARCH_WINDOW_SIZE = 10;
 
+       static final long DEFAULT_BIG_FILE_THRESHOLD = 50 * 1024 * 1024;
+
        private static final int PACK_VERSION_GENERATED = 2;
 
        @SuppressWarnings("unchecked")
@@ -216,6 +218,8 @@ public class PackWriter {
 
        private int indexVersion;
 
+       private long bigFileThreshold = DEFAULT_BIG_FILE_THRESHOLD;
+
        private boolean thin;
 
        private boolean ignoreMissingUninteresting = true;
@@ -269,6 +273,7 @@ public class PackWriter {
                maxDeltaDepth = pc.deltaDepth;
                compressionLevel = pc.compression;
                indexVersion = pc.indexVersion;
+               bigFileThreshold = pc.bigFileThreshold;
        }
 
        private static Config configOf(final Repository repo) {
@@ -455,6 +460,29 @@ public class PackWriter {
                        deltaSearchWindowSize = objectCount;
        }
 
+       /**
+        * Get the maximum file size that will be delta compressed.
+        * <p>
+        * Files bigger than this setting will not be delta compressed, as they are
+        * more than likely already highly compressed binary data files that do not
+        * delta compress well, such as MPEG videos.
+        *
+        * @return the configured big file threshold.
+        */
+       public long getBigFileThreshold() {
+               return bigFileThreshold;
+       }
+
+       /**
+        * Set the maximum file size that should be considered for deltas.
+        *
+        * @param bigFileThreshold
+        *            the limit, in bytes.
+        */
+       public void setBigFileThreshold(long bigFileThreshold) {
+               this.bigFileThreshold = bigFileThreshold;
+       }
+
        /** @return true if this writer is producing a thin pack. */
        public boolean isThin() {
                return thin;