Merge "Reduce memory held and speed up DfsGarbageCollector."
This commit is contained in:
commit
aa2db859ea
|
@ -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);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue