Merge "Reduce memory held and speed up DfsGarbageCollector."

This commit is contained in:
Colby Ranger 2013-01-22 18:55:36 -05:00 committed by Gerrit Code Review @ Eclipse.org
commit aa2db859ea
2 changed files with 18 additions and 7 deletions

View File

@ -61,6 +61,7 @@
import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectIdOwnerMap;
import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.ProgressMonitor;
import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
@ -332,10 +333,11 @@ private DfsPackDescription writePack(PackSource source, PackWriter pw,
out.close(); out.close();
} }
final List<ObjectId> packedObjs = pw.getObjectList(); final ObjectIdOwnerMap<ObjectIdOwnerMap.Entry> packedObjs = pw
.getObjectSet();
newPackObj.add(new PackWriter.ObjectIdSet() { newPackObj.add(new PackWriter.ObjectIdSet() {
public boolean contains(AnyObjectId objectId) { public boolean contains(AnyObjectId objectId) {
return 0 <= Collections.binarySearch(packedObjs, objectId); return packedObjs.contains(objectId);
} }
}); });

View File

@ -519,8 +519,7 @@ public long getObjectCount() throws IOException {
} }
/** /**
* Returns the object ids in the pack file that was created by this writer, * Returns the object ids in the pack file that was created by this writer.
* sorted by name.
* *
* This method can only be invoked after * This method can only be invoked after
* {@link #writePack(ProgressMonitor, ProgressMonitor, OutputStream)} has * {@link #writePack(ProgressMonitor, ProgressMonitor, OutputStream)} has
@ -530,13 +529,23 @@ public long getObjectCount() throws IOException {
* @throws IOException * @throws IOException
* a cached pack cannot supply its object ids. * a cached pack cannot supply its object ids.
*/ */
public List<ObjectId> getObjectList() throws IOException { public ObjectIdOwnerMap<ObjectIdOwnerMap.Entry> getObjectSet()
throws IOException {
if (!cachedPacks.isEmpty()) if (!cachedPacks.isEmpty())
throw new IOException( throw new IOException(
JGitText.get().cachedPacksPreventsListingObjects); JGitText.get().cachedPacksPreventsListingObjects);
return Collections.unmodifiableList( ObjectIdOwnerMap<ObjectIdOwnerMap.Entry> objs = new ObjectIdOwnerMap<
(List<? extends ObjectId>) sortByName()); ObjectIdOwnerMap.Entry>();
for (BlockList<ObjectToPack> objList : objectsLists) {
if (objList != null) {
for (ObjectToPack otp : objList)
objs.add(new ObjectIdOwnerMap.Entry(otp) {
// A new entry that copies the ObjectId
});
}
}
return objs;
} }
/** /**