summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorShawn Pearce <spearce@spearce.org>2013-04-04 15:23:08 -0700
committerShawn Pearce <spearce@spearce.org>2013-04-04 15:25:56 -0700
commit1eed78657fe6e0f478b85a455d51495dd1bfa0e3 (patch)
treeddd24fc49e1860233ac19718b07c270e16750f96 /org.eclipse.jgit
parent56497be34da043dacce40e8e077b67e430e78dbc (diff)
downloadjgit-1eed78657fe6e0f478b85a455d51495dd1bfa0e3.tar.gz
jgit-1eed78657fe6e0f478b85a455d51495dd1bfa0e3.zip
Don't delta compress garbage objects
Garbage is randomly ordered and unlikely to delta compress against other garbage. Disable delta compression allowing objects to switch to whole form when moving to the garbage pack. Because the garbage is not well compressed assume deltas were not attempted during a normal GC cycle. Override the reuse settings, garbage that can be reused should be reused as-is into the garbage pack rather than switching something like the compression level during a GC. It is intended that garbage will eventually be removed from the repository so expending CPU time on a compression switch is not worthwhile. Change-Id: I0e8e58ee99e5011d375d3d89c94f2957de8402b9
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsGarbageCollector.java12
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjectRepresentation.java5
2 files changed, 11 insertions, 6 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsGarbageCollector.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsGarbageCollector.java
index a5a8c56d94..b5ea6b58a5 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsGarbageCollector.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsGarbageCollector.java
@@ -273,6 +273,7 @@ public class DfsGarbageCollector {
PackWriter pw = newPackWriter();
try {
+ pw.setTagTargets(tagTargets);
pw.preparePack(pm, allHeads, Collections.<ObjectId> emptySet());
if (0 < pw.getObjectCount())
writePack(GC, pw, pm);
@@ -299,7 +300,15 @@ public class DfsGarbageCollector {
private void packGarbage(ProgressMonitor pm) throws IOException {
// TODO(sop) This is ugly. The garbage pack needs to be deleted.
- PackWriter pw = newPackWriter();
+ PackConfig cfg = new PackConfig(packConfig);
+ cfg.setReuseDeltas(true);
+ cfg.setReuseObjects(true);
+ cfg.setDeltaCompress(false);
+ cfg.setBuildBitmaps(false);
+
+ PackWriter pw = new PackWriter(cfg, ctx);
+ pw.setDeltaBaseAsOffset(true);
+ pw.setReuseDeltaCommits(true);
try {
RevWalk pool = new RevWalk(ctx);
pm.beginTask("Finding garbage", objectsBefore());
@@ -345,7 +354,6 @@ public class DfsGarbageCollector {
PackWriter pw = new PackWriter(packConfig, ctx);
pw.setDeltaBaseAsOffset(true);
pw.setReuseDeltaCommits(false);
- pw.setTagTargets(tagTargets);
return pw;
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjectRepresentation.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjectRepresentation.java
index 073d94299a..45bf7f3b4e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjectRepresentation.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjectRepresentation.java
@@ -44,9 +44,7 @@
package org.eclipse.jgit.internal.storage.dfs;
import static org.eclipse.jgit.internal.storage.dfs.DfsObjDatabase.PackSource.GC;
-import static org.eclipse.jgit.internal.storage.dfs.DfsObjDatabase.PackSource.UNREACHABLE_GARBAGE;
-import org.eclipse.jgit.internal.storage.dfs.DfsObjDatabase.PackSource;
import org.eclipse.jgit.internal.storage.pack.StoredObjectRepresentation;
import org.eclipse.jgit.lib.ObjectId;
@@ -80,7 +78,6 @@ class DfsObjectRepresentation extends StoredObjectRepresentation {
@Override
public boolean wasDeltaAttempted() {
- PackSource source = pack.getPackDescription().getPackSource();
- return source == GC || source == UNREACHABLE_GARBAGE;
+ return pack.getPackDescription().getPackSource() == GC;
}
}