diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsGarbageCollector.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsGarbageCollector.java index 21f01ad6b..76fb521a6 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsGarbageCollector.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/dfs/DfsGarbageCollector.java @@ -61,6 +61,7 @@ import org.eclipse.jgit.lib.AnyObjectId; 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 @@ public class DfsGarbageCollector { out.close(); } - final List packedObjs = pw.getObjectList(); + final ObjectIdOwnerMap packedObjs = pw + .getObjectSet(); newPackObj.add(new PackWriter.ObjectIdSet() { public boolean contains(AnyObjectId objectId) { - return 0 <= Collections.binarySearch(packedObjs, objectId); + return packedObjs.contains(objectId); } }); 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 b199d4fee..1cf178128 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 @@ -519,8 +519,7 @@ public class PackWriter { } /** - * 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 class PackWriter { * @throws IOException * a cached pack cannot supply its object ids. */ - public List getObjectList() throws IOException { + public ObjectIdOwnerMap getObjectSet() + throws IOException { if (!cachedPacks.isEmpty()) throw new IOException( JGitText.get().cachedPacksPreventsListingObjects); - return Collections.unmodifiableList( - (List) sortByName()); + ObjectIdOwnerMap objs = new ObjectIdOwnerMap< + ObjectIdOwnerMap.Entry>(); + for (BlockList objList : objectsLists) { + if (objList != null) { + for (ObjectToPack otp : objList) + objs.add(new ObjectIdOwnerMap.Entry(otp) { + // A new entry that copies the ObjectId + }); + } + } + return objs; } /**