[EGIT PATCH 2/6] Peel annotated tags when getting all refs
- From
Robin Rosenberg <robin.rosenberg@dewire.com>
- Date
- Oct 5, 2008, 23:36 UTC
- Message-ID
- <1223249802-9959-3-git-send-email-robin.rosenberg@dewire.com>
- In-Reply-To
- <1223249802-9959-2-git-send-email-robin.rosenberg@dewire.com>
For packed refs we got this automatically from packed-refs, but for loose tags we have to follow the tags and get the leaf object in order to comply with the documentation.
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com> --- .../src/org/spearce/jgit/lib/RefDatabase.java | 24 ++++++++++++++++++- 1 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java index 5a1b85f..1ee70d9 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java @@ -271,7 +271,16 @@ private void readOneLooseRef(final Map<String, Ref> avail, return; } - ref = new Ref(Ref.Storage.LOOSE, origName, refName, id); + Object tt = db.mapObject(id, refName); + if (tt != null && tt instanceof Tag) { + Tag t = (Tag)tt; + while (t != null && t.getType().equals(Constants.TYPE_TAG)) + t = db.mapTag(t.getTag(), t.getObjId()); + if (t != null) + ref = new Ref(Ref.Storage.LOOSE, origName, refName, id, t.getObjId()); + } else + ref = new Ref(Ref.Storage.LOOSE, origName, refName, id); + looseRefs.put(ref.getName(), ref); looseRefsMTime.put(ref.getName(), ent.lastModified()); avail.put(ref.getName(), ref); @@ -363,7 +372,18 @@ private Ref readRefBasic(final String origName, final String name, final int dep throw new IOException("Not a ref: " + name + ": " + line); } - ref = new Ref(Ref.Storage.LOOSE, origName, name, id); + Object tt = db.mapObject(id, origName); + if (tt != null && tt instanceof Tag) { + Tag t = (Tag)tt; + while (t != null && t.getType().equals(Constants.TYPE_TAG)) + t = db.mapTag(t.getTag(), t.getObjId()); + if (t != null) + ref = new Ref(Ref.Storage.LOOSE, origName, name, id, t.getObjId()); + } else + ref = new Ref(Ref.Storage.LOOSE, origName, name, id); + + looseRefs.put(origName, ref); + ref = new Ref(Ref.Storage.LOOSE, origName, id); looseRefs.put(name, ref); looseRefsMTime.put(name, mtime); return ref;
-- 1.6.0.1.310.gf789d0.dirty