Include tree contents in the revision page for commits Change-Id: I5b1912bb291e8db0c821726b2e2b63915ca6d8fe
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java index 031b667..52b4ea8 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -98,7 +98,7 @@ if (!view.getRevision().nameIsId()) { List<Map<String, Object>> tags = Lists.newArrayListWithExpectedSize(1); - for (RevObject o : RevisionServlet.listObjects(walk, view.getRevision().getId())) { + for (RevObject o : RevisionServlet.listObjects(walk, view.getRevision())) { if (o instanceof RevTag) { tags.add(new TagSoyData(linkifier, req).toSoyData((RevTag) o)); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java index e4d0300..0c5f97f 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -70,7 +70,7 @@ String name = ref.getName().substring(prefix.length()); boolean needPrefix = !ref.getName().equals(refdb.getRef(name).getName()); result.add(ImmutableMap.of( - "url", GitilesView.log().copyFrom(req).setRevision( + "url", GitilesView.revision().copyFrom(req).setRevision( Revision.unpeeled(needPrefix ? ref.getName() : name, ref.getObjectId())).toUrl(), "name", name)); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java index ac5cd8f..345f7d2 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -64,7 +64,7 @@ RevWalk walk = new RevWalk(repo); try { - List<RevObject> objects = listObjects(walk, view.getRevision().getId()); + List<RevObject> objects = listObjects(walk, view.getRevision()); List<Map<String, ?>> soyObjects = Lists.newArrayListWithCapacity(objects.size()); boolean hasBlob = false; @@ -120,17 +120,21 @@ } // TODO(dborowitz): Extract this. - static List<RevObject> listObjects(RevWalk walk, ObjectId id) + static List<RevObject> listObjects(RevWalk walk, Revision rev) throws MissingObjectException, IOException { List<RevObject> objects = Lists.newArrayListWithExpectedSize(1); + ObjectId id = rev.getId(); + RevObject cur; while (true) { - RevObject cur = walk.parseAny(id); + cur = walk.parseAny(id); objects.add(cur); - if (cur.getType() == Constants.OBJ_TAG) { - id = ((RevTag) cur).getObject(); - } else { + if (cur.getType() != Constants.OBJ_TAG) { break; } + id = ((RevTag) cur).getObject(); + } + if (cur.getType() == Constants.OBJ_COMMIT) { + objects.add(walk.parseTree(((RevCommit) cur).getTree())); } return objects; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java index 6cbf541..66aa207 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -19,6 +19,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Charsets; +import com.google.common.base.Objects; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.io.Files; @@ -56,7 +57,8 @@ // simplifyPath() normalizes "a/../../" to "a", so manually check whether // the path leads above the git root. - int depth = new StringTokenizer(view.getTreePath(), "/").countTokens(); + String path = Objects.firstNonNull(view.getTreePath(), ""); + int depth = new StringTokenizer(path, "/").countTokens(); for (String part : PATH_SPLITTER.split(target)) { if (part.equals("..")) { depth--; @@ -68,7 +70,7 @@ } } - String path = Files.simplifyPath(view.getTreePath() + "/" + target); + path = Files.simplifyPath(view.getTreePath() + "/" + target); return GitilesView.path() .copyFrom(view) .setTreePath(!path.equals(".") ? path : "")