in java/com/google/gitiles/doc/DocServlet.java [83:136]
protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
MarkdownConfig cfg = MarkdownConfig.get(getAccess(req).getConfig());
if (!cfg.render) {
throw new GitilesRequestFailureException(FailureReason.MARKDOWN_NOT_ENABLED);
}
GitilesView view = ViewFilter.getView(req);
Repository repo = ServletUtils.getRepository(req);
try (RevWalk rw = new RevWalk(repo)) {
ObjectReader reader = rw.getObjectReader();
String path = view.getPathPart();
RevTree root;
try {
root = rw.parseTree(view.getRevision().getId());
} catch (IncorrectObjectTypeException e) {
throw new GitilesRequestFailureException(FailureReason.INCORRECT_OBJECT_TYPE, e);
}
MarkdownFile srcmd = findFile(rw, root, path);
if (srcmd == null) {
throw new GitilesRequestFailureException(FailureReason.OBJECT_NOT_FOUND);
}
MarkdownFile navmd = findNavbar(rw, root, path);
String curEtag = etag(srcmd, navmd);
if (etagMatch(req, curEtag)) {
res.setStatus(SC_NOT_MODIFIED);
return;
}
view = view.toBuilder().setPathPart(srcmd.path).build();
try {
srcmd.read(reader, cfg);
if (navmd != null) {
navmd.read(reader, cfg);
}
} catch (LargeObjectException.ExceedsLimit e) {
fileTooBig(res, view);
return;
}
MarkdownToHtml.Builder fmt =
MarkdownToHtml.builder()
.setConfig(cfg)
.setGitilesView(view)
.setRequestUri(req.getRequestURI())
.setReader(reader)
.setRootTree(root)
.setHtmlSanitizer(htmlSanitizer.create(req));
Navbar navbar = createNavbar(cfg, fmt, navmd);
res.setHeader(HttpHeaders.ETAG, curEtag);
showDoc(req, res, view, fmt, navbar, srcmd);
}
}