From 1d7d0f95e0be8121ee16640fa1cd3b0805fd9092 Mon Sep 17 00:00:00 2001 From: Shawn Pearce Date: Sun, 16 Aug 2015 14:10:16 -0700 Subject: [PATCH] Expose the set of root commits in PackStatistics Root commits are commits with zero parents. If a commmit has no parents it is the first commit in the repository. In general the root commits should be unique for any given project, as the first commit will be created at a different time, by a different user with its own message. These root commits can be used as a "fingerprint" to identify disjoint histories. Change-Id: Id891dbc1f17c816cea404569578bb7635ff85cdb --- .../eclipse/jgit/internal/storage/pack/PackWriter.java | 5 +++++ .../src/org/eclipse/jgit/storage/pack/PackStatistics.java | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java index d9fa393c7..683d1cd6e 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java @@ -1718,6 +1718,7 @@ private void findObjectsToPack(final ProgressMonitor countingMonitor, final int maxBases = config.getDeltaSearchWindowSize(); Set baseTrees = new HashSet(); BlockList commits = new BlockList(); + Set roots = new HashSet<>(); RevCommit c; while ((c = walker.next()) != null) { if (exclude(c)) @@ -1729,8 +1730,12 @@ private void findObjectsToPack(final ProgressMonitor countingMonitor, } commits.add(c); + if (c.getParentCount() == 0) { + roots.add(c.copy()); + } countingMonitor.update(1); } + stats.rootCommits = Collections.unmodifiableSet(roots); if (shallowPack) { for (RevCommit cmit : commits) { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java index 24efb943c..a811fe3cd 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java @@ -178,6 +178,9 @@ public static class Accumulator { /** The collection of reused packs in the upload. */ public List reusedPacks; + /** Commits with no parents. */ + public Set rootCommits; + /** If a shallow pack, the depth in commits. */ public int depth; @@ -299,6 +302,11 @@ public List getReusedPacks() { return statistics.reusedPacks; } + /** @return unmodifiable collection of the root commits of the history. */ + public Set getRootCommits() { + return statistics.rootCommits; + } + /** * @return number of objects in the output pack that went through the delta * search process in order to find a potential delta base.