]> source.dussan.org Git - jgit.git/commitdiff
Display progress while checking connectivity on push 98/23298/2
authorShawn Pearce <spearce@spearce.org>
Thu, 13 Mar 2014 00:13:10 +0000 (17:13 -0700)
committerShawn Pearce <sop@google.com>
Thu, 13 Mar 2014 03:19:12 +0000 (23:19 -0400)
Verifying 100 new objects are fully connected to the existing DAG
is usually very cheap. Checking the entire Linux kernel history is
fully connected when pushing it to a new repository can take 30-60
seconds. Display a progress counter during this time so the client
knows the server is still working.

Change-Id: Iababe3ee1d35cb82f2bef2f12da7a2ecd03282b0

org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java

index ff45b1cda30de423731cdc75d5239987c3c7f84d..9d39f436c6305e908eb9157a6c88a5cea59d62b6 100644 (file)
@@ -1036,6 +1036,12 @@ public abstract class BaseReceivePack {
        private void checkConnectivity() throws IOException {
                ObjectIdSubclassMap<ObjectId> baseObjects = null;
                ObjectIdSubclassMap<ObjectId> providedObjects = null;
+               ProgressMonitor checking = NullProgressMonitor.INSTANCE;
+               if (sideBand) {
+                       SideBandProgressMonitor m = new SideBandProgressMonitor(msgOut);
+                       m.setDelayStart(750, TimeUnit.MILLISECONDS);
+                       checking = m;
+               }
 
                if (checkReferencedIsReachable) {
                        baseObjects = parser.getBaseObjectIds();
@@ -1071,8 +1077,10 @@ public abstract class BaseReceivePack {
                        }
                }
 
+               checking.beginTask(JGitText.get().countingObjects, ProgressMonitor.UNKNOWN);
                RevCommit c;
                while ((c = ow.next()) != null) {
+                       checking.update(1);
                        if (providedObjects != null //
                                        && !c.has(RevFlag.UNINTERESTING) //
                                        && !providedObjects.contains(c))
@@ -1081,6 +1089,7 @@ public abstract class BaseReceivePack {
 
                RevObject o;
                while ((o = ow.nextObject()) != null) {
+                       checking.update(1);
                        if (o.has(RevFlag.UNINTERESTING))
                                continue;
 
@@ -1094,6 +1103,7 @@ public abstract class BaseReceivePack {
                        if (o instanceof RevBlob && !db.hasObject(o))
                                throw new MissingObjectException(o, Constants.TYPE_BLOB);
                }
+               checking.endTask();
 
                if (baseObjects != null) {
                        for (ObjectId id : baseObjects) {