]> source.dussan.org Git - jgit.git/commitdiff
PackWriter: Cleanup findObjectToPack method 85/2385/2
authorShawn O. Pearce <spearce@spearce.org>
Sun, 30 Jan 2011 23:10:51 +0000 (15:10 -0800)
committerChris Aniszczyk <caniszczyk@gmail.com>
Tue, 1 Feb 2011 15:03:24 +0000 (09:03 -0600)
Some of this code predates making ObjectId.equals() final
and fixing RevObject.equals() to match ObjectId.equals().
It was therefore more complex than it needs to be, because
it tried to work around RevObject's broken equals() rules
by converting to ObjectId in a different collection.

Also combine setUpWalker() and findObjectsToPack() methods,
these can be one method and the code is actually cleaner.

Change-Id: I0f4cf9997cd66d8b6e7f80873979ef1439e507fe
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java

index fb15a5c59d0b405b400c66982d80a1f5d745750f..af1fe7d57ead1f03f6da5aad04aec8b5def277db 100644 (file)
@@ -55,10 +55,8 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
@@ -376,9 +374,8 @@ public class PackWriter {
                        throws IOException {
                if (countingMonitor == null)
                        countingMonitor = NullProgressMonitor.INSTANCE;
-               ObjectWalk walker = setUpWalker(interestingObjects,
+               findObjectsToPack(countingMonitor, interestingObjects,
                                uninterestingObjects);
-               findObjectsToPack(countingMonitor, walker);
        }
 
        /**
@@ -976,32 +973,30 @@ public class PackWriter {
                out.write(packcsum);
        }
 
-       private ObjectWalk setUpWalker(
-                       final Collection<? extends ObjectId> interestingObjects,
-                       final Collection<? extends ObjectId> uninterestingObjects)
+       private void findObjectsToPack(final ProgressMonitor countingMonitor,
+                       final Collection<? extends ObjectId> want,
+                       Collection<? extends ObjectId> have)
                        throws MissingObjectException, IOException,
                        IncorrectObjectTypeException {
-               List<ObjectId> all = new ArrayList<ObjectId>(interestingObjects.size());
-               for (ObjectId id : interestingObjects)
-                       all.add(id.copy());
-
-               final Set<ObjectId> not;
-               if (uninterestingObjects != null && !uninterestingObjects.isEmpty()) {
-                       not = new HashSet<ObjectId>();
-                       for (ObjectId id : uninterestingObjects)
-                               not.add(id.copy());
-                       all.addAll(not);
-               } else
-                       not = Collections.emptySet();
+               countingMonitor.beginTask(JGitText.get().countingObjects,
+                               ProgressMonitor.UNKNOWN);
+
+               if (have == null)
+                       have = Collections.emptySet();
+
+               List<ObjectId> all = new ArrayList<ObjectId>(want.size() + have.size());
+               all.addAll(want);
+               all.addAll(have);
 
                final ObjectWalk walker = new ObjectWalk(reader);
                walker.setRetainBody(false);
-               if (not.isEmpty())
+               if (have.isEmpty())
                        walker.sort(RevSort.COMMIT_TIME_DESC);
-               else
+               else {
                        walker.sort(RevSort.TOPO);
-               if (thin && !not.isEmpty())
-                       walker.sort(RevSort.BOUNDARY, true);
+                       if (thin)
+                               walker.sort(RevSort.BOUNDARY, true);
+               }
 
                AsyncRevObjectQueue q = walker.parseAny(all, true);
                try {
@@ -1010,13 +1005,13 @@ public class PackWriter {
                                        RevObject o = q.next();
                                        if (o == null)
                                                break;
-                                       if (not.contains(o.copy()))
+                                       if (have.contains(o))
                                                walker.markUninteresting(o);
                                        else
                                                walker.markStart(o);
                                } catch (MissingObjectException e) {
                                        if (ignoreMissingUninteresting
-                                                       && not.contains(e.getObjectId()))
+                                                       && have.contains(e.getObjectId()))
                                                continue;
                                        throw e;
                                }
@@ -1024,14 +1019,7 @@ public class PackWriter {
                } finally {
                        q.release();
                }
-               return walker;
-       }
 
-       private void findObjectsToPack(final ProgressMonitor countingMonitor,
-                       final ObjectWalk walker) throws MissingObjectException,
-                       IncorrectObjectTypeException,                   IOException {
-               countingMonitor.beginTask(JGitText.get().countingObjects,
-                               ProgressMonitor.UNKNOWN);
                RevObject o;
 
                while ((o = walker.next()) != null) {