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 ff45b1cda..9d39f436c 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 @@ private boolean needCheckConnectivity() { 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 @@ private void checkConnectivity() throws IOException { } } + 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 @@ private void checkConnectivity() throws IOException { RevObject o; while ((o = ow.nextObject()) != null) { + checking.update(1); if (o.has(RevFlag.UNINTERESTING)) continue; @@ -1094,6 +1103,7 @@ private void checkConnectivity() throws IOException { if (o instanceof RevBlob && !db.hasObject(o)) throw new MissingObjectException(o, Constants.TYPE_BLOB); } + checking.endTask(); if (baseObjects != null) { for (ObjectId id : baseObjects) {