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.NullProgressMonitor;
|
||||
import org.eclipse.jgit.lib.ObjectId;
|
||||
import org.eclipse.jgit.lib.ObjectIdOwnerMap;
|
||||
import org.eclipse.jgit.lib.ProgressMonitor;
|
||||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.revwalk.RevWalk;
|
||||
|
@ -332,10 +333,11 @@ private DfsPackDescription writePack(PackSource source, PackWriter pw,
|
|||
out.close();
|
||||
}
|
||||
|
||||
final List<ObjectId> packedObjs = pw.getObjectList();
|
||||
final ObjectIdOwnerMap<ObjectIdOwnerMap.Entry> packedObjs = pw
|
||||
.getObjectSet();
|
||||
newPackObj.add(new PackWriter.ObjectIdSet() {
|
||||
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,
|
||||
* sorted by name.
|
||||
* Returns the object ids in the pack file that was created by this writer.
|
||||
*
|
||||
* This method can only be invoked after
|
||||
* {@link #writePack(ProgressMonitor, ProgressMonitor, OutputStream)} has
|
||||
|
@ -530,13 +529,23 @@ public long getObjectCount() throws IOException {
|
|||
* @throws IOException
|
||||
* a cached pack cannot supply its object ids.
|
||||
*/
|
||||
public List<ObjectId> getObjectList() throws IOException {
|
||||
public ObjectIdOwnerMap<ObjectIdOwnerMap.Entry> getObjectSet()
|
||||
throws IOException {
|
||||
if (!cachedPacks.isEmpty())
|
||||
throw new IOException(
|
||||
JGitText.get().cachedPacksPreventsListingObjects);
|
||||
|
||||
return Collections.unmodifiableList(
|
||||
(List<? extends ObjectId>) sortByName());
|
||||
ObjectIdOwnerMap<ObjectIdOwnerMap.Entry> objs = new ObjectIdOwnerMap<
|
||||
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