Pass in GitDateFormatters instead of providing constants This class is not thread safe. It may be reused within a single thread, so it is ok to create one at the servlet doGet* level and pass it in. Change-Id: I20e9137acdd128053bb339f6ee0533c46d5f8a4b
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 5c3cb40..87f3456 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
@@ -19,13 +19,10 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.util.GitDateFormatter; -import org.eclipse.jgit.util.GitDateFormatter.Format; import java.util.List; class CommitJsonData { - private static final GitDateFormatter dateFormatter = new GitDateFormatter(Format.DEFAULT); - static class Commit { String commit; List<String> parents; @@ -40,24 +37,24 @@ String time; } - static Commit toJsonData(RevCommit c) { + static Commit toJsonData(RevCommit c, GitDateFormatter df) { Commit result = new Commit(); result.commit = c.name(); result.parents = Lists.newArrayListWithCapacity(c.getParentCount()); for (RevCommit parent : c.getParents()) { result.parents.add(parent.name()); } - result.author = toJsonData(c.getAuthorIdent()); - result.committer = toJsonData(c.getCommitterIdent()); + result.author = toJsonData(c.getAuthorIdent(), df); + result.committer = toJsonData(c.getCommitterIdent(), df); result.message = c.getFullMessage(); return result; } - private static Ident toJsonData(PersonIdent ident) { + private static Ident toJsonData(PersonIdent ident, GitDateFormatter df) { Ident result = new Ident(); result.name = ident.getName(); result.email = ident.getEmailAddress(); - result.time = dateFormatter.formatDate(ident); + result.time = df.formatDate(ident); return result; }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java index b7ce0c8..768c0f3 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -44,7 +44,6 @@ import org.eclipse.jgit.treewalk.CanonicalTreeParser; import org.eclipse.jgit.treewalk.EmptyTreeIterator; import org.eclipse.jgit.util.GitDateFormatter; -import org.eclipse.jgit.util.GitDateFormatter.Format; import org.eclipse.jgit.util.RelativeDateFormatter; import org.eclipse.jgit.util.io.NullOutputStream; @@ -82,7 +81,6 @@ } } - private final GitDateFormatter dateFormatter = new GitDateFormatter(Format.DEFAULT); private Linkifier linkifier; private Repository repo; private RevWalk walk; @@ -105,8 +103,8 @@ return this; } - public Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit, KeySet ks) - throws IOException { + public Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit, KeySet ks, + GitDateFormatter df) throws IOException { checkKeys(ks); checkNotNull(req, "request"); repo = ServletUtils.getRepository(req); @@ -114,10 +112,10 @@ Map<String, Object> data = Maps.newHashMapWithExpectedSize(KeySet.DEFAULT.keys.size()); if (ks.contains("author")) { - data.put("author", toSoyData(commit.getAuthorIdent(), dateFormatter)); + data.put("author", toSoyData(commit.getAuthorIdent(), df)); } if (ks.contains("committer")) { - data.put("committer", toSoyData(commit.getCommitterIdent(), dateFormatter)); + data.put("committer", toSoyData(commit.getCommitterIdent(), df)); } if (ks.contains("sha")) { data.put("sha", ObjectId.toString(commit)); @@ -179,9 +177,9 @@ return ImmutableMap.copyOf(data); } - public Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit) - throws IOException { - return toSoyData(req, commit, KeySet.DEFAULT); + public Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit, + GitDateFormatter df) throws IOException { + return toSoyData(req, commit, KeySet.DEFAULT, df); } private void checkKeys(KeySet ks) { @@ -192,11 +190,11 @@ } // TODO(dborowitz): Extract this. - static Map<String, String> toSoyData(PersonIdent ident, GitDateFormatter dateFormatter) { + static Map<String, String> toSoyData(PersonIdent ident, GitDateFormatter df) { return ImmutableMap.of( "name", ident.getName(), "email", ident.getEmailAddress(), - "time", dateFormatter.formatDate(ident), + "time", df.formatDate(ident), // TODO(dborowitz): Switch from relative to absolute at some threshold. "relativeTime", RelativeDateFormatter.format(ident.getWhen())); }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java index e5fad23..02d81af 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -15,7 +15,6 @@ package com.google.gitiles; import static com.google.common.base.Preconditions.checkNotNull; - import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import com.google.common.base.Charsets; @@ -33,6 +32,8 @@ import org.eclipse.jgit.treewalk.CanonicalTreeParser; import org.eclipse.jgit.treewalk.EmptyTreeIterator; import org.eclipse.jgit.treewalk.filter.PathFilter; +import org.eclipse.jgit.util.GitDateFormatter; +import org.eclipse.jgit.util.GitDateFormatter.Format; import java.io.IOException; import java.io.OutputStream; @@ -81,10 +82,11 @@ Map<String, Object> data = getData(req); data.put("title", "Diff - " + view.getRevisionRange()); if (showCommit) { + GitDateFormatter df = new GitDateFormatter(Format.DEFAULT); data.put("commit", new CommitSoyData() .setLinkifier(linkifier) .setArchiveFormat(archiveFormat) - .toSoyData(req, walk.parseCommit(view.getRevision().getId()))); + .toSoyData(req, walk.parseCommit(view.getRevision().getId()), df)); } if (!data.containsKey("repositoryName") && (view.getRepositoryName() != null)) { data.put("repositoryName", view.getRepositoryName());
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 ffad8d8..86bd5a7 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -45,6 +45,8 @@ import org.eclipse.jgit.treewalk.filter.AndTreeFilter; import org.eclipse.jgit.treewalk.filter.PathFilter; import org.eclipse.jgit.treewalk.filter.TreeFilter; +import org.eclipse.jgit.util.GitDateFormatter; +import org.eclipse.jgit.util.GitDateFormatter.Format; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -84,13 +86,14 @@ } try { - Map<String, Object> data = new LogSoyData(req, view).toSoyData(paginator, null); + GitDateFormatter df = new GitDateFormatter(Format.DEFAULT); + Map<String, Object> data = new LogSoyData(req, view).toSoyData(paginator, null, df); if (!view.getRevision().nameIsId()) { List<Map<String, Object>> tags = Lists.newArrayListWithExpectedSize(1); for (RevObject o : RevisionServlet.listObjects(paginator.getWalk(), view.getRevision())) { if (o instanceof RevTag) { - tags.add(new TagSoyData(linkifier, req).toSoyData((RevTag) o)); + tags.add(new TagSoyData(linkifier, req).toSoyData((RevTag) o, df)); } } if (!tags.isEmpty()) { @@ -128,11 +131,12 @@ } try { + GitDateFormatter df = new GitDateFormatter(Format.DEFAULT); Map<String, Object> result = Maps.newLinkedHashMap(); List<CommitJsonData.Commit> entries = Lists.newArrayListWithCapacity(paginator.getLimit()); for (RevCommit c : paginator) { paginator.getWalk().parseBody(c); - entries.add(CommitJsonData.toJsonData(c)); + entries.add(CommitJsonData.toJsonData(c, df)); } result.put("log", entries); if (paginator.getPreviousStart() != null) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java index 7056261..61c2ea4 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -21,6 +21,7 @@ import org.eclipse.jgit.lib.ObjectId; 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; @@ -39,17 +40,17 @@ } public Map<String, Object> toSoyData(RevWalk walk, int limit, @Nullable String revision, - @Nullable ObjectId start) throws IOException { - return toSoyData(new Paginator(walk, limit, start), revision); + @Nullable ObjectId start, GitDateFormatter df) throws IOException { + return toSoyData(new Paginator(walk, limit, start), revision, df); } - public Map<String, Object> toSoyData(Paginator paginator, @Nullable String revision) - throws IOException { + public Map<String, Object> toSoyData(Paginator paginator, @Nullable String revision, + GitDateFormatter df) throws IOException { Map<String, Object> data = Maps.newHashMapWithExpectedSize(3); List<Map<String, Object>> entries = Lists.newArrayListWithCapacity(paginator.getLimit()); for (RevCommit c : paginator) { - entries.add(new CommitSoyData().toSoyData(req, c, KeySet.SHORTLOG)); + entries.add(new CommitSoyData().toSoyData(req, c, KeySet.SHORTLOG, df)); } data.put("entries", entries);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java index 18614a1..3fa73b6 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -29,6 +29,8 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevObject; import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.util.GitDateFormatter; +import org.eclipse.jgit.util.GitDateFormatter.Format; import java.io.IOException; import java.util.List; @@ -75,8 +77,8 @@ if (head.getType() == Constants.OBJ_COMMIT) { walk.reset(); walk.markStart((RevCommit) head); - data = - new LogSoyData(req, view).toSoyData(walk, LOG_LIMIT, "HEAD", null); + GitDateFormatter df = new GitDateFormatter(Format.DEFAULT); + data = new LogSoyData(req, view).toSoyData(walk, LOG_LIMIT, "HEAD", null, df); } else { // TODO(dborowitz): Handle non-commit or missing HEAD? data = Maps.newHashMapWithExpectedSize(6);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java index f79df15..1e0b5b2 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -36,6 +36,8 @@ import org.eclipse.jgit.revwalk.RevObject; import org.eclipse.jgit.revwalk.RevTag; import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.util.GitDateFormatter; +import org.eclipse.jgit.util.GitDateFormatter.Format; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -65,6 +67,7 @@ RevWalk walk = new RevWalk(repo); try { + GitDateFormatter df = new GitDateFormatter(Format.DEFAULT); List<RevObject> objects = listObjects(walk, view.getRevision()); List<Map<String, ?>> soyObjects = Lists.newArrayListWithCapacity(objects.size()); boolean hasBlob = false; @@ -80,7 +83,7 @@ .setLinkifier(linkifier) .setRevWalk(walk) .setArchiveFormat(archiveFormat) - .toSoyData(req, (RevCommit) obj, KeySet.DETAIL_DIFF_TREE))); + .toSoyData(req, (RevCommit) obj, KeySet.DETAIL_DIFF_TREE, df))); break; case OBJ_TREE: soyObjects.add(ImmutableMap.of( @@ -96,7 +99,7 @@ case OBJ_TAG: soyObjects.add(ImmutableMap.of( "type", Constants.TYPE_TAG, - "data", new TagSoyData(linkifier, req).toSoyData((RevTag) obj))); + "data", new TagSoyData(linkifier, req).toSoyData((RevTag) obj, df))); break; default: log.warn("Bad object type for {}: {}", ObjectId.toString(obj.getId()), obj.getType());
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java index 9ddf1e5..9e8d871 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java
@@ -19,7 +19,6 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.revwalk.RevTag; import org.eclipse.jgit.util.GitDateFormatter; -import org.eclipse.jgit.util.GitDateFormatter.Format; import java.util.Map; @@ -29,19 +28,17 @@ public class TagSoyData { private final Linkifier linkifier; private final HttpServletRequest req; - private final GitDateFormatter dateFormatter; public TagSoyData(Linkifier linkifier, HttpServletRequest req) { this.linkifier = linkifier; this.req = req; - this.dateFormatter = new GitDateFormatter(Format.DEFAULT); } - public Map<String, Object> toSoyData(RevTag tag) { + public Map<String, Object> toSoyData(RevTag tag, GitDateFormatter df) { Map<String, Object> data = Maps.newHashMapWithExpectedSize(4); data.put("sha", ObjectId.toString(tag)); if (tag.getTaggerIdent() != null) { - data.put("tagger", CommitSoyData.toSoyData(tag.getTaggerIdent(), dateFormatter)); + data.put("tagger", CommitSoyData.toSoyData(tag.getTaggerIdent(), df)); } data.put("object", ObjectId.toString(tag.getObject())); data.put("message", linkifier.linkify(req, tag.getFullMessage()));