in java/com/google/gitiles/PathServlet.java [230:275]
protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException {
GitilesView view = ViewFilter.getView(req);
Repository repo = ServletUtils.getRepository(req);
String longStr = req.getParameter("long");
boolean includeSizes =
(longStr != null)
&& (longStr.isEmpty() || Boolean.TRUE.equals(StringUtils.toBooleanOrNull(longStr)));
String recursiveStr = req.getParameter("recursive");
boolean recursive =
(recursiveStr != null)
&& (recursiveStr.isEmpty()
|| Boolean.TRUE.equals(StringUtils.toBooleanOrNull(recursiveStr)));
try (RevWalk rw = new RevWalk(repo);
WalkResult wr = WalkResult.forPath(rw, view, recursive)) {
if (wr == null) {
throw new GitilesRequestFailureException(FailureReason.OBJECT_NOT_FOUND);
}
switch (wr.type) {
case REGULAR_FILE:
renderJson(
req,
res,
FileJsonData.toJsonData(
wr.id, view.getRepositoryName(), view.getRevision().getName(), wr.path),
FileJsonData.File.class);
break;
case TREE:
renderJson(
req,
res,
TreeJsonData.toJsonData(wr.id, wr.tw, includeSizes, recursive),
TreeJsonData.Tree.class);
break;
case EXECUTABLE_FILE:
case GITLINK:
case SYMLINK:
default:
throw new GitilesRequestFailureException(FailureReason.UNSUPPORTED_OBJECT_TYPE);
}
} catch (LargeObjectException e) {
throw new GitilesRequestFailureException(FailureReason.OBJECT_TOO_LARGE, e);
}
}