Signed-off-by: Robin Rosenberg <robin.rosenberg@xxxxxxxxxx> --- .../src/org/spearce/jgit/lib/Repository.java | 30 ++++++++++++++++++++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java index 4d6e6fd..5088150 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java @@ -47,10 +47,13 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.Vector; import org.spearce.jgit.errors.IncorrectObjectTypeException; @@ -952,6 +955,33 @@ public Ref peel(final Ref ref) { } /** + * @return a map with all objects referenced by a peeled ref. + */ + public Map<AnyObjectId, Set<Ref>> getAllRefsByPeeledObjectId() { + Map<String, Ref> allRefs = getAllRefs(); + Map<AnyObjectId, Set<Ref>> ret = new HashMap<AnyObjectId, Set<Ref>>(allRefs.size()); + for (Ref ref : allRefs.values()) { + if (!ref.isPeeled()) + ref = peel(ref); + AnyObjectId target = ref.getPeeledObjectId(); + if (target == null) + target = ref.getObjectId(); + // We assume most Sets here are singletons + Set<Ref> oset = ret.put(target, Collections.singleton(ref)); + if (oset != null) { + // that was not the case (rare) + if (oset.size() == 1) { + // Was a read-only singleton, we must copy to a new Set + oset = new HashSet<Ref>(oset); + } + ret.put(target, oset); + oset.add(ref); + } + } + return ret; + } + + /** * @return true if HEAD points to a StGit patch. */ public boolean isStGitMode() { -- 1.6.0.3.640.g6331a.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html