]> source.dussan.org Git - jgit.git/commitdiff
Use long for more object counts in PackWriter 45/4645/4
authorShawn O. Pearce <spearce@spearce.org>
Thu, 17 Nov 2011 19:39:53 +0000 (11:39 -0800)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 18 Nov 2011 23:55:52 +0000 (15:55 -0800)
Packs can contain up to 2^32-1 objects, which exceeds the range of a
Java int. Try harder to accept higher object counts in some cases by
using long more often when we are working with the object count value.

This is a trivial refactoring, we may have to make even more changes
to the object handling code to support more than 2^31-1 objects.

Change-Id: I8cd8146e97cd1c738ad5b48fa9e33804982167e7

org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java

index dc33e4ece790c6e99a376863f50d691d7d51da10..2d4279ebc2ec92c6b825448c57a9bf28e54ccb92 100644 (file)
@@ -799,7 +799,7 @@ public class PackWriter {
        }
 
        private void beginPhase(PackingPhase phase, ProgressMonitor monitor,
-                       int cnt) {
+                       long cnt) {
                state.phase = phase;
                String task;
                switch (phase) {
@@ -822,7 +822,7 @@ public class PackWriter {
                        throw new IllegalArgumentException(
                                        MessageFormat.format(JGitText.get().illegalPackingPhase, phase));
                }
-               monitor.beginTask(task, cnt);
+               monitor.beginTask(task, (int) cnt);
        }
 
        private void endPhase(ProgressMonitor monitor) {
@@ -888,7 +888,7 @@ public class PackWriter {
 
                long objCnt = getObjectCount();
                stats.totalObjects = objCnt;
-               beginPhase(PackingPhase.WRITING, writeMonitor, (int) objCnt);
+               beginPhase(PackingPhase.WRITING, writeMonitor, objCnt);
                long writeStart = System.currentTimeMillis();
 
                out.writeFileHeader(PACK_VERSION_GENERATED, objCnt);
@@ -956,7 +956,7 @@ public class PackWriter {
        }
 
        private void searchForReuse(ProgressMonitor monitor) throws IOException {
-               int cnt = 0;
+               long cnt = 0;
                cnt += objectsLists[Constants.OBJ_COMMIT].size();
                cnt += objectsLists[Constants.OBJ_TREE].size();
                cnt += objectsLists[Constants.OBJ_BLOB].size();
@@ -967,7 +967,7 @@ public class PackWriter {
 
                if (cnt <= 4096) {
                        // For small object counts, do everything as one list.
-                       BlockList<ObjectToPack> tmp = new BlockList<ObjectToPack>(cnt);
+                       BlockList<ObjectToPack> tmp = new BlockList<ObjectToPack>((int) cnt);
                        tmp.addAll(objectsLists[Constants.OBJ_TAG]);
                        tmp.addAll(objectsLists[Constants.OBJ_COMMIT]);
                        tmp.addAll(objectsLists[Constants.OBJ_TREE]);