in java/com/google/gitiles/RevisionServlet.java [71:144]
protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
GitilesView view = ViewFilter.getView(req);
Repository repo = ServletUtils.getRepository(req);
GitilesAccess access = getAccess(req);
Config cfg = getAccess(req).getConfig();
try (RevWalk walk = new RevWalk(repo)) {
DateFormatter df = new DateFormatter(access, Format.DEFAULT);
List<RevObject> objects = listObjects(walk, view.getRevision());
List<Map<String, ?>> soyObjects = Lists.newArrayListWithCapacity(objects.size());
boolean hasBlob = false;
boolean hasReadme = false;
// TODO(sop): Allow caching commits by SHA-1 when no S cookie is sent.
for (RevObject obj : objects) {
try {
switch (obj.getType()) {
case OBJ_COMMIT:
soyObjects.add(
ImmutableMap.of(
"type",
Constants.TYPE_COMMIT,
"data",
new CommitSoyData()
.setLinkifier(linkifier)
.setArchiveFormat(getArchiveFormat(access))
.toSoyData(req, walk, (RevCommit) obj, COMMIT_SOY_FIELDS, df)));
break;
case OBJ_TREE:
Map<String, Object> tree =
new TreeSoyData(
walk.getObjectReader(), view, cfg, (RevTree) obj, req.getRequestURI())
.toSoyData(obj);
soyObjects.add(ImmutableMap.of("type", Constants.TYPE_TREE, "data", tree));
hasReadme = tree.containsKey("readmeHtml");
break;
case OBJ_BLOB:
soyObjects.add(
ImmutableMap.of(
"type",
Constants.TYPE_BLOB,
"data",
new BlobSoyData(walk.getObjectReader(), view).toSoyData(obj)));
hasBlob = true;
break;
case OBJ_TAG:
soyObjects.add(
ImmutableMap.of(
"type",
Constants.TYPE_TAG,
"data",
new TagSoyData(linkifier, req).toSoyData(walk, (RevTag) obj, df)));
break;
default:
throw new GitilesRequestFailureException(FailureReason.UNSUPPORTED_OBJECT_TYPE);
}
} catch (MissingObjectException e) {
throw new GitilesRequestFailureException(FailureReason.OBJECT_NOT_FOUND, e);
} catch (IncorrectObjectTypeException e) {
throw new GitilesRequestFailureException(FailureReason.INCORRECT_OBJECT_TYPE, e);
}
}
renderHtml(
req,
res,
"com.google.gitiles.templates.RevisionDetail.revisionDetail",
ImmutableMap.of(
"title", view.getRevision().getName(),
"objects", soyObjects,
"hasBlob", hasBlob,
"hasReadme", hasReadme));
}
}