]> source.dussan.org Git - jgit.git/commitdiff
Expose the set of root commits in PackStatistics 42/53842/1
authorShawn Pearce <spearce@spearce.org>
Sun, 16 Aug 2015 21:10:16 +0000 (14:10 -0700)
committerShawn Pearce <spearce@spearce.org>
Sun, 16 Aug 2015 21:10:16 +0000 (14:10 -0700)
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

org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackStatistics.java

index d9fa393c7eb25df8bccf67ea9bb19f638552761a..683d1cd6e9a053fa6a0a26384c582e467ea27de2 100644 (file)
@@ -1718,6 +1718,7 @@ public class PackWriter implements AutoCloseable {
                final int maxBases = config.getDeltaSearchWindowSize();
                Set<RevTree> baseTrees = new HashSet<RevTree>();
                BlockList<RevCommit> commits = new BlockList<RevCommit>();
+               Set<ObjectId> roots = new HashSet<>();
                RevCommit c;
                while ((c = walker.next()) != null) {
                        if (exclude(c))
@@ -1729,8 +1730,12 @@ public class PackWriter implements AutoCloseable {
                        }
 
                        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) {
index 24efb943c3d37aca319c24f53961b0837a58b341..a811fe3cde9241becfdd4e7fa376e39e3106843c 100644 (file)
@@ -178,6 +178,9 @@ public class PackStatistics {
                /** The collection of reused packs in the upload. */
                public List<CachedPack> reusedPacks;
 
+               /** Commits with no parents. */
+               public Set<ObjectId> rootCommits;
+
                /** If a shallow pack, the depth in commits. */
                public int depth;
 
@@ -299,6 +302,11 @@ public class PackStatistics {
                return statistics.reusedPacks;
        }
 
+       /** @return unmodifiable collection of the root commits of the history. */
+       public Set<ObjectId> 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.