Use CommitData to produce CommitJsonData Change-Id: I7261b0c40e97119c32627c4ea89038bbe174925f
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java index 87f3456..10a8c24 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
@@ -14,15 +14,26 @@ package com.google.gitiles; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.google.gitiles.CommitData.Field; import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.util.GitDateFormatter; +import java.io.IOException; import java.util.List; +import javax.annotation.Nullable; +import javax.servlet.http.HttpServletRequest; + class CommitJsonData { + private static final ImmutableSet<Field> DEFAULT_FIELDS = Sets.immutableEnumSet( + Field.SHA, Field.PARENTS, Field.AUTHOR, Field.COMMITTER, Field.MESSAGE); + static class Commit { String commit; List<String> parents; @@ -37,16 +48,38 @@ String time; } - static Commit toJsonData(RevCommit c, GitDateFormatter df) { + private RevWalk walk; + + CommitJsonData setRevWalk(@Nullable RevWalk walk) { + this.walk = walk; + return this; + } + + Commit toJsonData(HttpServletRequest req, RevCommit c, GitDateFormatter df) + throws IOException { + CommitData cd = new CommitData.Builder() + .setRevWalk(walk) + .build(req, c, DEFAULT_FIELDS); + Commit result = new Commit(); - result.commit = c.name(); - result.parents = Lists.newArrayListWithCapacity(c.getParentCount()); - for (RevCommit parent : c.getParents()) { - result.parents.add(parent.name()); + if (cd.sha != null) { + result.commit = cd.sha.name(); } - result.author = toJsonData(c.getAuthorIdent(), df); - result.committer = toJsonData(c.getCommitterIdent(), df); - result.message = c.getFullMessage(); + if (cd.parents != null) { + result.parents = Lists.newArrayListWithCapacity(cd.parents.size()); + for (RevCommit parent : cd.parents) { + result.parents.add(parent.name()); + } + } + if (cd.author != null) { + result.author = toJsonData(cd.author, df); + } + if (cd.committer != null) { + result.committer = toJsonData(cd.committer, df); + } + if (cd.message != null) { + result.message = cd.message; + } return result; } @@ -57,7 +90,4 @@ result.time = df.formatDate(ident); return result; } - - private CommitJsonData() { - } }
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 aa6bd34..e6ae4c2 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -135,7 +135,7 @@ List<CommitJsonData.Commit> entries = Lists.newArrayListWithCapacity(paginator.getLimit()); for (RevCommit c : paginator) { paginator.getWalk().parseBody(c); - entries.add(CommitJsonData.toJsonData(c, df)); + entries.add(new CommitJsonData().setRevWalk(paginator.getWalk()).toJsonData(req, c, df)); } result.put("log", entries); if (paginator.getPreviousStart() != null) {