From 4c3e7931ed1eb2c686e6e90a57e9122cf603d68c Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Wed, 12 Mar 2014 17:13:10 -0700 Subject: [PATCH] Display progress while checking connectivity on push 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/transport/BaseReceivePack.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java index ff45b1cda3..9d39f436c6 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java @@ -1036,6 +1036,12 @@ public abstract class BaseReceivePack { private void checkConnectivity() throws IOException { ObjectIdSubclassMap baseObjects = null; ObjectIdSubclassMap 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) { -- 2.39.5