From: Robin Rosenberg Date: Sun, 05 Oct 2008 23:36:39 GMT Subject: [EGIT PATCH 3/6] Add a method to get refs by object Id Message-ID: <1223249802-9959-4-git-send-email-robin.rosenberg@dewire.com> In-Reply-To: <1223249802-9959-3-git-send-email-robin.rosenberg@dewire.com> Signed-off-by: Robin Rosenberg --- .../src/org/spearce/jgit/lib/Repository.java | 28 ++++++++++++++++++++ 1 files changed, 28 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 dfce1b8..3fc5236 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java @@ -47,6 +47,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -939,6 +940,33 @@ public String getBranch() throws IOException { } /** + * @return a map with all objects referenced by a peeled ref. + */ + public Map> getAllRefsByPeeledObjectId() { + Map allRefs = getAllRefs(); + HashMap> ret = new HashMap>(allRefs.size()); + for (Map.Entry e : allRefs.entrySet()) { + Ref ref = e.getValue(); + AnyObjectId target = ref.getPeeledObjectId(); + if (target == null) + target = ref.getObjectId(); + List list = ret.get(target); + if (list == null) { + list = Collections.singletonList(ref); + } else { + if (list.size() == 1) { + ArrayList list2 = new ArrayList(2); + list2.add(list.get(0)); + list = list2; + } + list.add(ref); + } + ret.put(target, list); + } + return ret; + } + + /** * @return true if HEAD points to a StGit patch. */ public boolean isStGitMode() { -- 1.6.0.1.310.gf789d0.dirty