]> source.dussan.org Git - jgit.git/commitdiff
IndexPack: Defer the "Resolving deltas" progress meter 32/3932/2
authorShawn O. Pearce <spearce@spearce.org>
Wed, 27 Jul 2011 18:59:31 +0000 (11:59 -0700)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 28 Jul 2011 17:22:50 +0000 (10:22 -0700)
If delta resolution completes in < 1000 milliseconds, don't bother
showing the progress meter. This is actually very common for a Gerrit
Code Review server, where the client is probably sending 1 commit and
only a few trees/blobs modified... and the base objects are hot in the
process buffer cache.

The 1000 millisecond delay is just a guess at a reasonable time to wait.

Change-Id: I440baa64ab0dfa21be61deae8dcd3ca061bed8ce
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java

index 653fd4c403cf2074ee67f90ee69a91158aff93f5..1b30e859ec507c9d1b1ac2c32d1b0063b7e17c94 100644 (file)
@@ -54,6 +54,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 import java.util.zip.DataFormatException;
 import java.util.zip.Inflater;
 
@@ -61,6 +62,7 @@ import org.eclipse.jgit.JGitText;
 import org.eclipse.jgit.errors.CorruptObjectException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.AnyObjectId;
+import org.eclipse.jgit.lib.BatchingProgressMonitor;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.InflaterCache;
 import org.eclipse.jgit.lib.MutableObjectId;
@@ -478,6 +480,11 @@ public abstract class PackParser {
                        if (!deferredCheckBlobs.isEmpty())
                                doDeferredCheckBlobs();
                        if (deltaCount > 0) {
+                               if (resolving instanceof BatchingProgressMonitor) {
+                                       ((BatchingProgressMonitor) resolving).setDelayStart(
+                                                       1000,
+                                                       TimeUnit.MILLISECONDS);
+                               }
                                resolving.beginTask(JGitText.get().resolvingDeltas, deltaCount);
                                resolveDeltas(resolving);
                                if (entryCount < objectCount) {