Fix BatchRefUpdate progress-monitoring so it doesn't count twice

I was seeing output like this while running The BFG:

Updating references:    200% (374/187)

...issue sneaked in with 5cf53fda I think.

The update call is also moved to the end of the loop, as update() is
only supposed to be called after work has been done ("Denote that some
work units have been completed").

Change-Id: I1620fa75be16dc80df44745d0e123ea512762e31
Signed-off-by: Robin Stocker <robin@nibor.org>
This commit is contained in:
Roberto Tyley 2013-05-18 22:52:55 +01:00 committed by Robin Stocker
parent 84ad4957c6
commit b4b3999f82
2 changed files with 32 additions and 10 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2010, Google Inc.
* Copyright (C) 2010, 2013 Google Inc.
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available
@ -73,6 +73,7 @@
import org.eclipse.jgit.junit.TestRepository;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.BatchRefUpdate;
import org.eclipse.jgit.lib.ProgressMonitor;
import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Ref.Storage;
@ -1191,8 +1192,7 @@ public void testBatchRefUpdateSimpleNoForce() throws IOException {
ReceiveCommand.Type.UPDATE_NONFASTFORWARD));
BatchRefUpdate batchUpdate = refdir.newBatchUpdate();
batchUpdate.addCommand(commands);
batchUpdate
.execute(new RevWalk(diskRepo), NullProgressMonitor.INSTANCE);
batchUpdate.execute(new RevWalk(diskRepo), new StrictWorkMonitor());
Map<String, Ref> refs = refdir.getRefs(RefDatabase.ALL);
assertEquals(ReceiveCommand.Result.OK, commands.get(0).getResult());
assertEquals(ReceiveCommand.Result.REJECTED_NONFASTFORWARD, commands
@ -1215,8 +1215,7 @@ public void testBatchRefUpdateSimpleForce() throws IOException {
BatchRefUpdate batchUpdate = refdir.newBatchUpdate();
batchUpdate.setAllowNonFastForwards(true);
batchUpdate.addCommand(commands);
batchUpdate
.execute(new RevWalk(diskRepo), NullProgressMonitor.INSTANCE);
batchUpdate.execute(new RevWalk(diskRepo), new StrictWorkMonitor());
Map<String, Ref> refs = refdir.getRefs(RefDatabase.ALL);
assertEquals(ReceiveCommand.Result.OK, commands.get(0).getResult());
assertEquals(ReceiveCommand.Result.OK, commands.get(1).getResult());
@ -1267,8 +1266,7 @@ public void testBatchRefUpdateConflictThanksToDelete() throws IOException {
BatchRefUpdate batchUpdate = refdir.newBatchUpdate();
batchUpdate.setAllowNonFastForwards(true);
batchUpdate.addCommand(commands);
batchUpdate
.execute(new RevWalk(diskRepo), NullProgressMonitor.INSTANCE);
batchUpdate.execute(new RevWalk(diskRepo), new StrictWorkMonitor());
Map<String, Ref> refs = refdir.getRefs(RefDatabase.ALL);
assertEquals(ReceiveCommand.Result.OK, commands.get(0).getResult());
assertEquals(ReceiveCommand.Result.OK, commands.get(1).getResult());
@ -1311,4 +1309,29 @@ private void deleteLooseRef(String name) {
File path = new File(diskRepo.getDirectory(), name);
assertTrue("deleted " + name, path.delete());
}
private static final class StrictWorkMonitor implements ProgressMonitor {
private int lastWork, totalWork;
public void start(int totalTasks) {
// empty
}
public void beginTask(String title, int totalWork) {
this.totalWork = totalWork;
lastWork = 0;
}
public void update(int completed) {
lastWork += completed;
}
public void endTask() {
assertEquals("Units of work recorded", totalWork, lastWork);
}
public boolean isCancelled() {
return false;
}
}
}

View File

@ -294,8 +294,6 @@ public void execute(RevWalk walk, ProgressMonitor monitor)
// Now to the update that may require more room in the name space
for (ReceiveCommand cmd : commands2) {
try {
monitor.update(1);
if (cmd.getResult() == NOT_ATTEMPTED) {
cmd.updateType(walk);
RefUpdate ru = newUpdate(cmd);
@ -305,7 +303,6 @@ public void execute(RevWalk walk, ProgressMonitor monitor)
break;
case UPDATE:
case UPDATE_NONFASTFORWARD:
monitor.update(1);
RefUpdate ruu = newUpdate(cmd);
cmd.setResult(ruu.update(walk));
break;
@ -329,6 +326,8 @@ public void execute(RevWalk walk, ProgressMonitor monitor)
} catch (IOException err) {
cmd.setResult(REJECTED_OTHER_REASON, MessageFormat.format(
JGitText.get().lockError, err.getMessage()));
} finally {
monitor.update(1);
}
}
}