Browse Source

Use long for more object counts in PackWriter

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
stable-1.2
Shawn O. Pearce 13 years ago
parent
commit
1421106d76
  1. 10
      org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java

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

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

Loading…
Cancel
Save