From c218a0760ddcdd9a392b0ae15f99fdccf823cd42 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 24 Jan 2011 16:18:23 -0800 Subject: [PATCH] PackWriter: Use TOPO order only for incremental packs When performing an initial clone of a repository there are no uninteresting commits, and the resulting pack will be completely self-contained. Therefore PackWriter does not need to honor C Git standard TOPO ordering as described in JGit commit ba984ba2e0a ("Fix checkReferencedIsReachable to use correct base list"). Switching to COMMIT_TIME_DESC when there are no uninteresting commits allows the "Counting objects" phase to emit progress earlier, as the RevWalk will not buffer the commit list. When TOPO is set the RevWalk enumerates all commits first, before outputing any for PackWriter to mark progress updates from. Change-Id: If2b6a9903b536c7fb3c45f85d0a67ff6c6e66f22 Signed-off-by: Shawn O. Pearce --- .../src/org/eclipse/jgit/storage/pack/PackWriter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java index 5986aca4e..17c5a12d4 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java @@ -992,7 +992,10 @@ public class PackWriter { final ObjectWalk walker = new ObjectWalk(reader); walker.setRetainBody(false); - walker.sort(RevSort.TOPO); + if (not.isEmpty()) + walker.sort(RevSort.COMMIT_TIME_DESC); + else + walker.sort(RevSort.TOPO); if (thin && !not.isEmpty()) walker.sort(RevSort.BOUNDARY, true);