Ensure RevTag is parsed before using its body
Ideally these methods in RevTag should be calling parseBody. As a
stopgap, we can do it ourselves.
No visible change intended. This is intended as preparation for
callers to be able to use setRetainBody(false).
Change-Id: I2e9e4d3550156ea5d77f5624ab35f3ab66bea6e5
diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java
index 0dd00f3..6982e0a 100644
--- a/java/com/google/gitiles/LogServlet.java
+++ b/java/com/google/gitiles/LogServlet.java
@@ -110,7 +110,7 @@
List<Map<String, Object>> tags = Lists.newArrayListWithExpectedSize(1);
for (RevObject o : RevisionServlet.listObjects(paginator.getWalk(), view.getRevision())) {
if (o instanceof RevTag) {
- tags.add(new TagSoyData(linkifier, req).toSoyData((RevTag) o, df));
+ tags.add(new TagSoyData(linkifier, req).toSoyData(paginator.getWalk(), (RevTag) o, df));
}
}
if (!tags.isEmpty()) {
diff --git a/java/com/google/gitiles/RevisionServlet.java b/java/com/google/gitiles/RevisionServlet.java
index 17ad143..597c053 100644
--- a/java/com/google/gitiles/RevisionServlet.java
+++ b/java/com/google/gitiles/RevisionServlet.java
@@ -122,7 +122,7 @@
"type",
Constants.TYPE_TAG,
"data",
- new TagSoyData(linkifier, req).toSoyData((RevTag) obj, df)));
+ new TagSoyData(linkifier, req).toSoyData(walk, (RevTag) obj, df)));
break;
default:
log.warn("Bad object type for {}: {}", ObjectId.toString(obj.getId()), obj.getType());
diff --git a/java/com/google/gitiles/TagSoyData.java b/java/com/google/gitiles/TagSoyData.java
index 831cb8e..32b319a 100644
--- a/java/com/google/gitiles/TagSoyData.java
+++ b/java/com/google/gitiles/TagSoyData.java
@@ -15,10 +15,13 @@
package com.google.gitiles;
import com.google.common.collect.Maps;
+import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.revwalk.RevTag;
+import org.eclipse.jgit.revwalk.RevWalk;
/** Soy data converter for git tags. */
public class TagSoyData {
@@ -30,7 +33,10 @@
this.req = req;
}
- public Map<String, Object> toSoyData(RevTag tag, DateFormatter df) {
+ public Map<String, Object> toSoyData(RevWalk walk, RevTag tag, DateFormatter df)
+ throws MissingObjectException, IOException {
+ walk.parseBody(tag);
+
Map<String, Object> data = Maps.newHashMapWithExpectedSize(4);
data.put("sha", ObjectId.toString(tag));
if (tag.getTaggerIdent() != null) {
diff --git a/java/com/google/gitiles/TimeCache.java b/java/com/google/gitiles/TimeCache.java
index a019d0f..e1e55ce 100644
--- a/java/com/google/gitiles/TimeCache.java
+++ b/java/com/google/gitiles/TimeCache.java
@@ -60,6 +60,8 @@
() -> {
RevObject o = walk.parseAny(id);
while (o instanceof RevTag) {
+ walk.parseBody(o);
+
RevTag tag = (RevTag) o;
PersonIdent ident = tag.getTaggerIdent();
if (ident != null) {