diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriterTest.java index 5040a3b6a..de3610563 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriterTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriterTest.java @@ -14,6 +14,7 @@ import static org.hamcrest.Matchers.containsInAnyOrder; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.ByteArrayOutputStream; @@ -31,6 +32,7 @@ import org.eclipse.jgit.lib.ConfigConstants; import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.revwalk.RevBlob; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; @@ -135,6 +137,56 @@ public void testWriterWithoutExtraEdgeList() throws Exception { NB.decodeInt32(data, 56)); } + @Test + public void testProgressMonitor() throws Exception { + RevCommit root = commit(); + RevCommit a = commit(root); + RevCommit b = commit(root); + RevCommit tip = commit(a, b); + Set wants = Collections.singleton(tip); + + NonNestedTasksProgressMonitor nonNested = new NonNestedTasksProgressMonitor(); + GraphCommits graphCommits = GraphCommits.fromWalk(nonNested, wants, + walk); + writer = new CommitGraphWriter(graphCommits, true); + writer.write(nonNested, os); + } + + private static class NonNestedTasksProgressMonitor + implements ProgressMonitor { + + boolean inTask; + + @Override + public void start(int totalTasks) { + } + + @Override + public void beginTask(String title, int totalWork) { + assertFalse("Previous monitoring task is not closed", inTask); + inTask = true; + } + + @Override + public void update(int completed) { + } + + @Override + public void endTask() { + assertTrue("Closing task that wasn't started", inTask); + inTask = false; + } + + @Override + public boolean isCancelled() { + return false; + } + + @Override + public void showDuration(boolean enabled) { + } + } + static HashSet changedPathStrings(byte[] data) { int oidf_offset = -1; int bidx_offset = -1; diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties index 84f5a7638..6bd4cb136 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties @@ -886,7 +886,7 @@ writerAlreadyInitialized=Writer already initialized writeTimedOut=Write timed out after {0} ms writingNotPermitted=Writing not permitted writingNotSupported=Writing {0} not supported. -writingOutCommitGraph=Writing out commit-graph in {0} passes +writingOutCommitGraph=Writing out commit-graph writingObjects=Writing objects wrongDecompressedLength=wrong decompressed length wrongRepositoryState=Wrong Repository State: {0} diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java index f72c1eaa8..1c5f5b852 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java @@ -31,7 +31,6 @@ import java.io.InterruptedIOException; import java.io.OutputStream; import java.nio.ByteBuffer; -import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -131,13 +130,6 @@ public Stats write(@NonNull ProgressMonitor monitor, chunks = Collections.unmodifiableList(chunks); long expectedSize = calculateExpectedSize(chunks); - long writeCount = 256L + 2 * graphCommits.size() - + graphCommits.getExtraEdgeCnt(); - monitor.beginTask( - MessageFormat.format(JGitText.get().writingOutCommitGraph, - Integer.valueOf(chunks.size())), - (int) writeCount); - try (CancellableDigestOutputStream out = new CancellableDigestOutputStream( monitor, commitGraphStream)) { writeHeader(out, chunks.size()); @@ -153,8 +145,6 @@ public Stats write(@NonNull ProgressMonitor monitor, } catch (InterruptedIOException e) { throw new IOException(JGitText.get().commitGraphWritingCancelled, e); - } finally { - monitor.endTask(); } return Stats.from(bloomFilterChunks); } @@ -290,6 +280,8 @@ private void writeOidLookUp(CancellableDigestOutputStream out) private void writeCommitData(ProgressMonitor monitor, CancellableDigestOutputStream out) throws IOException { int[] generations = computeGenerationNumbers(monitor); + monitor.beginTask(JGitText.get().writingOutCommitGraph, + graphCommits.size()); int num = 0; byte[] tmp = new byte[hashsz + COMMIT_DATA_WIDTH]; int i = 0; @@ -330,6 +322,7 @@ private void writeCommitData(ProgressMonitor monitor, out.getWriteMonitor().update(1); i++; } + monitor.endTask(); } private int[] computeGenerationNumbers(ProgressMonitor monitor)