From: Shawn O. Pearce Date: Mon, 8 Aug 2011 15:50:13 +0000 (-0700) Subject: PackWriter: Only search for base objects on thin packs X-Git-Tag: v1.1.0.201109011030-rc2~21^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=refs%2Fchanges%2F77%2F3977%2F1;p=jgit.git PackWriter: Only search for base objects on thin packs A non-thin pack does not need to worry about preferred bases, the pack will be self-contained and all required delta base objects will appear within the pack itself. Obtaining the path buffer and length from the ObjectWalk to build the preferred base table is "expensive", so avoid the cost unless a thin pack is being constructed. Change-Id: I16e30cd864f4189d4304e7957a7cd5bdb9e84528 Signed-off-by: Shawn O. Pearce --- diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java index 3007b809c2..2153ad5d3f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java @@ -1437,20 +1437,29 @@ public class PackWriter { } commits = null; - BaseSearch bases = new BaseSearch(countingMonitor, baseTrees, // - objectsMap, edgeObjects, reader); - RevObject o; - while ((o = walker.nextObject()) != null) { - if (o.has(RevFlag.UNINTERESTING)) - continue; - - int pathHash = walker.getPathHashCode(); - byte[] pathBuf = walker.getPathBuffer(); - int pathLen = walker.getPathLength(); + if (thin && !baseTrees.isEmpty()) { + BaseSearch bases = new BaseSearch(countingMonitor, baseTrees, // + objectsMap, edgeObjects, reader); + RevObject o; + while ((o = walker.nextObject()) != null) { + if (o.has(RevFlag.UNINTERESTING)) + continue; - bases.addBase(o.getType(), pathBuf, pathLen, pathHash); - addObject(o, pathHash); - countingMonitor.update(1); + int pathHash = walker.getPathHashCode(); + byte[] pathBuf = walker.getPathBuffer(); + int pathLen = walker.getPathLength(); + bases.addBase(o.getType(), pathBuf, pathLen, pathHash); + addObject(o, pathHash); + countingMonitor.update(1); + } + } else { + RevObject o; + while ((o = walker.nextObject()) != null) { + if (o.has(RevFlag.UNINTERESTING)) + continue; + addObject(o, walker.getPathHashCode()); + countingMonitor.update(1); + } } for (CachedPack pack : cachedPacks)