]> source.dussan.org Git - jgit.git/commitdiff
Use file extension with DfsPackDescription get/set file size. 89/9689/2
authorColby Ranger <cranger@google.com>
Tue, 15 Jan 2013 22:24:30 +0000 (14:24 -0800)
committerColby Ranger <cranger@google.com>
Tue, 15 Jan 2013 23:12:47 +0000 (15:12 -0800)
Previously the size getters and setters had explicit methods for index
and pack. Update the api to be based on the file extension. This will
make it possible to support other extensions in the future, such as
the forthcoming bitmap extensions.

Change-Id: Iab9d4abe0af65b2fc71ad71ef1db0feb6b3b5c58

org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsGarbageCollector.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsInserter.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackCompactor.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackDescription.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackFile.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsPackParser.java

index 5da958a0b7205c04314163f6619d1af0bd897a13..dd01fa3f179deeb7b6f561f710a022e78118204d 100644 (file)
@@ -45,6 +45,8 @@ package org.eclipse.jgit.storage.dfs;
 
 import static org.eclipse.jgit.storage.dfs.DfsObjDatabase.PackSource.GC;
 import static org.eclipse.jgit.storage.dfs.DfsObjDatabase.PackSource.UNREACHABLE_GARBAGE;
+import static org.eclipse.jgit.storage.pack.PackConstants.PACK_EXT;
+import static org.eclipse.jgit.storage.pack.PackConstants.PACK_INDEX_EXT;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -65,7 +67,6 @@ import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.storage.dfs.DfsObjDatabase.PackSource;
 import org.eclipse.jgit.storage.file.PackIndex;
 import org.eclipse.jgit.storage.pack.PackConfig;
-import org.eclipse.jgit.storage.pack.PackConstants;
 import org.eclipse.jgit.storage.pack.PackWriter;
 import org.eclipse.jgit.util.io.CountingOutputStream;
 
@@ -319,25 +320,25 @@ public class DfsGarbageCollector {
                DfsPackDescription pack = repo.getObjectDatabase().newPack(source);
                newPackDesc.add(pack);
 
-               out = objdb.writeFile(pack, PackConstants.PACK_EXT);
+               out = objdb.writeFile(pack, PACK_EXT);
                try {
                        pw.writePack(pm, pm, out);
                } finally {
                        out.close();
                }
 
-               out = objdb.writeFile(pack, PackConstants.PACK_INDEX_EXT);
+               out = objdb.writeFile(pack, PACK_INDEX_EXT);
                try {
                        CountingOutputStream cnt = new CountingOutputStream(out);
                        pw.writeIndex(cnt);
-                       pack.setIndexSize(cnt.getCount());
+                       pack.setFileSize(PACK_INDEX_EXT, cnt.getCount());
                } finally {
                        out.close();
                }
 
                PackWriter.Statistics stats = pw.getStatistics();
                pack.setPackStats(stats);
-               pack.setPackSize(stats.getTotalBytes());
+               pack.setFileSize(PACK_EXT, stats.getTotalBytes());
                pack.setObjectCount(stats.getTotalObjects());
                pack.setDeltaCount(stats.getTotalDeltas());
                objectsPacked += stats.getTotalObjects();
index a86326e39613aeee6aea0b358290aa072e690042..51872667f18fb4be86c25ec650b7a00e2e42e7e6 100644 (file)
@@ -153,7 +153,7 @@ public class DfsInserter extends ObjectInserter {
                        throw new IOException();
 
                byte[] packHash = packOut.writePackFooter();
-               packDsc.setPackSize(packOut.getCount());
+               packDsc.setFileSize(PACK_EXT, packOut.getCount());
                packOut.close();
                packOut = null;
 
@@ -260,7 +260,7 @@ public class DfsInserter extends ObjectInserter {
                                buf.writeTo(cnt, null);
                        else
                                index(cnt, packHash, list);
-                       pack.setIndexSize(cnt.getCount());
+                       pack.setFileSize(PACK_INDEX_EXT, cnt.getCount());
                } finally {
                        os.close();
                }
index 8515acd7af78796b6356611f42f631ed501635e6..ff4c320893b9021e1fb602f1f67e8c723eb0aab5 100644 (file)
@@ -139,7 +139,7 @@ public class DfsPackCompactor {
                DfsObjDatabase objdb = repo.getObjectDatabase();
                for (DfsPackFile pack : objdb.getPacks()) {
                        DfsPackDescription d = pack.getPackDescription();
-                       if (d.getPackSize() < autoAddSize)
+                       if (d.getFileSize(PACK_EXT) < autoAddSize)
                                add(pack);
                }
                return this;
@@ -290,7 +290,7 @@ public class DfsPackCompactor {
                        CountingOutputStream cnt = new CountingOutputStream(out);
                        pw.writePack(pm, pm, cnt);
                        pack.setObjectCount(pw.getObjectCount());
-                       pack.setPackSize(cnt.getCount());
+                       pack.setFileSize(PACK_EXT, cnt.getCount());
                } finally {
                        out.close();
                }
@@ -302,7 +302,7 @@ public class DfsPackCompactor {
                try {
                        CountingOutputStream cnt = new CountingOutputStream(out);
                        pw.writeIndex(cnt);
-                       pack.setIndexSize(cnt.getCount());
+                       pack.setFileSize(PACK_INDEX_EXT, cnt.getCount());
                } finally {
                        out.close();
                }
index e23f14c8fefd562b76216d83d30795079e177d74..62fce3b73a4bb53b2c6ba9970301f7ff512b1e80 100644 (file)
@@ -43,6 +43,8 @@
 
 package org.eclipse.jgit.storage.dfs;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Set;
 
 import org.eclipse.jgit.lib.ObjectId;
@@ -67,9 +69,7 @@ public class DfsPackDescription implements Comparable<DfsPackDescription> {
 
        private long lastModified;
 
-       private long packSize;
-
-       private long indexSize;
+       private Map<String, Long> sizeMap;
 
        private long objectCount;
 
@@ -98,6 +98,7 @@ public class DfsPackDescription implements Comparable<DfsPackDescription> {
                this.repoDesc = repoDesc;
                int dot = name.lastIndexOf('.');
                this.packName = (dot < 0) ? name : name.substring(0, dot);
+               this.sizeMap = new HashMap<String, Long>(5);
        }
 
        /** @return description of the repository. */
@@ -144,39 +145,27 @@ public class DfsPackDescription implements Comparable<DfsPackDescription> {
                return this;
        }
 
-       /** @return size of the pack, in bytes. If 0 the pack size is not yet known. */
-       public long getPackSize() {
-               return packSize;
-       }
-
        /**
+        * @param ext
+        *            the file extension.
         * @param bytes
-        *            size of the pack in bytes. If 0 the size is not known and will
+        *            size of the file in bytes. If 0 the file is not known and will
         *            be determined on first read.
         * @return {@code this}
         */
-       public DfsPackDescription setPackSize(long bytes) {
-               packSize = Math.max(0, bytes);
+       public DfsPackDescription setFileSize(String ext, long bytes) {
+               sizeMap.put(ext, Long.valueOf(Math.max(0, bytes)));
                return this;
        }
 
        /**
-        * @return size of the index, in bytes. If 0 the index size is not yet
-        *         known.
-        */
-       public long getIndexSize() {
-               return indexSize;
-       }
-
-       /**
-        * @param bytes
-        *            size of the index in bytes. If 0 the size is not known and
-        *            will be determined on first read.
-        * @return {@code this}
+        * @param ext
+        *            the file extension.
+        * @return size of the file, in bytes. If 0 the file size is not yet known.
         */
-       public DfsPackDescription setIndexSize(long bytes) {
-               indexSize = Math.max(0, bytes);
-               return this;
+       public long getFileSize(String ext) {
+               Long size = sizeMap.get(ext);
+               return size == null ? 0 : size.longValue();
        }
 
        /**
index 221211624024c3926c4f4a04f532d9af8235df2f..8a4bd2e53456719898ac9c047d41adca91271470 100644 (file)
@@ -165,7 +165,7 @@ public final class DfsPackFile {
                this.packDesc = desc;
                this.key = key;
 
-               length = desc.getPackSize();
+               length = desc.getFileSize(PACK_EXT);
                if (length <= 0)
                        length = -1;
        }
index 13943d1a6f21268d15edfc6b7b637c5cb3d2ad08..5956f6448ebdc9e83d97bdccc99e4a651beed3d0 100644 (file)
@@ -43,6 +43,8 @@
 
 package org.eclipse.jgit.storage.dfs;
 
+import static org.eclipse.jgit.storage.pack.PackConstants.PACK_EXT;
+
 import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -58,7 +60,6 @@ import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ProgressMonitor;
 import org.eclipse.jgit.storage.file.PackIndex;
 import org.eclipse.jgit.storage.file.PackLock;
-import org.eclipse.jgit.storage.pack.PackConstants;
 import org.eclipse.jgit.transport.PackParser;
 import org.eclipse.jgit.transport.PackedObjectInfo;
 
@@ -147,7 +148,7 @@ public class DfsPackParser extends PackParser {
                        out = null;
                        currBuf = null;
                        readBlock = null;
-                       packDsc.setPackSize(packEnd);
+                       packDsc.setFileSize(PACK_EXT, packEnd);
 
                        writePackIndex();
                        objdb.commitPack(Collections.singletonList(packDsc), null);
@@ -206,7 +207,7 @@ public class DfsPackParser extends PackParser {
                packDsc = objdb.newPack(DfsObjDatabase.PackSource.RECEIVE);
                packKey = new DfsPackKey();
 
-               out = objdb.writeFile(packDsc, PackConstants.PACK_EXT);
+               out = objdb.writeFile(packDsc, PACK_EXT);
                int size = out.blockSize();
                if (size <= 0)
                        size = blockCache.getBlockSize();