in java/com/google/gitiles/CommitData.java [95:187]
CommitData build(HttpServletRequest req, RevWalk walk, RevCommit c, Set<Field> fs)
throws IOException {
checkFields(fs);
checkNotNull(req, "request");
checkNotNull(walk, "walk");
Repository repo = ServletUtils.getRepository(req);
GitilesView view = ViewFilter.getView(req);
CommitData result = new CommitData();
if (fs.contains(Field.AUTHOR)) {
walk.parseBody(c);
result.author = c.getAuthorIdent();
}
if (fs.contains(Field.COMMITTER)) {
walk.parseBody(c);
result.committer = c.getCommitterIdent();
}
if (fs.contains(Field.SHA)) {
result.sha = c.copy();
}
if (fs.contains(Field.ABBREV_SHA)) {
try (ObjectReader reader = repo.getObjectDatabase().newReader()) {
result.abbrev = reader.abbreviate(c);
}
}
if (fs.contains(Field.URL)) {
result.url = GitilesView.revision().copyFrom(view).setRevision(c).toUrl();
}
if (fs.contains(Field.LOG_URL)) {
result.logUrl = urlFromView(view, c, GitilesView.log());
}
if (fs.contains(Field.ARCHIVE_URL)) {
result.archiveUrl =
urlFromView(
view, c, GitilesView.archive().setExtension(archiveFormat.getDefaultSuffix()));
}
if (fs.contains(Field.ARCHIVE_TYPE)) {
result.archiveType = archiveFormat;
}
if (fs.contains(Field.TREE)) {
result.tree = c.getTree().copy();
}
if (fs.contains(Field.TREE_URL)) {
// Tree always implies the root tree.
result.treeUrl = GitilesView.path().copyFrom(view).setPathPart("/").toUrl();
}
if (fs.contains(Field.PARENTS)) {
result.parents = Arrays.asList(c.getParents());
}
if (fs.contains(Field.BRANCHES)) {
result.branches = getRefsById(repo, c, Constants.R_HEADS);
}
if (fs.contains(Field.TAGS)) {
result.tags = getRefsById(repo, c, Constants.R_TAGS);
}
if (fs.contains(Field.NOTES)) {
Ref notesRef = repo.getRefDatabase().exactRef(Constants.R_NOTES_COMMITS);
if (notesRef != null) {
try {
byte[] data =
NoteMap.read(walk.getObjectReader(), walk.parseCommit(notesRef.getObjectId()))
.getCachedBytes(c, MAX_NOTE_SIZE);
result.notes = new String(data, "utf-8");
} catch (Exception e) {
result.notes = "";
}
}
}
if (fs.contains(Field.MESSAGE)) {
walk.parseBody(c);
result.message = c.getFullMessage();
}
if (fs.contains(Field.SHORT_MESSAGE)) {
walk.parseBody(c);
String msg = c.getShortMessage();
if (msg.length() > 80) {
String ft = result.message;
if (ft == null) {
ft = c.getFullMessage();
}
int lf = ft.indexOf('\n');
if (lf > 0) {
msg = ft.substring(0, lf);
}
}
result.shortMessage = msg;
}
if (fs.contains(Field.DIFF_TREE)) {
result.diffEntries = computeDiffEntries(repo, view, walk, c);
}
return result;
}