Also reformat main servlet code.

Background: see https://gerrit-review.googlesource.com/c/77101/.

Change-Id: I1a66e301334a2fb9986ac35a5adf0b05e0c0079d
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java
index 152a50a..116bf29 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java
@@ -35,6 +35,7 @@
   // valid JAR file, whose code would have access to cookies on the domain.
 
   private static final ImmutableMap<String, ArchiveFormat> BY_EXT;
+
   static {
     ImmutableMap.Builder<String, ArchiveFormat> byExt = ImmutableMap.builder();
     for (ArchiveFormat format : ArchiveFormat.values()) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
index 851723f..8a3b1e2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
@@ -57,8 +57,8 @@
       return;
     }
 
-    Optional<ArchiveFormat> format = ArchiveFormat.byExtension(
-        view.getExtension(), getAccess(req).getConfig());
+    Optional<ArchiveFormat> format =
+        ArchiveFormat.byExtension(view.getExtension(), getAccess(req).getConfig());
     if (!format.isPresent()) {
       res.setStatus(SC_NOT_FOUND);
       return;
@@ -95,15 +95,14 @@
   }
 
   private String getFilename(GitilesView view, Revision rev, String ext) {
-    StringBuilder sb = new StringBuilder()
-        .append(PathUtil.basename(view.getRepositoryName()))
-        .append('-')
-        .append(rev.getName());
+    StringBuilder sb =
+        new StringBuilder()
+            .append(PathUtil.basename(view.getRepositoryName()))
+            .append('-')
+            .append(rev.getName());
     if (view.getPathPart() != null) {
-      sb.append('-')
-          .append(view.getPathPart().replace('/', '-'));
+      sb.append('-').append(view.getPathPart().replace('/', '-'));
     }
-    return sb.append(ext)
-        .toString();
+    return sb.append(ext).toString();
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 476e8cc..49c62df 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -66,6 +66,7 @@
   public static BaseServlet notFoundServlet() {
     return new BaseServlet(null, null) {
       private static final long serialVersionUID = 1L;
+
       @Override
       public void service(HttpServletRequest req, HttpServletResponse res) {
         res.setStatus(SC_NOT_FOUND);
@@ -147,8 +148,7 @@
    * @param req in-progress request.
    * @param res in-progress response.
    */
-  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
     res.sendError(SC_BAD_REQUEST);
   }
 
@@ -158,8 +158,7 @@
    * @param req in-progress request.
    * @param res in-progress response.
    */
-  protected void doGetText(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException {
     res.sendError(SC_BAD_REQUEST);
   }
 
@@ -169,8 +168,7 @@
    * @param req in-progress request.
    * @param res in-progress response.
    */
-  protected void doGetJson(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException {
     res.sendError(SC_BAD_REQUEST);
   }
 
@@ -202,10 +200,10 @@
    * @param soyData data for Soy.
    * @throws IOException an error occurred during rendering.
    */
-  protected void renderHtml(HttpServletRequest req, HttpServletResponse res, String templateName,
-      Map<String, ?> soyData) throws IOException {
-    renderer.render(req, res, templateName,
-        startHtmlResponse(req, res, soyData));
+  protected void renderHtml(
+      HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData)
+      throws IOException {
+    renderer.render(req, res, templateName, startHtmlResponse(req, res, soyData));
   }
 
   /**
@@ -226,22 +224,22 @@
    *     written only on calling {@code close()}.
    * @throws IOException an error occurred during rendering the header.
    */
-  protected OutputStream startRenderStreamingHtml(HttpServletRequest req,
-      HttpServletResponse res, String templateName, Map<String, ?> soyData) throws IOException {
+  protected OutputStream startRenderStreamingHtml(
+      HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData)
+      throws IOException {
     req.setAttribute(STREAMING_ATTRIBUTE, true);
     return renderer.renderStreaming(res, templateName, startHtmlResponse(req, res, soyData));
   }
 
-  private Map<String, ?> startHtmlResponse(HttpServletRequest req, HttpServletResponse res,
-      Map<String, ?> soyData) throws IOException {
+  private Map<String, ?> startHtmlResponse(
+      HttpServletRequest req, HttpServletResponse res, Map<String, ?> soyData) throws IOException {
     res.setContentType(FormatType.HTML.getMimeType());
     res.setCharacterEncoding(UTF_8.name());
     setCacheHeaders(res);
 
     Map<String, Object> allData = getData(req);
 
-    GitilesConfig.putVariant(
-        getAccess(req).getConfig(), "customHeader", "headerVariant", allData);
+    GitilesConfig.putVariant(getAccess(req).getConfig(), "customHeader", "headerVariant", allData);
     allData.putAll(soyData);
     GitilesView view = ViewFilter.getView(req);
     if (!allData.containsKey("repositoryName") && view.getRepositoryName() != null) {
@@ -263,8 +261,9 @@
    * @param src @see com.google.gson.Gson#toJson(Object, Type, Appendable)
    * @param typeOfSrc @see com.google.gson.Gson#toJson(Object, Type, Appendable)
    */
-  protected void renderJson(HttpServletRequest req, HttpServletResponse res, Object src,
-      Type typeOfSrc) throws IOException {
+  protected void renderJson(
+      HttpServletRequest req, HttpServletResponse res, Object src, Type typeOfSrc)
+      throws IOException {
     setApiHeaders(res, JSON);
     res.setStatus(SC_OK);
     try (Writer writer = newWriter(req, res)) {
@@ -276,9 +275,9 @@
   @SuppressWarnings("unused") // Used in subclasses.
   protected GsonBuilder newGsonBuilder(HttpServletRequest req) throws IOException {
     return new GsonBuilder()
-      .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
-      .setPrettyPrinting()
-      .generateNonExecutableJson();
+        .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
+        .setPrettyPrinting()
+        .generateNonExecutableJson();
   }
 
   /**
@@ -288,8 +287,8 @@
    * @param contentType contentType to set.
    * @return the response's writer.
    */
-  protected Writer startRenderText(HttpServletRequest req, HttpServletResponse res,
-      String contentType) throws IOException {
+  protected Writer startRenderText(
+      HttpServletRequest req, HttpServletResponse res, String contentType) throws IOException {
     setApiHeaders(res, contentType);
     return newWriter(req, res);
   }
@@ -324,8 +323,9 @@
    *
    * @throws IOException
    */
-  protected void renderTextError(HttpServletRequest req, HttpServletResponse res, int statusCode,
-      String message) throws IOException {
+  protected void renderTextError(
+      HttpServletRequest req, HttpServletResponse res, int statusCode, String message)
+      throws IOException {
     res.setStatus(statusCode);
     setApiHeaders(res, TEXT);
     setCacheHeaders(res);
@@ -371,8 +371,7 @@
     return new OutputStreamWriter(os, res.getCharacterEncoding());
   }
 
-  private Writer newWriter(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  private Writer newWriter(HttpServletRequest req, HttpServletResponse res) throws IOException {
     OutputStream out;
     if (acceptsGzipEncoding(req)) {
       res.setHeader(HttpHeaders.CONTENT_ENCODING, "gzip");
@@ -388,7 +387,7 @@
     if (accepts == null) {
       return false;
     }
-    for (int b = 0; b < accepts.length();) {
+    for (int b = 0; b < accepts.length(); ) {
       int comma = accepts.indexOf(',', b);
       int e = 0 <= comma ? comma : accepts.length();
       String term = accepts.substring(b, e).trim();
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java
index 87fc5c9..09dd548 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java
@@ -61,8 +61,7 @@
     this.view = view;
   }
 
-  public Map<String, Object> toSoyData(ObjectId blobId)
-      throws MissingObjectException, IOException {
+  public Map<String, Object> toSoyData(ObjectId blobId) throws MissingObjectException, IOException {
     return toSoyData(null, blobId);
   }
 
@@ -107,8 +106,11 @@
 
     int last = 0;
     for (ParseResult r : results) {
-      checkState(r.getOffset() >= last,
-          "out-of-order ParseResult, expected %s >= %s", r.getOffset(), last);
+      checkState(
+          r.getOffset() >= last,
+          "out-of-order ParseResult, expected %s >= %s",
+          r.getOffset(),
+          last);
       line = writeResult(lines, null, content, last, r.getOffset());
       last = r.getOffset() + r.getLength();
       line = writeResult(lines, r.getStyleKeysString(), content, r.getOffset(), last);
@@ -132,8 +134,8 @@
     }
   }
 
-  private static SoyListData writeResult(SoyListData lines, String classes,
-      String s, int start, int end) {
+  private static SoyListData writeResult(
+      SoyListData lines, String classes, String s, int start, int end) {
     SoyListData line = lines.getListData(lines.length() - 1);
     while (true) {
       int nl = nextLineBreak(s, start, end);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
index f457088..4027d91 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
@@ -100,8 +100,7 @@
       return this;
     }
 
-    CommitData build(HttpServletRequest req, RevCommit c, Set<Field> fs)
-        throws IOException {
+    CommitData build(HttpServletRequest req, RevCommit c, Set<Field> fs) throws IOException {
       checkFields(fs);
       checkNotNull(req, "request");
       Repository repo = ServletUtils.getRepository(req);
@@ -124,17 +123,15 @@
         }
       }
       if (fs.contains(Field.URL)) {
-        result.url = GitilesView.revision()
-            .copyFrom(view)
-            .setRevision(c)
-            .toUrl();
+        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()));
+        result.archiveUrl =
+            urlFromView(
+                view, c, GitilesView.archive().setExtension(archiveFormat.getDefaultSuffix()));
       }
       if (fs.contains(Field.ARCHIVE_TYPE)) {
         result.archiveType = archiveFormat;
@@ -186,10 +183,11 @@
       }
     }
 
-    private static String urlFromView(GitilesView view, RevCommit commit,
-        GitilesView.Builder builder) {
+    private static String urlFromView(
+        GitilesView view, RevCommit commit, GitilesView.Builder builder) {
       Revision rev = view.getRevision();
-      return builder.copyFrom(view)
+      return builder
+          .copyFrom(view)
           .setOldRevision(Revision.NULL)
           .setRevision(rev.getId().equals(commit) ? rev.getName() : commit.name(), commit)
           .setPathPart(view.getPathPart())
@@ -200,18 +198,23 @@
       if (refsById == null) {
         refsById = repo.getAllRefsByPeeledObjectId();
       }
-      return FluentIterable.from(firstNonNull(refsById.get(id), ImmutableSet.<Ref> of()))
-        .filter(new Predicate<Ref>() {
-          @Override
-          public boolean apply(Ref ref) {
-            return ref.getName().startsWith(prefix);
-          }
-        }).toSortedList(Ordering.natural().onResultOf(new Function<Ref, String>() {
-          @Override
-          public String apply(Ref ref) {
-            return ref.getName();
-          }
-        }));
+      return FluentIterable.from(firstNonNull(refsById.get(id), ImmutableSet.<Ref>of()))
+          .filter(
+              new Predicate<Ref>() {
+                @Override
+                public boolean apply(Ref ref) {
+                  return ref.getName().startsWith(prefix);
+                }
+              })
+          .toSortedList(
+              Ordering.natural()
+                  .onResultOf(
+                      new Function<Ref, String>() {
+                        @Override
+                        public String apply(Ref ref) {
+                          return ref.getName();
+                        }
+                      }));
     }
 
     private AbstractTreeIterator getTreeIterator(RevCommit commit) throws IOException {
@@ -223,9 +226,10 @@
     private DiffList computeDiffEntries(Repository repo, GitilesView view, RevCommit commit)
         throws IOException {
       DiffList result = new DiffList();
-      result.revision = view.getRevision().matches(commit)
-          ? view.getRevision()
-          : Revision.peeled(commit.name(), commit);
+      result.revision =
+          view.getRevision().matches(commit)
+              ? view.getRevision()
+              : Revision.peeled(commit.name(), commit);
 
       AbstractTreeIterator oldTree;
       switch (commit.getParentCount()) {
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 b1d8d8f..1db047b 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
@@ -34,8 +34,9 @@
 import javax.servlet.http.HttpServletRequest;
 
 public class CommitJsonData {
-  static final ImmutableSet<Field> DEFAULT_FIELDS = Sets.immutableEnumSet(
-      Field.SHA, Field.TREE, Field.PARENTS, Field.AUTHOR, Field.COMMITTER, Field.MESSAGE);
+  static final ImmutableSet<Field> DEFAULT_FIELDS =
+      Sets.immutableEnumSet(
+          Field.SHA, Field.TREE, Field.PARENTS, Field.AUTHOR, Field.COMMITTER, Field.MESSAGE);
 
   public static class Log {
     public List<Commit> log;
@@ -85,9 +86,7 @@
 
   Commit toJsonData(HttpServletRequest req, RevCommit c, Set<Field> fs, DateFormatter df)
       throws IOException {
-    CommitData cd = new CommitData.Builder()
-        .setRevWalk(walk)
-        .build(req, c, fs);
+    CommitData cd = new CommitData.Builder().setRevWalk(walk).build(req, c, fs);
 
     Commit result = new Commit();
     if (cd.sha != null) {
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 9e5a9fe..d5bd8fd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -47,12 +47,21 @@
 
 /** Soy data converter for git commits. */
 public class CommitSoyData {
-  static final ImmutableSet<Field> DEFAULT_FIELDS = Sets.immutableEnumSet(Field.AUTHOR,
-      Field.COMMITTER, Field.SHA, Field.TREE, Field.TREE_URL, Field.PARENTS, Field.MESSAGE,
-      Field.LOG_URL, Field.ARCHIVE_URL, Field.ARCHIVE_TYPE);
+  static final ImmutableSet<Field> DEFAULT_FIELDS =
+      Sets.immutableEnumSet(
+          Field.AUTHOR,
+          Field.COMMITTER,
+          Field.SHA,
+          Field.TREE,
+          Field.TREE_URL,
+          Field.PARENTS,
+          Field.MESSAGE,
+          Field.LOG_URL,
+          Field.ARCHIVE_URL,
+          Field.ARCHIVE_TYPE);
 
-  private static final ImmutableSet<Field> NESTED_FIELDS = Sets.immutableEnumSet(
-      Field.PARENT_BLAME_URL);
+  private static final ImmutableSet<Field> NESTED_FIELDS =
+      Sets.immutableEnumSet(Field.PARENT_BLAME_URL);
 
   private Linkifier linkifier;
   private RevWalk walk;
@@ -74,17 +83,14 @@
     return this;
   }
 
-  Map<String, Object> toSoyData(HttpServletRequest req, RevCommit c, Set<Field> fs,
-      DateFormatter df) throws IOException {
+  Map<String, Object> toSoyData(
+      HttpServletRequest req, RevCommit c, Set<Field> fs, DateFormatter df) throws IOException {
     GitilesView view = ViewFilter.getView(req);
     if (cdb == null) {
       cdb = new CommitData.Builder();
     }
 
-    CommitData cd = cdb
-        .setRevWalk(walk)
-        .setArchiveFormat(archiveFormat)
-        .build(req, c, fs);
+    CommitData cd = cdb.setRevWalk(walk).setArchiveFormat(archiveFormat).build(req, c, fs);
 
     Map<String, Object> data = Maps.newHashMapWithExpectedSize(fs.size());
     if (cd.author != null) {
@@ -139,13 +145,16 @@
     if (cd.diffEntries != null) {
       data.put("diffTree", toSoyData(view, cd.diffEntries));
     }
-    checkState(Sets.difference(fs, NESTED_FIELDS).size() == data.size(),
-        "bad commit data fields: %s != %s", fs, data.keySet());
+    checkState(
+        Sets.difference(fs, NESTED_FIELDS).size() == data.size(),
+        "bad commit data fields: %s != %s",
+        fs,
+        data.keySet());
     return data;
   }
 
-  Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit,
-      DateFormatter df) throws IOException {
+  Map<String, Object> toSoyData(HttpServletRequest req, RevCommit commit, DateFormatter df)
+      throws IOException {
     return toSoyData(req, commit, DEFAULT_FIELDS, df);
   }
 
@@ -159,8 +168,8 @@
         "relativeTime", RelativeDateFormatter.format(ident.getWhen()));
   }
 
-  private List<Map<String, String>> toSoyData(GitilesView view, Set<Field> fs,
-      List<RevCommit> parents) {
+  private List<Map<String, String>> toSoyData(
+      GitilesView view, Set<Field> fs, List<RevCommit> parents) {
     List<Map<String, String>> result = Lists.newArrayListWithCapacity(parents.size());
     int i = 1;
     // TODO(dborowitz): Render something slightly different when we're actively
@@ -180,17 +189,16 @@
 
       Map<String, String> e = Maps.newHashMapWithExpectedSize(4);
       e.put("sha", name);
-      e.put("url", GitilesView.revision()
-          .copyFrom(view)
-          .setRevision(parentName, parent)
-          .toUrl());
+      e.put("url", GitilesView.revision().copyFrom(view).setRevision(parentName, parent).toUrl());
       e.put("diffUrl", diff.toUrl());
       if (fs.contains(Field.PARENT_BLAME_URL)) {
         // Assumes caller has ensured path is a file.
-        e.put("blameUrl", GitilesView.blame()
-            .copyFrom(view)
-            .setRevision(Revision.peeled(parentName, parent))
-            .toUrl());
+        e.put(
+            "blameUrl",
+            GitilesView.blame()
+                .copyFrom(view)
+                .setRevision(Revision.peeled(parentName, parent))
+                .toUrl());
       }
       result.add(e);
     }
@@ -201,11 +209,12 @@
     if (dl.oldRevision == null) {
       return NullData.INSTANCE;
     }
-    GitilesView.Builder diffUrl = GitilesView.diff()
-        .copyFrom(view)
-        .setOldRevision(dl.oldRevision)
-        .setRevision(dl.revision)
-        .setPathPart("");
+    GitilesView.Builder diffUrl =
+        GitilesView.diff()
+            .copyFrom(view)
+            .setOldRevision(dl.oldRevision)
+            .setRevision(dl.revision)
+            .setPathPart("");
 
     List<Object> result = Lists.newArrayListWithCapacity(dl.entries.size());
     for (DiffEntry e : dl.entries) {
@@ -213,18 +222,22 @@
       ChangeType type = e.getChangeType();
       if (type != DELETE) {
         entry.put("path", e.getNewPath());
-        entry.put("url", GitilesView.path()
-            .copyFrom(view)
-            .setRevision(dl.revision)
-            .setPathPart(e.getNewPath())
-            .toUrl());
+        entry.put(
+            "url",
+            GitilesView.path()
+                .copyFrom(view)
+                .setRevision(dl.revision)
+                .setPathPart(e.getNewPath())
+                .toUrl());
       } else {
         entry.put("path", e.getOldPath());
-        entry.put("url", GitilesView.path()
-            .copyFrom(view)
-            .setRevision(dl.oldRevision)
-            .setPathPart(e.getOldPath())
-            .toUrl());
+        entry.put(
+            "url",
+            GitilesView.path()
+                .copyFrom(view)
+                .setRevision(dl.oldRevision)
+                .setPathPart(e.getOldPath())
+                .toUrl());
       }
       entry.put("diffUrl", diffUrl.setAnchor("F" + result.size()).toUrl());
       entry.put("changeType", e.getChangeType().toString());
@@ -236,17 +249,19 @@
     return result;
   }
 
-  private static List<Map<String, String>> toSoyData(GitilesView view, List<Ref> refs,
-      String prefix) {
+  private static List<Map<String, String>> toSoyData(
+      GitilesView view, List<Ref> refs, String prefix) {
     List<Map<String, String>> result = Lists.newArrayListWithCapacity(refs.size());
     for (Ref ref : refs) {
       if (ref.getName().startsWith(prefix)) {
-        result.add(ImmutableMap.of(
-          "name", ref.getName().substring(prefix.length()),
-          "url", GitilesView.revision()
-              .copyFrom(view)
-              .setRevision(Revision.unpeeled(ref.getName(), ref.getObjectId()))
-              .toUrl()));
+        result.add(
+            ImmutableMap.of(
+                "name", ref.getName().substring(prefix.length()),
+                "url",
+                    GitilesView.revision()
+                        .copyFrom(view)
+                        .setRevision(Revision.unpeeled(ref.getName(), ref.getObjectId()))
+                        .toUrl()));
       }
     }
     return result;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java b/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java
index e167f94..0fedbf4 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java
@@ -43,15 +43,15 @@
    * @param defaultValue value to use when the value is not assigned.
    * @return a standard duration representing the time read, or defaultValue.
    */
-  public static Duration getDuration(Config config, String section, String subsection, String name,
-      Duration defaultValue) {
+  public static Duration getDuration(
+      Config config, String section, String subsection, String name, Duration defaultValue) {
     String valStr = config.getString(section, subsection, name);
     if (valStr == null) {
-        return defaultValue;
+      return defaultValue;
     }
     valStr = valStr.trim();
     if (valStr.isEmpty()) {
-        return defaultValue;
+      return defaultValue;
     }
     Duration val = parseDuration(valStr);
     if (val == null) {
@@ -162,21 +162,19 @@
    *     {@link TimeZone#getTimeZone(String)}, unknown time zones are treated as
    *     GMT.
    */
-  public static Optional<TimeZone> getTimeZone(Config config, String section, String subsection,
-      String name) {
+  public static Optional<TimeZone> getTimeZone(
+      Config config, String section, String subsection, String name) {
     String id = config.getString(section, subsection, name);
-    return id != null ? Optional.of(TimeZone.getTimeZone(id)) : Optional.<TimeZone> absent();
+    return id != null ? Optional.of(TimeZone.getTimeZone(id)) : Optional.<TimeZone>absent();
   }
 
   private static Matcher matcher(String pattern, String valStr) {
-      return Pattern.compile(pattern).matcher(valStr);
+    return Pattern.compile(pattern).matcher(valStr);
   }
 
   private static boolean anyOf(String a, String... cases) {
-    return Iterables.any(ImmutableList.copyOf(cases),
-        Predicates.equalTo(a.toLowerCase()));
+    return Iterables.any(ImmutableList.copyOf(cases), Predicates.equalTo(a.toLowerCase()));
   }
 
-  private ConfigUtil() {
-  }
+  private ConfigUtil() {}
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
index 0a57b6b..dd6830d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
@@ -28,11 +28,15 @@
 
 /** Renderer that reloads Soy templates from the filesystem on every request. */
 public class DebugRenderer extends Renderer {
-  public DebugRenderer(String staticPrefix, Iterable<String> customTemplatesFilenames,
-      final String soyTemplatesRoot, String siteTitle) {
+  public DebugRenderer(
+      String staticPrefix,
+      Iterable<String> customTemplatesFilenames,
+      final String soyTemplatesRoot,
+      String siteTitle) {
     super(
         new FileUrlMapper(soyTemplatesRoot + File.separator),
-        ImmutableMap.<String, String> of(), staticPrefix,
+        ImmutableMap.<String, String>of(),
+        staticPrefix,
         FluentIterable.from(customTemplatesFilenames).transform(new FileUrlMapper()),
         siteTitle);
   }
@@ -44,8 +48,7 @@
 
   @Override
   protected SoyTofu getTofu() {
-    SoyFileSet.Builder builder = SoyFileSet.builder()
-        .setCompileTimeGlobals(globals);
+    SoyFileSet.Builder builder = SoyFileSet.builder().setCompileTimeGlobals(globals);
     for (URL template : templates.values()) {
       try {
         checkState(new File(template.toURI()).exists(), "Missing Soy template %s", template);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
index 0e435c6..a31be1c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
@@ -57,7 +57,7 @@
   private static final String ANONYMOUS_USER_KEY = "anonymous user";
 
   private static final String DEFAULT_DESCRIPTION =
-    "Unnamed repository; edit this file 'description' to name the repository.";
+      "Unnamed repository; edit this file 'description' to name the repository.";
 
   private static final Collator US_COLLATOR = Collator.getInstance(Locale.US);
 
@@ -68,8 +68,12 @@
     private final Config baseConfig;
     private final FileResolver<HttpServletRequest> resolver;
 
-    Factory(File basePath, String baseGitUrl, Config baseConfig,
-        FileResolver<HttpServletRequest> resolver) throws IOException {
+    Factory(
+        File basePath,
+        String baseGitUrl,
+        Config baseConfig,
+        FileResolver<HttpServletRequest> resolver)
+        throws IOException {
       this.basePath = checkNotNull(basePath, "basePath");
       this.baseGitUrl = checkNotNull(baseGitUrl, "baseGitUrl");
       this.baseConfig = checkNotNull(baseConfig, "baseConfig");
@@ -82,8 +86,12 @@
       return newAccess(basePath, canonicalBasePath, baseGitUrl, resolver, req);
     }
 
-    protected DefaultAccess newAccess(File basePath, String canonicalBasePath, String baseGitUrl,
-        FileResolver<HttpServletRequest> resolver, HttpServletRequest req) {
+    protected DefaultAccess newAccess(
+        File basePath,
+        String canonicalBasePath,
+        String baseGitUrl,
+        FileResolver<HttpServletRequest> resolver,
+        HttpServletRequest req) {
       return new DefaultAccess(basePath, canonicalBasePath, baseGitUrl, baseConfig, resolver, req);
     }
   }
@@ -95,8 +103,13 @@
   protected final FileResolver<HttpServletRequest> resolver;
   protected final HttpServletRequest req;
 
-  protected DefaultAccess(File basePath, String canonicalBasePath, String baseGitUrl,
-      Config baseConfig, FileResolver<HttpServletRequest> resolver, HttpServletRequest req) {
+  protected DefaultAccess(
+      File basePath,
+      String canonicalBasePath,
+      String baseGitUrl,
+      Config baseConfig,
+      FileResolver<HttpServletRequest> resolver,
+      HttpServletRequest req) {
     this.basePath = checkNotNull(basePath, "basePath");
     this.canonicalBasePath = checkNotNull(canonicalBasePath, "canonicalBasePath");
     this.baseGitUrl = checkNotNull(baseGitUrl, "baseGitUrl");
@@ -106,8 +119,8 @@
   }
 
   @Override
-  public Map<String, RepositoryDescription> listRepositories(String prefix,
-      Set<String> branches) throws IOException {
+  public Map<String, RepositoryDescription> listRepositories(String prefix, Set<String> branches)
+      throws IOException {
     Map<String, RepositoryDescription> repos = Maps.newTreeMap(US_COLLATOR);
     for (Repository repo : scanRepositories(basePath, prefix, req)) {
       repos.put(getRepositoryName(repo), buildDescription(repo, branches));
@@ -130,7 +143,7 @@
 
   @Override
   public RepositoryDescription getRepositoryDescription() throws IOException {
-    return buildDescription(ServletUtils.getRepository(req), Collections.<String> emptySet());
+    return buildDescription(ServletUtils.getRepository(req), Collections.<String>emptySet());
   }
 
   @Override
@@ -170,8 +183,8 @@
     if (path.startsWith(canonicalBasePath)) {
       return path.substring(canonicalBasePath.length() + 1);
     }
-    throw new IllegalStateException(String.format(
-          "Repository path %s is outside base path %s", path, base));
+    throw new IllegalStateException(
+        String.format("Repository path %s is outside base path %s", path, base));
   }
 
   private String loadDescriptionText(Repository repo) throws IOException {
@@ -223,8 +236,8 @@
     return "refs/heads/" + name;
   }
 
-  private Collection<Repository> scanRepositories(File basePath, String prefix,
-      HttpServletRequest req) throws IOException {
+  private Collection<Repository> scanRepositories(
+      File basePath, String prefix, HttpServletRequest req) throws IOException {
     List<Repository> repos = Lists.newArrayList();
     Queue<File> todo = initScan(basePath, prefix);
     while (!todo.isEmpty()) {
@@ -243,8 +256,7 @@
     return repos;
   }
 
-  private Queue<File> initScan(File basePath, String prefix)
-      throws IOException {
+  private Queue<File> initScan(File basePath, String prefix) throws IOException {
     Queue<File> todo = Queues.newArrayDeque();
     File[] entries;
     if (isValidPrefix(prefix)) {
@@ -262,7 +274,8 @@
 
   private static boolean isValidPrefix(String prefix) {
     return !Strings.isNullOrEmpty(prefix)
-        && !prefix.equals(".") && !prefix.equals("..")
+        && !prefix.equals(".")
+        && !prefix.equals("..")
         && !prefix.contains("../")
         && !prefix.endsWith("/..");
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
index f3f244b..238aa74 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
@@ -29,15 +29,18 @@
   private final SoyTofu tofu;
 
   DefaultRenderer() {
-    this("", ImmutableList.<URL> of(), "");
+    this("", ImmutableList.<URL>of(), "");
   }
 
   public DefaultRenderer(String staticPrefix, Iterable<URL> customTemplates, String siteTitle) {
-    this(ImmutableMap.<String, String> of(), staticPrefix, customTemplates, siteTitle);
+    this(ImmutableMap.<String, String>of(), staticPrefix, customTemplates, siteTitle);
   }
 
-  public DefaultRenderer(Map<String, String> globals, String staticPrefix,
-      Iterable<URL> customTemplates, String siteTitle) {
+  public DefaultRenderer(
+      Map<String, String> globals,
+      String staticPrefix,
+      Iterable<URL> customTemplates,
+      String siteTitle) {
     super(
         new Function<String, URL>() {
           @Override
@@ -45,9 +48,11 @@
             return Resources.getResource(Renderer.class, "templates/" + name);
           }
         },
-        globals, staticPrefix, customTemplates, siteTitle);
-    SoyFileSet.Builder builder = SoyFileSet.builder()
-        .setCompileTimeGlobals(this.globals);
+        globals,
+        staticPrefix,
+        customTemplates,
+        siteTitle);
+    SoyFileSet.Builder builder = SoyFileSet.builder().setCompileTimeGlobals(this.globals);
     for (URL template : templates.values()) {
       builder.add(template);
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
index 949fbab..adc280a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
@@ -49,8 +49,7 @@
 
   private static boolean getBooleanParam(GitilesView view, String name) {
     List<String> values = view.getParameters().get(name);
-    return !values.isEmpty()
-        && (values.get(0).isEmpty() || values.get(0).equals("1"));
+    return !values.isEmpty() && (values.get(0).isEmpty() || values.get(0).equals("1"));
   }
 
   protected DescribeServlet(GitilesAccess.Factory accessFactory) {
@@ -58,8 +57,7 @@
   }
 
   @Override
-  protected void doGetText(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException {
     String name = describe(ServletUtils.getRepository(req), ViewFilter.getView(req), req, res);
     if (name == null) {
       return;
@@ -70,36 +68,47 @@
   }
 
   @Override
-  protected void doGetJson(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException {
     String name = describe(ServletUtils.getRepository(req), ViewFilter.getView(req), req, res);
     if (name == null) {
       return;
     }
-    renderJson(req, res,
+    renderJson(
+        req,
+        res,
         ImmutableMap.of(ViewFilter.getView(req).getPathPart(), name),
         new TypeToken<Map<String, String>>() {}.getType());
   }
 
-  private ObjectId resolve(Repository repo, GitilesView view, HttpServletRequest req,
-      HttpServletResponse res) throws IOException {
+  private ObjectId resolve(
+      Repository repo, GitilesView view, HttpServletRequest req, HttpServletResponse res)
+      throws IOException {
     String rev = view.getPathPart();
     try {
       return repo.resolve(rev);
     } catch (RevisionSyntaxException e) {
-      renderTextError(req, res, SC_BAD_REQUEST,
+      renderTextError(
+          req,
+          res,
+          SC_BAD_REQUEST,
           "Invalid revision syntax: " + RefServlet.sanitizeRefForText(rev));
       return null;
     } catch (AmbiguousObjectException e) {
-      renderTextError(req, res, SC_BAD_REQUEST, String.format(
-            "Ambiguous short SHA-1 %s (%s)",
-            e.getAbbreviatedObjectId(), Joiner.on(", ").join(e.getCandidates())));
+      renderTextError(
+          req,
+          res,
+          SC_BAD_REQUEST,
+          String.format(
+              "Ambiguous short SHA-1 %s (%s)",
+              e.getAbbreviatedObjectId(),
+              Joiner.on(", ").join(e.getCandidates())));
       return null;
     }
   }
 
-  private String describe(Repository repo, GitilesView view, HttpServletRequest req,
-      HttpServletResponse res) throws IOException {
+  private String describe(
+      Repository repo, GitilesView view, HttpServletRequest req, HttpServletResponse res)
+      throws IOException {
     if (!getBooleanParam(view, CONTAINS_PARAM)) {
       res.setStatus(SC_BAD_REQUEST);
       return null;
@@ -125,8 +134,8 @@
     return name;
   }
 
-  private NameRevCommand nameRevCommand(Git git, ObjectId id,
-      HttpServletRequest req, HttpServletResponse res) throws IOException {
+  private NameRevCommand nameRevCommand(
+      Git git, ObjectId id, HttpServletRequest req, HttpServletResponse res) throws IOException {
     GitilesView view = ViewFilter.getView(req);
     NameRevCommand cmd = git.nameRev();
     boolean all = getBooleanParam(view, ALL_PARAM);
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 788eb07..90d5170 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -93,10 +93,12 @@
         }
         GitilesAccess access = getAccess(req);
         DateFormatter df = new DateFormatter(access, Format.DEFAULT);
-        data.put("commit", new CommitSoyData()
-            .setLinkifier(linkifier)
-            .setArchiveFormat(getArchiveFormat(access))
-            .toSoyData(req, walk.parseCommit(view.getRevision().getId()), fs, df));
+        data.put(
+            "commit",
+            new CommitSoyData()
+                .setLinkifier(linkifier)
+                .setArchiveFormat(getArchiveFormat(access))
+                .toSoyData(req, walk.parseCommit(view.getRevision().getId()), fs, df));
       }
       if (!data.containsKey("repositoryName") && (view.getRepositoryName() != null)) {
         data.put("repositoryName", view.getRepositoryName());
@@ -107,15 +109,14 @@
 
       setCacheHeaders(res);
       try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.diffDetail", data);
-        DiffFormatter diff = new HtmlDiffFormatter(renderer, view, out)) {
+          DiffFormatter diff = new HtmlDiffFormatter(renderer, view, out)) {
         formatDiff(repo, oldTree, newTree, view.getPathPart(), diff);
       }
     }
   }
 
   @Override
-  protected void doGetText(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException {
     GitilesView view = ViewFilter.getView(req);
     Repository repo = ServletUtils.getRepository(req);
 
@@ -143,9 +144,7 @@
       return null;
     }
     return TreeWalk.forPath(
-        walk.getObjectReader(),
-        view.getPathPart(),
-        walk.parseTree(view.getRevision().getId()));
+        walk.getObjectReader(), view.getPathPart(), walk.parseTree(view.getRevision().getId()));
   }
 
   private static boolean isParentOf(RevWalk walk, Revision oldRevision, Revision newRevision)
@@ -162,8 +161,13 @@
     return (tw.getRawMode(0) & FileMode.TYPE_FILE) > 0;
   }
 
-  private static void formatDiff(Repository repo, AbstractTreeIterator oldTree,
-      AbstractTreeIterator newTree, String path, DiffFormatter diff) throws IOException {
+  private static void formatDiff(
+      Repository repo,
+      AbstractTreeIterator oldTree,
+      AbstractTreeIterator newTree,
+      String path,
+      DiffFormatter diff)
+      throws IOException {
     if (!path.isEmpty()) {
       diff.setPathFilter(PathFilter.create(path));
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java b/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java
index 1d2f61c..c78ea25 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java
@@ -32,8 +32,7 @@
 
   public static Optional<FormatType> getFormatType(HttpServletRequest req) {
     @SuppressWarnings("unchecked")
-    Optional<FormatType> result =
-        (Optional<FormatType>) req.getAttribute(FORMAT_TYPE_ATTRIBUTE);
+    Optional<FormatType> result = (Optional<FormatType>) req.getAttribute(FORMAT_TYPE_ATTRIBUTE);
     if (result != null) {
       return result;
     }
@@ -58,8 +57,7 @@
     return set(req, Optional.of(DEFAULT));
   }
 
-  private static Optional<FormatType> set(HttpServletRequest req,
-      Optional<FormatType> format) {
+  private static Optional<FormatType> set(HttpServletRequest req, Optional<FormatType> format) {
     req.setAttribute(FORMAT_TYPE_ATTRIBUTE, format);
     return format;
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java
index 6434e55..2977507 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java
@@ -54,8 +54,7 @@
    */
   public Map<String, RepositoryDescription> listRepositories(
       @Nullable String prefix, Set<String> branches)
-          throws ServiceNotEnabledException, ServiceNotAuthorizedException,
-          IOException;
+      throws ServiceNotEnabledException, ServiceNotAuthorizedException, IOException;
 
   /**
    * @return an opaque object that uniquely identifies the end-user making the
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
index a196c07..4f7b40f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
@@ -53,8 +53,8 @@
     return config;
   }
 
-  public static void putVariant(Config config, String templateName, String keyName,
-      Map<String, ? super String> out) {
+  public static void putVariant(
+      Config config, String templateName, String keyName, Map<String, ? super String> out) {
     String variant = config.getString("template", null, templateName);
     if (variant != null) {
       out.put(keyName, variant);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
index d1960b8..4e5da10 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -77,52 +77,65 @@
   private static final String CMD = "\\+[a-z0-9-]*";
 
   @VisibleForTesting
-  static final Pattern ROOT_REGEX = Pattern.compile(""
-      + "^(      " // 1. Everything
-      + "  /*    " // Excess slashes
-      + "  (/)   " // 2. Repo name (just slash)
-      + "  ()    " // 3. Command
-      + "  ()    " // 4. Path
-      + ")$      ",
-      Pattern.COMMENTS);
+  static final Pattern ROOT_REGEX =
+      Pattern.compile(
+          ""
+              + "^(      " // 1. Everything
+              + "  /*    " // Excess slashes
+              + "  (/)   " // 2. Repo name (just slash)
+              + "  ()    " // 3. Command
+              + "  ()    " // 4. Path
+              + ")$      ",
+          Pattern.COMMENTS);
 
   @VisibleForTesting
-  static final Pattern REPO_REGEX = Pattern.compile(""
-      + "^(                     " // 1. Everything
-      + "  /*                   " // Excess slashes
-      + "  (                    " // 2. Repo name
-      + "   /                   " // Leading slash
-      + "   (?:.(?!             " // Anything, as long as it's not followed by...
-      + "        /" + CMD + "/  " // the special "/<CMD>/" separator,
-      + "        |/" + CMD + "$ " // or "/<CMD>" at the end of the string
-      + "        ))*?           "
-      + "  )                    "
-      + "  /*                   " // Trailing slashes
-      + "  ()                   " // 3. Command
-      + "  ()                   " // 4. Path
-      + ")$                     ",
-      Pattern.COMMENTS);
+  static final Pattern REPO_REGEX =
+      Pattern.compile(
+          ""
+              + "^(                     " // 1. Everything
+              + "  /*                   " // Excess slashes
+              + "  (                    " // 2. Repo name
+              + "   /                   " // Leading slash
+              + "   (?:.(?!             " // Anything, as long as it's not followed by...
+              + "        /"
+              + CMD
+              + "/  " // the special "/<CMD>/" separator,
+              + "        |/"
+              + CMD
+              + "$ " // or "/<CMD>" at the end of the string
+              + "        ))*?           "
+              + "  )                    "
+              + "  /*                   " // Trailing slashes
+              + "  ()                   " // 3. Command
+              + "  ()                   " // 4. Path
+              + ")$                     ",
+          Pattern.COMMENTS);
 
   @VisibleForTesting
-  static final Pattern REPO_PATH_REGEX = Pattern.compile(""
-      + "^(              " // 1. Everything
-      + "  /*            " // Excess slashes
-      + "  (             " // 2. Repo name
-      + "   /            " // Leading slash
-      + "   .*?          " // Anything, non-greedy
-      + "  )             "
-      + "  /(" + CMD + ")" // 3. Command
-      + "  (             " // 4. Path
-      + "   (?:/.*)?     " // Slash path, or nothing.
-      + "  )             "
-      + ")$              ",
-      Pattern.COMMENTS);
+  static final Pattern REPO_PATH_REGEX =
+      Pattern.compile(
+          ""
+              + "^(              " // 1. Everything
+              + "  /*            " // Excess slashes
+              + "  (             " // 2. Repo name
+              + "   /            " // Leading slash
+              + "   .*?          " // Anything, non-greedy
+              + "  )             "
+              + "  /("
+              + CMD
+              + ")" // 3. Command
+              + "  (             " // 4. Path
+              + "   (?:/.*)?     " // Slash path, or nothing.
+              + "  )             "
+              + ")$              ",
+          Pattern.COMMENTS);
 
   private static class DispatchFilter extends AbstractHttpFilter {
     private final ListMultimap<GitilesView.Type, Filter> filters;
     private final Map<GitilesView.Type, HttpServlet> servlets;
 
-    private DispatchFilter(ListMultimap<GitilesView.Type, Filter> filters,
+    private DispatchFilter(
+        ListMultimap<GitilesView.Type, Filter> filters,
         Map<GitilesView.Type, HttpServlet> servlets) {
       this.filters = LinkedListMultimap.create(filters);
       this.servlets = ImmutableMap.copyOf(servlets);
@@ -166,8 +179,7 @@
   private GitwebRedirectFilter gitwebRedirect;
   private boolean initialized;
 
-  GitilesFilter() {
-  }
+  GitilesFilter() {}
 
   GitilesFilter(
       Config config,
@@ -213,10 +225,7 @@
     }
     root.through(dispatchFilter);
 
-    serveRegex(REPO_REGEX)
-        .through(repositoryFilter)
-        .through(viewFilter)
-        .through(dispatchFilter);
+    serveRegex(REPO_REGEX).through(repositoryFilter).through(viewFilter).through(dispatchFilter);
 
     serveRegex(REPO_PATH_REGEX)
         .through(repositoryFilter)
@@ -270,8 +279,7 @@
 
   synchronized void setHandler(GitilesView.Type view, HttpServlet handler) {
     checkNotInitialized();
-    servlets.put(checkNotNull(view, "view"),
-        checkNotNull(handler, "handler for %s", view));
+    servlets.put(checkNotNull(view, "view"), checkNotNull(handler, "handler for %s", view));
   }
 
   private synchronized void checkNotInitialized() {
@@ -309,22 +317,24 @@
 
   private void setDefaultRenderer(FilterConfig filterConfig) {
     if (renderer == null) {
-      renderer = new DefaultRenderer(
-          filterConfig.getServletContext().getContextPath() + STATIC_PREFIX,
-          FluentIterable.from(Arrays.asList(
-                config.getStringList("gitiles", null, "customTemplates")))
-              .transform(new FileUrlMapper()),
-          firstNonNull(config.getString("gitiles", null, "siteTitle"), "Gitiles"));
+      renderer =
+          new DefaultRenderer(
+              filterConfig.getServletContext().getContextPath() + STATIC_PREFIX,
+              FluentIterable.from(
+                      Arrays.asList(config.getStringList("gitiles", null, "customTemplates")))
+                  .transform(new FileUrlMapper()),
+              firstNonNull(config.getString("gitiles", null, "siteTitle"), "Gitiles"));
     }
   }
 
   private void setDefaultUrls() throws ServletException {
     if (urls == null) {
       try {
-        urls = new DefaultUrls(
-            config.getString("gitiles", null, "canonicalHostName"),
-            getBaseGitUrl(config),
-            config.getString("gitiles", null, "gerritUrl"));
+        urls =
+            new DefaultUrls(
+                config.getString("gitiles", null, "canonicalHostName"),
+                getBaseGitUrl(config),
+                config.getString("gitiles", null, "gerritUrl"));
       } catch (UnknownHostException e) {
         throw new ServletException(e);
       }
@@ -351,11 +361,9 @@
       if (accessFactory == null) {
         checkState(fileResolver != null, "need a FileResolver when GitilesAccess.Factory not set");
         try {
-        accessFactory = new DefaultAccess.Factory(
-            new File(basePath),
-            getBaseGitUrl(config),
-            config,
-            fileResolver);
+          accessFactory =
+              new DefaultAccess.Factory(
+                  new File(basePath), getBaseGitUrl(config), config, fileResolver);
         } catch (IOException e) {
           throw new ServletException(e);
         }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
index a3c15b3..7a14ba2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
@@ -56,9 +56,17 @@
       @Nullable TimeCache timeCache,
       @Nullable BlameCache blameCache,
       @Nullable GitwebRedirectFilter gitwebRedirect) {
-    super(new GitilesFilter(
-        config, renderer, urls, accessFactory, resolver, visibilityCache, timeCache, blameCache,
-        gitwebRedirect));
+    super(
+        new GitilesFilter(
+            config,
+            renderer,
+            urls,
+            accessFactory,
+            resolver,
+            visibilityCache,
+            timeCache,
+            blameCache,
+            gitwebRedirect));
   }
 
   public GitilesServlet() {
@@ -72,28 +80,30 @@
 
   @Override
   public void init(final ServletConfig config) throws ServletException {
-    getDelegateFilter().init(new FilterConfig() {
-      @Override
-      public String getFilterName() {
-        return getDelegateFilter().getClass().getName();
-      }
+    getDelegateFilter()
+        .init(
+            new FilterConfig() {
+              @Override
+              public String getFilterName() {
+                return getDelegateFilter().getClass().getName();
+              }
 
-      @Override
-      public String getInitParameter(String name) {
-        return config.getInitParameter(name);
-      }
+              @Override
+              public String getInitParameter(String name) {
+                return config.getInitParameter(name);
+              }
 
-      @SuppressWarnings("rawtypes")
-      @Override
-      public Enumeration getInitParameterNames() {
-        return config.getInitParameterNames();
-      }
+              @SuppressWarnings("rawtypes")
+              @Override
+              public Enumeration getInitParameterNames() {
+                return config.getInitParameterNames();
+              }
 
-      @Override
-      public ServletContext getServletContext() {
-        return config.getServletContext();
-      }
-    });
+              @Override
+              public ServletContext getServletContext() {
+                return config.getServletContext();
+              }
+            });
   }
 
   /**
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
index fdf577d..6308a76 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
@@ -35,21 +35,22 @@
    * should not be encoded, while almost any other non-alpha, non-numeric
    * character will be encoded using URL style encoding.
    */
-  public static final Function<String, String> NAME_ESCAPER = new Function<String, String>() {
-    @Override
-    public String apply(String s) {
-      try {
-        return URLEncoder.encode(s, UTF_8.name())
-            .replace("%2F", "/")
-            .replace("%2f", "/")
-            .replace("+", "%20")
-            .replace("%2B", "+")
-            .replace("%2b", "+");
-      } catch (UnsupportedEncodingException e) {
-        throw new IllegalStateException(e);
-      }
-    }
-  };
+  public static final Function<String, String> NAME_ESCAPER =
+      new Function<String, String>() {
+        @Override
+        public String apply(String s) {
+          try {
+            return URLEncoder.encode(s, UTF_8.name())
+                .replace("%2F", "/")
+                .replace("%2f", "/")
+                .replace("+", "%20")
+                .replace("%2B", "+")
+                .replace("%2b", "+");
+          } catch (UnsupportedEncodingException e) {
+            throw new IllegalStateException(e);
+          }
+        }
+      };
 
   /**
    * Return the name of the host from the request.
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
index 0e7dc59..0a76b7d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -171,9 +171,8 @@
     public Builder setRepositoryPrefix(String prefix) {
       switch (type) {
         case HOST_INDEX:
-          this.repositoryPrefix = prefix != null
-              ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix))
-              : null;
+          this.repositoryPrefix =
+              prefix != null ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix)) : null;
           return this;
         default:
           throw new IllegalStateException(
@@ -184,8 +183,8 @@
     public Builder setRepositoryName(String repositoryName) {
       switch (type) {
         case HOST_INDEX:
-          throw new IllegalStateException(String.format(
-              "cannot set repository name on %s view", type));
+          throw new IllegalStateException(
+              String.format("cannot set repository name on %s view", type));
         default:
           this.repositoryName = checkNotNull(repositoryName);
           return this;
@@ -362,8 +361,17 @@
           checkRootedDoc();
           break;
       }
-      return new GitilesView(type, hostName, servletPath, repositoryPrefix,
-          repositoryName, revision, oldRevision, path, extension, params,
+      return new GitilesView(
+          type,
+          hostName,
+          servletPath,
+          repositoryPrefix,
+          repositoryName,
+          revision,
+          oldRevision,
+          path,
+          extension,
+          params,
           anchor);
     }
 
@@ -500,7 +508,8 @@
   private final ListMultimap<String, String> params;
   private final String anchor;
 
-  private GitilesView(Type type,
+  private GitilesView(
+      Type type,
       String hostName,
       String servletPath,
       String repositoryPrefix,
@@ -598,16 +607,17 @@
 
   @Override
   public String toString() {
-    ToStringHelper b = toStringHelper(type.toString())
-        .omitNullValues()
-        .add("host", hostName)
-        .add("servlet", servletPath)
-        .add("prefix", repositoryPrefix)
-        .add("repo", repositoryName)
-        .add("rev", revision)
-        .add("old", oldRevision)
-        .add("path", path)
-        .add("extension", extension);
+    ToStringHelper b =
+        toStringHelper(type.toString())
+            .omitNullValues()
+            .add("host", hostName)
+            .add("servlet", servletPath)
+            .add("prefix", repositoryPrefix)
+            .add("repo", repositoryName)
+            .add("rev", revision)
+            .add("old", oldRevision)
+            .add("path", path)
+            .add("extension", extension);
     if (!params.isEmpty()) {
       b.add("params", params);
     }
@@ -650,12 +660,18 @@
         url.append(firstNonNull(extension, DEFAULT_ARCHIVE_EXTENSION));
         break;
       case PATH:
-        url.append(repositoryName).append("/+/").append(revision.getName()).append('/')
+        url.append(repositoryName)
+            .append("/+/")
+            .append(revision.getName())
+            .append('/')
             .append(path);
         break;
       case SHOW:
-        url.append(repositoryName).append("/+show/").append(revision.getName())
-            .append('/').append(path);
+        url.append(repositoryName)
+            .append("/+show/")
+            .append(revision.getName())
+            .append('/')
+            .append(path);
         break;
       case DIFF:
         url.append(repositoryName).append("/+/");
@@ -680,7 +696,10 @@
         }
         break;
       case BLAME:
-        url.append(repositoryName).append("/+blame/").append(revision.getName()).append('/')
+        url.append(repositoryName)
+            .append("/+blame/")
+            .append(revision.getName())
+            .append('/')
             .append(path);
         break;
       case DOC:
@@ -736,12 +755,12 @@
    *     auto-diving into one-entry subtrees.
    */
   public List<Map<String, String>> getBreadcrumbs(List<Boolean> hasSingleTree) {
-    checkArgument(!NON_HTML_TYPES.contains(type),
-        "breadcrumbs for %s view not supported", type);
-    checkArgument(type != Type.REFS || Strings.isNullOrEmpty(path),
+    checkArgument(!NON_HTML_TYPES.contains(type), "breadcrumbs for %s view not supported", type);
+    checkArgument(
+        type != Type.REFS || Strings.isNullOrEmpty(path),
         "breadcrumbs for REFS view with path not supported");
-    checkArgument(hasSingleTree == null || type == Type.PATH,
-        "hasSingleTree must be null for %s view", type);
+    checkArgument(
+        hasSingleTree == null || type == Type.PATH, "hasSingleTree must be null for %s view", type);
     String path = this.path;
     ImmutableList.Builder<Map<String, String>> breadcrumbs = ImmutableList.builder();
     breadcrumbs.add(breadcrumb(hostName, hostIndex().copyFrom(this).setRepositoryPrefix(null)));
@@ -777,9 +796,10 @@
       }
       StringBuilder cur = new StringBuilder();
       List<String> parts = PathUtil.SPLITTER.omitEmptyStrings().splitToList(path);
-      checkArgument(hasSingleTree == null
-          || (parts.isEmpty() && hasSingleTree.isEmpty())
-          || hasSingleTree.size() == parts.size() - 1,
+      checkArgument(
+          hasSingleTree == null
+              || (parts.isEmpty() && hasSingleTree.isEmpty())
+              || hasSingleTree.size() == parts.size() - 1,
           "hasSingleTree has wrong number of entries");
       for (int i = 0; i < parts.size(); i++) {
         String part = parts.get(i);
@@ -801,9 +821,7 @@
     List<Map<String, String>> r = new ArrayList<>(parts.size());
     for (int i = 0; i < parts.size(); i++) {
       String prefix = Joiner.on('/').join(parts.subList(0, i + 1));
-      r.add(breadcrumb(
-          parts.get(i),
-          hostIndex().copyFrom(this).setRepositoryPrefix(prefix)));
+      r.add(breadcrumb(parts.get(i), hostIndex().copyFrom(this).setRepositoryPrefix(prefix)));
     }
     return r;
   }
@@ -840,21 +858,20 @@
   @VisibleForTesting
   static String paramsToString(ListMultimap<String, String> params) {
     try {
-    StringBuilder sb = new StringBuilder();
-    boolean first = true;
-    for (Map.Entry<String, String> e : params.entries()) {
-      if (!first) {
-        sb.append('&');
-      } else {
-        first = false;
+      StringBuilder sb = new StringBuilder();
+      boolean first = true;
+      for (Map.Entry<String, String> e : params.entries()) {
+        if (!first) {
+          sb.append('&');
+        } else {
+          first = false;
+        }
+        sb.append(URLEncoder.encode(e.getKey(), UTF_8.name()));
+        if (!"".equals(e.getValue())) {
+          sb.append('=').append(URLEncoder.encode(e.getValue(), UTF_8.name()));
+        }
       }
-      sb.append(URLEncoder.encode(e.getKey(), UTF_8.name()));
-      if (!"".equals(e.getValue())) {
-        sb.append('=')
-            .append(URLEncoder.encode(e.getValue(), UTF_8.name()));
-      }
-    }
-    return sb.toString();
+      return sb.toString();
     } catch (UnsupportedEncodingException e) {
       throw new IllegalStateException(e);
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
index ddf65b4..6578891 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
@@ -97,29 +97,26 @@
     } else if ("log".equals(action) || "shortlog".equals(action)) {
       view = GitilesView.log().setRevision(firstNonNull(hash, Revision.HEAD));
     } else if ("tree".equals(action)) {
-      view = GitilesView.path()
-          .setRevision(firstNonNull(hashBase, Revision.HEAD))
-          .setPathPart(path);
+      view =
+          GitilesView.path().setRevision(firstNonNull(hashBase, Revision.HEAD)).setPathPart(path);
     } else if (("blob".equals(action) || "blob_plain".equals(action))
-        && hashBase != null && !path.isEmpty()) {
-      view = GitilesView.path()
-          .setRevision(hashBase)
-          .setPathPart(path);
+        && hashBase != null
+        && !path.isEmpty()) {
+      view = GitilesView.path().setRevision(hashBase).setPathPart(path);
     } else if ("commitdiff".equals(action) && hash != null) {
-      view = GitilesView.diff()
-          .setOldRevision(firstNonNull(hashParent, Revision.NULL))
-          .setRevision(hash)
-          .setPathPart("");
-    } else if ("blobdiff".equals(action) && !path.isEmpty()
-        && hashParentBase != null && hashBase != null) {
-      view = GitilesView.diff()
-          .setOldRevision(hashParentBase)
-          .setRevision(hashBase)
-          .setPathPart(path);
+      view =
+          GitilesView.diff()
+              .setOldRevision(firstNonNull(hashParent, Revision.NULL))
+              .setRevision(hash)
+              .setPathPart("");
+    } else if ("blobdiff".equals(action)
+        && !path.isEmpty()
+        && hashParentBase != null
+        && hashBase != null) {
+      view =
+          GitilesView.diff().setOldRevision(hashParentBase).setRevision(hashBase).setPathPart(path);
     } else if ("history".equals(action) && !path.isEmpty()) {
-      view = GitilesView.log()
-          .setRevision(firstNonNull(hashBase, Revision.HEAD))
-          .setPathPart(path);
+      view = GitilesView.log().setRevision(firstNonNull(hashBase, Revision.HEAD)).setPathPart(path);
     } else {
       // Gitiles does not provide an RSS feed (a=rss,atom,opml)
       // Any other URL is out of date and not valid anymore.
@@ -133,9 +130,10 @@
 
     String url;
     try {
-      url = view.setHostName(gitwebView.getHostName())
-          .setServletPath(gitwebView.getServletPath())
-          .toUrl();
+      url =
+          view.setHostName(gitwebView.getHostName())
+              .setServletPath(gitwebView.getServletPath())
+              .toUrl();
     } catch (InvalidViewException e) {
       res.setStatus(SC_GONE);
       return;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
index 2cc1351..c1f10e6 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -56,15 +56,15 @@
 
   protected final GitilesUrls urls;
 
-  public HostIndexServlet(GitilesAccess.Factory accessFactory, Renderer renderer,
-      GitilesUrls urls) {
+  public HostIndexServlet(
+      GitilesAccess.Factory accessFactory, Renderer renderer, GitilesUrls urls) {
     super(renderer, accessFactory);
     this.urls = checkNotNull(urls, "urls");
   }
 
   private Map<String, RepositoryDescription> list(
-      HttpServletRequest req, HttpServletResponse res, String prefix,
-      Set<String> branches) throws IOException {
+      HttpServletRequest req, HttpServletResponse res, String prefix, Set<String> branches)
+      throws IOException {
     Map<String, RepositoryDescription> descs;
     try {
       descs = getAccess(req).listRepositories(prefix, branches);
@@ -94,20 +94,16 @@
     return descs;
   }
 
-  private SoyMapData toSoyMapData(RepositoryDescription desc,
-      @Nullable String prefix, GitilesView view) {
+  private SoyMapData toSoyMapData(
+      RepositoryDescription desc, @Nullable String prefix, GitilesView view) {
     return new SoyMapData(
         "name", stripPrefix(prefix, desc.name),
         "description", Strings.nullToEmpty(desc.description),
-        "url", GitilesView.repositoryIndex()
-            .copyFrom(view)
-            .setRepositoryName(desc.name)
-            .toUrl());
+        "url", GitilesView.repositoryIndex().copyFrom(view).setRepositoryName(desc.name).toUrl());
   }
 
   @Override
-  protected void doHead(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doHead(HttpServletRequest req, HttpServletResponse res) throws IOException {
     Optional<FormatType> format = getFormat(req);
     if (!format.isPresent()) {
       res.sendError(SC_BAD_REQUEST);
@@ -118,7 +114,7 @@
     String prefix = view.getRepositoryPrefix();
     if (prefix != null) {
       Map<String, RepositoryDescription> descs =
-          list(req, res, prefix, Collections.<String> emptySet());
+          list(req, res, prefix, Collections.<String>emptySet());
       if (descs == null) {
         return;
       }
@@ -158,11 +154,19 @@
       hostName = hostName + '/' + prefix;
       breadcrumbs = view.getBreadcrumbs();
     }
-    renderHtml(req, res, "gitiles.hostIndex", ImmutableMap.of(
-        "hostName", hostName,
-        "breadcrumbs", SoyData.createFromExistingData(breadcrumbs),
-        "prefix", prefix != null ? prefix + '/' : "",
-        "repositories", repos));
+    renderHtml(
+        req,
+        res,
+        "gitiles.hostIndex",
+        ImmutableMap.of(
+            "hostName",
+            hostName,
+            "breadcrumbs",
+            SoyData.createFromExistingData(breadcrumbs),
+            "prefix",
+            prefix != null ? prefix + '/' : "",
+            "repositories",
+            repos));
   }
 
   @Override
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java b/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
index efccc4a..4998f94 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
@@ -68,8 +68,7 @@
   }
 
   @Override
-  public void format(FileHeader hdr, RawText a, RawText b)
-      throws IOException {
+  public void format(FileHeader hdr, RawText a, RawText b) throws IOException {
     int start = hdr.getStartOffset();
     int end = hdr.getEndOffset();
     if (!hdr.getHunks().isEmpty()) {
@@ -84,35 +83,37 @@
     }
   }
 
-  private void renderHeader(String header)
-      throws IOException {
+  private void renderHeader(String header) throws IOException {
     int lf = header.indexOf('\n');
-    String rest = 0 <= lf ?  header.substring(lf + 1) : "";
+    String rest = 0 <= lf ? header.substring(lf + 1) : "";
 
     // Based on DiffFormatter.formatGitDiffFirstHeaderLine.
     List<Map<String, String>> parts = Lists.newArrayListWithCapacity(3);
     parts.add(ImmutableMap.of("text", "diff --git"));
     if (entry.getChangeType() != ChangeType.ADD) {
-      parts.add(ImmutableMap.of(
-          "text", GIT_PATH.quote(getOldPrefix() + entry.getOldPath()),
-          "url", revisionUrl(view.getOldRevision(), entry.getOldPath())));
+      parts.add(
+          ImmutableMap.of(
+              "text", GIT_PATH.quote(getOldPrefix() + entry.getOldPath()),
+              "url", revisionUrl(view.getOldRevision(), entry.getOldPath())));
     } else {
-      parts.add(ImmutableMap.of(
-          "text", GIT_PATH.quote(getOldPrefix() + entry.getNewPath())));
+      parts.add(ImmutableMap.of("text", GIT_PATH.quote(getOldPrefix() + entry.getNewPath())));
     }
     if (entry.getChangeType() != ChangeType.DELETE) {
-      parts.add(ImmutableMap.of(
-          "text", GIT_PATH.quote(getNewPrefix() + entry.getNewPath()),
-          "url", revisionUrl(view.getRevision(), entry.getNewPath())));
+      parts.add(
+          ImmutableMap.of(
+              "text", GIT_PATH.quote(getNewPrefix() + entry.getNewPath()),
+              "url", revisionUrl(view.getRevision(), entry.getNewPath())));
     } else {
-      parts.add(ImmutableMap.of(
-          "text", GIT_PATH.quote(getNewPrefix() + entry.getOldPath())));
+      parts.add(ImmutableMap.of("text", GIT_PATH.quote(getNewPrefix() + entry.getOldPath())));
     }
 
-    getOutputStream().write(renderer.newRenderer("gitiles.diffHeader")
-        .setData(ImmutableMap.of("firstParts", parts, "rest", rest, "fileIndex", fileIndex))
-        .render()
-        .getBytes(UTF_8));
+    getOutputStream()
+        .write(
+            renderer
+                .newRenderer("gitiles.diffHeader")
+                .setData(ImmutableMap.of("firstParts", parts, "rest", rest, "fileIndex", fileIndex))
+                .render()
+                .getBytes(UTF_8));
   }
 
   private String revisionUrl(Revision rev, String path) {
@@ -125,8 +126,8 @@
   }
 
   @Override
-  protected void writeHunkHeader(int aStartLine, int aEndLine,
-      int bStartLine, int bEndLine) throws IOException {
+  protected void writeHunkHeader(int aStartLine, int aEndLine, int bStartLine, int bEndLine)
+      throws IOException {
     getOutputStream().write(HUNK_BEGIN);
     // TODO(sop): If hunk header starts including method names, escape it.
     super.writeHunkHeader(aStartLine, aEndLine, bStartLine, bEndLine);
@@ -134,8 +135,7 @@
   }
 
   @Override
-  protected void writeLine(char prefix, RawText text, int cur)
-      throws IOException {
+  protected void writeLine(char prefix, RawText text, int cur) throws IOException {
     // Manually render each line, rather than invoke a Soy template. This method
     // can be called thousands of times in a single request. Avoid unnecessary
     // overheads by formatting as-is.
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java
index eb0905b..5493452 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java
@@ -43,8 +43,8 @@
   }
 
   @Override
-  public boolean include(RevWalk walker, RevCommit commit) throws StopWalkException,
-      MissingObjectException, IncorrectObjectTypeException, IOException {
+  public boolean include(RevWalk walker, RevCommit commit)
+      throws StopWalkException, MissingObjectException, IncorrectObjectTypeException, IOException {
     return matchesPerson(getIdent(commit));
   }
 
@@ -59,8 +59,7 @@
     // Equivalent to --fixed-strings, to avoid pathological performance of Java
     // regex matching.
     // TODO(kalman): Find/use a port of re2.
-    return person.getName().contains(pattern)
-        || person.getEmailAddress().contains(pattern);
+    return person.getName().contains(pattern) || person.getEmailAddress().contains(pattern);
   }
 
   protected abstract PersonIdent getIdent(RevCommit commit);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
index 8225278..e513ec4 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
@@ -45,14 +45,8 @@
 
   static {
     // HTTP URL regex adapted from com.google.gwtexpui.safehtml.client.SafeHtml.
-    String part = "(?:" +
-        "[a-zA-Z0-9$_.+!*',%;:@=?#/~<>-]" +
-        "|&(?!lt;|gt;)" +
-        ")";
-    String httpUrl = "https?://" +
-        part + "{2,}" +
-        "(?:[(]" + part + "*" + "[)])*" +
-        part + "*";
+    String part = "(?:" + "[a-zA-Z0-9$_.+!*',%;:@=?#/~<>-]" + "|&(?!lt;|gt;)" + ")";
+    String httpUrl = "https?://" + part + "{2,}" + "(?:[(]" + part + "*" + "[)])*" + part + "*";
     HTTP_URL_PATTERN = Pattern.compile(httpUrl);
     CHANGE_ID_PATTERN = Pattern.compile("(\\bI[0-9a-f]{8,40}\\b)");
   }
@@ -76,8 +70,9 @@
       String link = config.getString("commentlink", subsection, "link");
       String html = config.getString("commentlink", subsection, "html");
       if (html != null) {
-        log.warn("Beware: html in commentlinks is unsupported in gitiles; "
-               + "Did you copy it from a gerrit config?");
+        log.warn(
+            "Beware: html in commentlinks is unsupported in gitiles; "
+                + "Did you copy it from a gerrit config?");
       }
       if (Strings.isNullOrEmpty(match)) {
         log.warn("invalid commentlink.%s.match", subsection);
@@ -86,7 +81,7 @@
       Pattern pattern;
       try {
         pattern = Pattern.compile(match);
-      } catch(PatternSyntaxException ex) {
+      } catch (PatternSyntaxException ex) {
         log.warn("invalid commentlink." + subsection + ".match", ex);
         continue;
       }
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 ae6219f..4408c1e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -131,8 +131,7 @@
 
       try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.logDetail", data)) {
         Writer w = newWriter(out, res);
-        new LogSoyData(req, access, pretty)
-            .renderStreaming(paginator, null, renderer, w, df);
+        new LogSoyData(req, access, pretty).renderStreaming(paginator, null, renderer, w, df);
         w.flush();
       }
     } catch (RevWalkException e) {
@@ -169,8 +168,8 @@
       List<CommitJsonData.Commit> entries = Lists.newArrayListWithCapacity(paginator.getLimit());
       for (RevCommit c : paginator) {
         paginator.getWalk().parseBody(c);
-        entries.add(new CommitJsonData().setRevWalk(paginator.getWalk())
-            .toJsonData(req, c, fs, df));
+        entries.add(
+            new CommitJsonData().setRevWalk(paginator.getWalk()).toJsonData(req, c, fs, df));
       }
       result.log = entries;
       if (paginator.getPreviousStart() != null) {
@@ -198,14 +197,14 @@
     }
     try (RevWalk walk = new RevWalk(repo)) {
       return GitilesView.log()
-        .copyFrom(view)
-        .setRevision(Revision.peel(Constants.HEAD, walk.parseAny(headRef.getObjectId()), walk))
-        .build();
+          .copyFrom(view)
+          .setRevision(Revision.peel(Constants.HEAD, walk.parseAny(headRef.getObjectId()), walk))
+          .build();
     }
   }
 
-  private static Optional<ObjectId> getStart(ListMultimap<String, String> params,
-      ObjectReader reader) throws IOException {
+  private static Optional<ObjectId> getStart(
+      ListMultimap<String, String> params, ObjectReader reader) throws IOException {
     List<String> values = params.get(START_PARAM);
     switch (values.size()) {
       case 0:
@@ -258,15 +257,15 @@
     String path = view.getPathPart();
 
     List<String> followParams = view.getParameters().get(FOLLOW_PARAM);
-    boolean follow = !followParams.isEmpty()
-        ? isTrue(followParams.get(0))
-        : access.getConfig().getBoolean("log", null, "follow", true);
+    boolean follow =
+        !followParams.isEmpty()
+            ? isTrue(followParams.get(0))
+            : access.getConfig().getBoolean("log", null, "follow", true);
     if (follow) {
       walk.setTreeFilter(FollowFilter.create(path, access.getConfig().get(DiffConfig.KEY)));
     } else {
-      walk.setTreeFilter(AndTreeFilter.create(
-          PathFilterGroup.createFromStrings(path),
-          TreeFilter.ANY_DIFF));
+      walk.setTreeFilter(
+          AndTreeFilter.create(PathFilterGroup.createFromStrings(path), TreeFilter.ANY_DIFF));
     }
   }
 
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 97fe1ce..6d1a1c8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -39,9 +39,17 @@
 import javax.servlet.http.HttpServletRequest;
 
 public class LogSoyData {
-  private static final ImmutableSet<Field> FIELDS = Sets.immutableEnumSet(Field.ABBREV_SHA,
-      Field.SHA, Field.URL, Field.SHORT_MESSAGE, Field.MESSAGE, Field.AUTHOR, Field.COMMITTER,
-      Field.BRANCHES, Field.TAGS);
+  private static final ImmutableSet<Field> FIELDS =
+      Sets.immutableEnumSet(
+          Field.ABBREV_SHA,
+          Field.SHA,
+          Field.URL,
+          Field.SHORT_MESSAGE,
+          Field.MESSAGE,
+          Field.AUTHOR,
+          Field.COMMITTER,
+          Field.BRANCHES,
+          Field.TAGS);
   private static final ImmutableSet<Field> VERBOSE_FIELDS = Field.setOf(FIELDS, Field.DIFF_TREE);
 
   private final HttpServletRequest req;
@@ -60,9 +68,15 @@
     variant = firstNonNull(config.getString("logFormat", pretty, "variant"), pretty);
   }
 
-  public void renderStreaming(Paginator paginator, @Nullable String revision, Renderer renderer,
-      Writer out, DateFormatter df) throws IOException {
-    renderer.newRenderer("gitiles.logEntriesHeader")
+  public void renderStreaming(
+      Paginator paginator,
+      @Nullable String revision,
+      Renderer renderer,
+      Writer out,
+      DateFormatter df)
+      throws IOException {
+    renderer
+        .newRenderer("gitiles.logEntriesHeader")
         .setData(toHeaderSoyData(paginator, revision))
         .render(out);
     out.flush();
@@ -78,7 +92,8 @@
       renderer.newRenderer("gitiles.emptyLog").render(out);
     }
 
-    renderer.newRenderer("gitiles.logEntriesFooter")
+    renderer
+        .newRenderer("gitiles.logEntriesFooter")
         .setData(toFooterSoyData(paginator, revision))
         .render(out);
   }
@@ -120,7 +135,7 @@
     if (type != ChangeType.RENAME && type != ChangeType.COPY) {
       return null;
     }
-    return ImmutableMap.<String, Object> of(
+    return ImmutableMap.<String, Object>of(
         "changeType", type.toString(),
         "oldPath", entry.getOldPath(),
         "newPath", entry.getNewPath(),
@@ -131,9 +146,11 @@
     Map<String, Object> data = Maps.newHashMapWithExpectedSize(1);
     ObjectId next = paginator.getNextStart();
     if (next != null) {
-      data.put("nextUrl", copyAndCanonicalizeView(revision)
-          .replaceParam(LogServlet.START_PARAM, next.name())
-          .toUrl());
+      data.put(
+          "nextUrl",
+          copyAndCanonicalizeView(revision)
+              .replaceParam(LogServlet.START_PARAM, next.name())
+              .toUrl());
     }
     return data;
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java b/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
index 1a1a053..019d33c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
@@ -85,8 +85,8 @@
    * @param start commit at which to start the walk, or null to start at the
    *     beginning.
    */
-  Paginator(RevWalk walk, int limit, @Nullable ObjectId start) throws MissingObjectException,
-      IncorrectObjectTypeException, IOException {
+  Paginator(RevWalk walk, int limit, @Nullable ObjectId start)
+      throws MissingObjectException, IncorrectObjectTypeException, IOException {
     this.walk = checkNotNull(walk, "walk");
     checkArgument(limit > 0, "limit must be positive: %s", limit);
     this.limit = limit;
@@ -127,8 +127,7 @@
    * @throws IncorrectObjectTypeException See {@link RevWalk#next()}.
    * @throws IOException See {@link RevWalk#next()}.
    */
-  public RevCommit next() throws MissingObjectException, IncorrectObjectTypeException,
-      IOException {
+  public RevCommit next() throws MissingObjectException, IncorrectObjectTypeException, IOException {
     if (done) {
       return null;
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
index d08062f..4837671 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -80,11 +80,16 @@
    * repository URL verbatim in a web browser.
    */
   private static final Pattern VERBATIM_SUBMODULE_URL_PATTERN =
-      Pattern.compile("^(" + Joiner.on('|').join(
-          "https?://[^.]+.googlesource.com/.*",
-          "https?://[^.]+.googlecode.com/.*",
-          "https?://code.google.com/p/.*",
-          "https?://github.com/.*") + ")$", Pattern.CASE_INSENSITIVE);
+      Pattern.compile(
+          "^("
+              + Joiner.on('|')
+                  .join(
+                      "https?://[^.]+.googlesource.com/.*",
+                      "https?://[^.]+.googlecode.com/.*",
+                      "https?://code.google.com/p/.*",
+                      "https?://github.com/.*")
+              + ")$",
+          Pattern.CASE_INSENSITIVE);
 
   static final String AUTODIVE_PARAM = "autodive";
   static final String NO_AUTODIVE_VALUE = "0";
@@ -279,8 +284,8 @@
     }
 
     @Override
-    public boolean include(TreeWalk tw) throws MissingObjectException,
-        IncorrectObjectTypeException, IOException {
+    public boolean include(TreeWalk tw)
+        throws MissingObjectException, IncorrectObjectTypeException, IOException {
       count++;
       int cmp = tw.isPathPrefix(pathRaw, pathRaw.length);
       if (cmp > 0) {
@@ -313,7 +318,7 @@
 
     @Override
     public boolean shouldBeRecursive() {
-      return Bytes.indexOf(pathRaw, (byte)'/') >= 0;
+      return Bytes.indexOf(pathRaw, (byte) '/') >= 0;
     }
 
     @Override
@@ -344,7 +349,7 @@
         tw.addTree(root);
         tw.setRecursive(false);
         if (path.isEmpty()) {
-          return new WalkResult(tw, path, root, root, FileType.TREE, ImmutableList.<Boolean> of());
+          return new WalkResult(tw, path, root, root, FileType.TREE, ImmutableList.<Boolean>of());
         }
         AutoDiveFilter f = new AutoDiveFilter(path);
         tw.setFilter(f);
@@ -375,7 +380,12 @@
     private final FileType type;
     private final List<Boolean> hasSingleTree;
 
-    private WalkResult(TreeWalk tw, String path, RevTree root, ObjectId objectId, FileType type,
+    private WalkResult(
+        TreeWalk tw,
+        String path,
+        RevTree root,
+        ObjectId objectId,
+        FileType type,
         List<Boolean> hasSingleTree) {
       this.tw = tw;
       this.path = path;
@@ -414,21 +424,28 @@
           }
           child = next;
         }
-        res.sendRedirect(GitilesView.path().copyFrom(view)
-            .setPathPart(
-                RawParseUtils.decode(child.getEntryPathBuffer(), 0, child.getEntryPathLength()))
-            .toUrl());
+        res.sendRedirect(
+            GitilesView.path()
+                .copyFrom(view)
+                .setPathPart(
+                    RawParseUtils.decode(child.getEntryPathBuffer(), 0, child.getEntryPathLength()))
+                .toUrl());
         return;
       }
     }
     // TODO(sop): Allow caching trees by SHA-1 when no S cookie is sent.
-    renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", !view.getPathPart().isEmpty() ? view.getPathPart() : "/",
-        "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
-        "type", FileType.TREE.toString(),
-        "data", new TreeSoyData(wr.getObjectReader(), view, cfg, wr.root)
-            .setArchiveFormat(getArchiveFormat(getAccess(req)))
-            .toSoyData(wr.id, wr.tw)));
+    renderHtml(
+        req,
+        res,
+        "gitiles.pathDetail",
+        ImmutableMap.of(
+            "title", !view.getPathPart().isEmpty() ? view.getPathPart() : "/",
+            "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
+            "type", FileType.TREE.toString(),
+            "data",
+                new TreeSoyData(wr.getObjectReader(), view, cfg, wr.root)
+                    .setArchiveFormat(getArchiveFormat(getAccess(req)))
+                    .toSoyData(wr.id, wr.tw)));
   }
 
   private CanonicalTreeParser getOnlyChildSubtree(ObjectReader reader, ObjectId id, byte[] prefix)
@@ -444,14 +461,17 @@
   private void showFile(HttpServletRequest req, HttpServletResponse res, WalkResult wr)
       throws IOException {
     GitilesView view = ViewFilter.getView(req);
-    Map<String, ?> data = new BlobSoyData(wr.getObjectReader(), view)
-        .toSoyData(wr.path, wr.id);
+    Map<String, ?> data = new BlobSoyData(wr.getObjectReader(), view).toSoyData(wr.path, wr.id);
     // TODO(sop): Allow caching files by SHA-1 when no S cookie is sent.
-    renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", ViewFilter.getView(req).getPathPart(),
-        "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
-        "type", wr.type.toString(),
-        "data", data));
+    renderHtml(
+        req,
+        res,
+        "gitiles.pathDetail",
+        ImmutableMap.of(
+            "title", ViewFilter.getView(req).getPathPart(),
+            "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
+            "type", wr.type.toString(),
+            "data", data));
   }
 
   private void showSymlink(HttpServletRequest req, HttpServletResponse res, WalkResult wr)
@@ -469,20 +489,22 @@
       data.put("sha", ObjectId.toString(wr.id));
       data.put("data", null);
       data.put("size", Long.toString(loader.getSize()));
-      renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-          "title", ViewFilter.getView(req).getPathPart(),
-          "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
-          "type", FileType.REGULAR_FILE.toString(),
-          "data", data));
+      renderHtml(
+          req,
+          res,
+          "gitiles.pathDetail",
+          ImmutableMap.of(
+              "title", ViewFilter.getView(req).getPathPart(),
+              "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
+              "type", FileType.REGULAR_FILE.toString(),
+              "data", data));
       return;
     }
 
-    String url = resolveTargetUrl(
-        GitilesView.path()
-            .copyFrom(view)
-            .setPathPart(dirname(view.getPathPart()))
-            .build(),
-        target);
+    String url =
+        resolveTargetUrl(
+            GitilesView.path().copyFrom(view).setPathPart(dirname(view.getPathPart())).build(),
+            target);
     data.put("title", view.getPathPart());
     data.put("target", target);
     if (url != null) {
@@ -490,11 +512,15 @@
     }
 
     // TODO(sop): Allow caching files by SHA-1 when no S cookie is sent.
-    renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", ViewFilter.getView(req).getPathPart(),
-        "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
-        "type", FileType.SYMLINK.toString(),
-        "data", data));
+    renderHtml(
+        req,
+        res,
+        "gitiles.pathDetail",
+        ImmutableMap.of(
+            "title", ViewFilter.getView(req).getPathPart(),
+            "breadcrumbs", view.getBreadcrumbs(wr.hasSingleTree),
+            "type", FileType.SYMLINK.toString(),
+            "data", data));
   }
 
   private static String dirname(String path) {
@@ -517,10 +543,8 @@
     String modulesUrl;
     String remoteUrl = null;
 
-    try (SubmoduleWalk sw = SubmoduleWalk.forPath(
-          ServletUtils.getRepository(req),
-          wr.root,
-          view.getPathPart())) {
+    try (SubmoduleWalk sw =
+        SubmoduleWalk.forPath(ServletUtils.getRepository(req), wr.root, view.getPathPart())) {
       modulesUrl = sw.getModulesUrl();
       if (modulesUrl != null && (modulesUrl.startsWith("./") || modulesUrl.startsWith("../"))) {
         String moduleRepo = PathUtil.simplifyPathUpToRoot(modulesUrl, view.getRepositoryName());
@@ -545,10 +569,14 @@
     }
 
     // TODO(sop): Allow caching links by SHA-1 when no S cookie is sent.
-    renderHtml(req, res, "gitiles.pathDetail", ImmutableMap.of(
-        "title", view.getPathPart(),
-        "type", FileType.GITLINK.toString(),
-        "data", data));
+    renderHtml(
+        req,
+        res,
+        "gitiles.pathDetail",
+        ImmutableMap.of(
+            "title", view.getPathPart(),
+            "type", FileType.GITLINK.toString(),
+            "data", data));
   }
 
   private static String resolveHttpUrl(String remoteUrl) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java b/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
index e55b77d..e67223f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
@@ -59,6 +59,5 @@
     return path.substring(slash + 1);
   }
 
-  private PathUtil() {
-  }
+  private PathUtil() {}
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
index 91795bb..6bf0feb 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
@@ -50,8 +50,7 @@
   private String readmePath;
   private ObjectId readmeId;
 
-  ReadmeHelper(ObjectReader reader, GitilesView view, Config cfg,
-      RevTree rootTree) {
+  ReadmeHelper(ObjectReader reader, GitilesView view, Config cfg, RevTree rootTree) {
     this.reader = reader;
     this.view = view;
     this.cfg = cfg;
@@ -59,8 +58,9 @@
     render = cfg.getBoolean("markdown", "render", true);
   }
 
-  void scanTree(RevTree tree) throws MissingObjectException,
-      IncorrectObjectTypeException, CorruptObjectException, IOException {
+  void scanTree(RevTree tree)
+      throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException,
+          IOException {
     if (render) {
       TreeWalk tw = new TreeWalk(reader);
       tw.setRecursive(false);
@@ -90,13 +90,13 @@
 
   SanitizedContent render() {
     try {
-      Duration parseTimeout = ConfigUtil.getDuration(cfg, "markdown", null,
-          "parseTimeout", Duration.standardSeconds(2));
+      Duration parseTimeout =
+          ConfigUtil.getDuration(
+              cfg, "markdown", null, "parseTimeout", Duration.standardSeconds(2));
       int inputLimit = cfg.getInt("markdown", "inputLimit", 5 << 20);
       byte[] raw = reader.open(readmeId, Constants.OBJ_BLOB).getCachedBytes(inputLimit);
       String md = RawParseUtils.decode(raw);
-      RootNode root =
-          GitilesMarkdown.parseFile(parseTimeout, view, readmePath, md);
+      RootNode root = GitilesMarkdown.parseFile(parseTimeout, view, readmePath, md);
       if (root == null) {
         return null;
       }
@@ -107,13 +107,9 @@
         img = new ImageLoader(reader, view, rootTree, readmePath, imageLimit);
       }
 
-      return new MarkdownToHtml(view, cfg)
-        .setImageLoader(img)
-        .setReadme(true)
-        .toSoyHtml(root);
+      return new MarkdownToHtml(view, cfg).setImageLoader(img).setReadme(true).toSoyHtml(root);
     } catch (LargeObjectException | IOException e) {
-      log.error(String.format("error rendering %s/%s",
-          view.getRepositoryName(), readmePath), e);
+      log.error(String.format("error rendering %s/%s", view.getRepositoryName(), readmePath), e);
       return null;
     }
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
index ff48d4d..0d74b46 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -52,15 +52,14 @@
 
   private final TimeCache timeCache;
 
-  protected RefServlet(GitilesAccess.Factory accessFactory, Renderer renderer,
-      TimeCache timeCache) {
+  protected RefServlet(
+      GitilesAccess.Factory accessFactory, Renderer renderer, TimeCache timeCache) {
     super(renderer, accessFactory);
     this.timeCache = checkNotNull(timeCache, "timeCache");
   }
 
   @Override
-  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
     if (!ViewFilter.getView(req).getPathPart().isEmpty()) {
       res.setStatus(SC_NOT_FOUND);
       return;
@@ -69,16 +68,18 @@
     try (RevWalk walk = new RevWalk(ServletUtils.getRepository(req))) {
       tags = getTagsSoyData(req, timeCache, walk, 0);
     }
-    renderHtml(req, res, "gitiles.refsDetail",
+    renderHtml(
+        req,
+        res,
+        "gitiles.refsDetail",
         ImmutableMap.of("branches", getBranchesSoyData(req, 0), "tags", tags));
   }
 
   @Override
-  protected void doGetText(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException {
     GitilesView view = ViewFilter.getView(req);
-    Map<String, Ref> refs = getRefs(ServletUtils.getRepository(req).getRefDatabase(),
-        view.getPathPart());
+    Map<String, Ref> refs =
+        getRefs(ServletUtils.getRepository(req).getRefDatabase(), view.getPathPart());
     TextRefAdvertiser adv = new TextRefAdvertiser(startRenderText(req, res));
     adv.setDerefTags(true);
     adv.send(refs);
@@ -86,11 +87,10 @@
   }
 
   @Override
-  protected void doGetJson(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException {
     GitilesView view = ViewFilter.getView(req);
-    Map<String, Ref> refs = getRefs(ServletUtils.getRepository(req).getRefDatabase(),
-        view.getPathPart());
+    Map<String, Ref> refs =
+        getRefs(ServletUtils.getRepository(req).getRefDatabase(), view.getPathPart());
     Map<String, RefJsonData> jsonRefs = new LinkedHashMap<>();
     for (Map.Entry<String, Ref> ref : refs.entrySet()) {
       jsonRefs.put(ref.getKey(), new RefJsonData(ref.getValue()));
@@ -131,8 +131,8 @@
     }.compound(RefComparator.INSTANCE);
   }
 
-  static List<Map<String, Object>> getTagsSoyData(HttpServletRequest req,
-      TimeCache timeCache, RevWalk walk, int limit) throws IOException {
+  static List<Map<String, Object>> getTagsSoyData(
+      HttpServletRequest req, TimeCache timeCache, RevWalk walk, int limit) throws IOException {
     return getRefsSoyData(
         ServletUtils.getRepository(req).getRefDatabase(),
         ViewFilter.getView(req),
@@ -143,16 +143,20 @@
   }
 
   private static Ordering<Ref> tagComparator(final TimeCache timeCache, final RevWalk walk) {
-    return Ordering.natural().onResultOf(new Function<Ref, Long>() {
-      @Override
-      public Long apply(Ref ref) {
-        try {
-          return timeCache.getTime(walk, ref.getObjectId());
-        } catch (IOException e) {
-          throw new UncheckedExecutionException(e);
-        }
-      }
-    }).reverse().compound(RefComparator.INSTANCE);
+    return Ordering.natural()
+        .onResultOf(
+            new Function<Ref, Long>() {
+              @Override
+              public Long apply(Ref ref) {
+                try {
+                  return timeCache.getTime(walk, ref.getObjectId());
+                } catch (IOException e) {
+                  throw new UncheckedExecutionException(e);
+                }
+              }
+            })
+        .reverse()
+        .compound(RefComparator.INSTANCE);
   }
 
   private static List<Map<String, Object>> getRefsSoyData(
@@ -161,7 +165,8 @@
       String prefix,
       Ordering<Ref> ordering,
       @Nullable Ref headLeaf,
-      int limit) throws IOException {
+      int limit)
+      throws IOException {
     Collection<Ref> refs = refdb.getRefs(prefix).values();
     refs = ordering.leastOf(refs, limit > 0 ? Ints.saturatedCast(limit + 1L) : refs.size());
     List<Map<String, Object>> result = Lists.newArrayListWithCapacity(refs.size());
@@ -172,8 +177,13 @@
       if (refForName != null) {
         boolean needPrefix = !ref.getName().equals(refForName.getName());
         Map<String, Object> value = Maps.newHashMapWithExpectedSize(3);
-        value.put("url", GitilesView.revision().copyFrom(view).setRevision(
-          Revision.unpeeled(needPrefix ? ref.getName() : name, ref.getObjectId())).toUrl());
+        value.put(
+            "url",
+            GitilesView.revision()
+                .copyFrom(view)
+                .setRevision(
+                    Revision.unpeeled(needPrefix ? ref.getName() : name, ref.getObjectId()))
+                .toUrl());
         value.put("name", name);
         if (headLeaf != null) {
           value.put("isHead", headLeaf.equals(ref));
@@ -185,9 +195,7 @@
   }
 
   static String sanitizeRefForText(String refName) {
-    return refName.replace("&", "&amp;")
-        .replace("<", "&lt;")
-        .replace(">", "&gt;");
+    return refName.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
   }
 
   private static Map<String, Ref> getRefs(RefDatabase refdb, String path) throws IOException {
@@ -229,7 +237,7 @@
   static class RefJsonData {
     RefJsonData(Ref ref) {
       value = ref.getObjectId().getName();
-      if(ref.getPeeledObjectId() != null) {
+      if (ref.getPeeledObjectId() != null) {
         peeled = ref.getPeeledObjectId().getName();
       }
       if (ref.isSymbolic()) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
index 9defb71..8d04578 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
@@ -55,23 +55,25 @@
   // Must match .streamingPlaceholder.
   private static final String PLACEHOLDER = "id=\"STREAMED_OUTPUT_BLOCK\"";
 
-  private static final List<String> SOY_FILENAMES = ImmutableList.of(
-      "BlameDetail.soy",
-      "Common.soy",
-      "DiffDetail.soy",
-      "Doc.soy",
-      "HostIndex.soy",
-      "LogDetail.soy",
-      "ObjectDetail.soy",
-      "PathDetail.soy",
-      "RefList.soy",
-      "RevisionDetail.soy",
-      "RepositoryIndex.soy");
+  private static final List<String> SOY_FILENAMES =
+      ImmutableList.of(
+          "BlameDetail.soy",
+          "Common.soy",
+          "DiffDetail.soy",
+          "Doc.soy",
+          "HostIndex.soy",
+          "LogDetail.soy",
+          "ObjectDetail.soy",
+          "PathDetail.soy",
+          "RefList.soy",
+          "RevisionDetail.soy",
+          "RepositoryIndex.soy");
 
-  public static final Map<String, String> STATIC_URL_GLOBALS = ImmutableMap.of(
-      "gitiles.BASE_CSS_URL", "base.css",
-      "gitiles.DOC_CSS_URL", "doc.css",
-      "gitiles.PRETTIFY_CSS_URL", "prettify/prettify.css");
+  public static final Map<String, String> STATIC_URL_GLOBALS =
+      ImmutableMap.of(
+          "gitiles.BASE_CSS_URL", "base.css",
+          "gitiles.DOC_CSS_URL", "doc.css",
+          "gitiles.PRETTIFY_CSS_URL", "prettify/prettify.css");
 
   protected static class FileUrlMapper implements Function<String, URL> {
     private final String prefix;
@@ -99,13 +101,15 @@
 
   protected ImmutableMap<String, URL> templates;
   protected ImmutableMap<String, String> globals;
-  private final ConcurrentMap<String, HashCode> hashes = new MapMaker()
-      .initialCapacity(SOY_FILENAMES.size())
-      .concurrencyLevel(1)
-      .makeMap();
+  private final ConcurrentMap<String, HashCode> hashes =
+      new MapMaker().initialCapacity(SOY_FILENAMES.size()).concurrencyLevel(1).makeMap();
 
-  protected Renderer(Function<String, URL> resourceMapper, Map<String, String> globals,
-      String staticPrefix, Iterable<URL> customTemplates, String siteTitle) {
+  protected Renderer(
+      Function<String, URL> resourceMapper,
+      Map<String, String> globals,
+      String staticPrefix,
+      Iterable<URL> customTemplates,
+      String siteTitle) {
     checkNotNull(staticPrefix, "staticPrefix");
 
     ImmutableMap.Builder<String, URL> b = ImmutableMap.builder();
@@ -153,8 +157,9 @@
     return newRenderer(templateName).setData(soyData).render();
   }
 
-  void render(HttpServletRequest req, HttpServletResponse res,
-      String templateName, Map<String, ?> soyData) throws IOException {
+  void render(
+      HttpServletRequest req, HttpServletResponse res, String templateName, Map<String, ?> soyData)
+      throws IOException {
     res.setContentType("text/html");
     res.setCharacterEncoding("UTF-8");
     byte[] data = newRenderer(templateName).setData(soyData).render().getBytes(UTF_8);
@@ -168,9 +173,7 @@
 
   OutputStream renderStreaming(HttpServletResponse res, String templateName, Map<String, ?> soyData)
       throws IOException {
-    final String html = newRenderer(templateName)
-        .setData(soyData)
-        .render();
+    final String html = newRenderer(templateName).setData(soyData).render();
     int id = html.indexOf(PLACEHOLDER);
     checkArgument(id >= 0, "Template must contain %s", PLACEHOLDER);
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java
index 6eb5033..bbaabc5 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java
@@ -43,8 +43,8 @@
   }
 
   @Override
-  public void doFilter(HttpServletRequest req, HttpServletResponse res,
-      FilterChain chain) throws IOException, ServletException {
+  public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain)
+      throws IOException, ServletException {
     try {
       String repo = ViewFilter.trimLeadingSlash(getRegexGroup(req, 1));
       try (Repository git = resolver.open(req, repo)) {
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 d1dfbd8..c45e0e6 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -55,15 +55,14 @@
 
   private final TimeCache timeCache;
 
-  public RepositoryIndexServlet(GitilesAccess.Factory accessFactory, Renderer renderer,
-      TimeCache timeCache) {
+  public RepositoryIndexServlet(
+      GitilesAccess.Factory accessFactory, Renderer renderer, TimeCache timeCache) {
     super(renderer, accessFactory);
     this.timeCache = checkNotNull(timeCache, "timeCache");
   }
 
   @Override
-  protected void doHead(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doHead(HttpServletRequest req, HttpServletResponse res) throws IOException {
     // If the repository didn't exist a prior filter would have 404 replied.
     Optional<FormatType> format = getFormat(req);
     if (!format.isPresent()) {
@@ -77,7 +76,7 @@
         res.setContentType(format.get().getMimeType());
         break;
       case TEXT:
-        default:
+      default:
         res.sendError(SC_BAD_REQUEST);
         break;
     }
@@ -155,8 +154,8 @@
     return list.size() > REF_LIMIT ? list.subList(0, REF_LIMIT) : list;
   }
 
-  private static Map<String, Object> renderReadme(RevWalk walk,
-      GitilesView view, Config cfg, RevObject head) throws IOException {
+  private static Map<String, Object> renderReadme(
+      RevWalk walk, GitilesView view, Config cfg, RevObject head) throws IOException {
     RevTree rootTree;
     try {
       rootTree = walk.parseTree(head);
@@ -164,13 +163,15 @@
       return null;
     }
 
-    ReadmeHelper readme = new ReadmeHelper(
-        walk.getObjectReader(),
-        GitilesView.path().copyFrom(view).setRevision(Revision.HEAD).setPathPart("/").build(),
-        cfg, rootTree);
+    ReadmeHelper readme =
+        new ReadmeHelper(
+            walk.getObjectReader(),
+            GitilesView.path().copyFrom(view).setRevision(Revision.HEAD).setPathPart("/").build(),
+            cfg,
+            rootTree);
     readme.scanTree(rootTree);
     if (readme.isPresent()) {
-      return ImmutableMap.<String, Object> of("readmeHtml", readme.render());
+      return ImmutableMap.<String, Object>of("readmeHtml", readme.render());
     }
     return null;
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
index 00d5763..356fbc7 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
@@ -46,8 +46,7 @@
   public static final Revision HEAD = named("HEAD");
 
   public static Revision normalizeParentExpressions(Revision rev) {
-    if (rev == null
-        || (rev.name.indexOf('~') < 0 && rev.name.indexOf('^') < 0)) {
+    if (rev == null || (rev.name.indexOf('~') < 0 && rev.name.indexOf('^') < 0)) {
       return rev;
     }
     return new Revision(rev.id.name(), rev.id, rev.type, rev.peeledId, rev.peeledType);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
index 9f234d1..59112d0 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
@@ -167,8 +167,9 @@
             } else {
               oldRevision = Revision.NULL;
             }
-            Result result = new Result(Revision.peeled(name, c), oldRevision,
-                path.substring(name.length() + 2));
+            Result result =
+                new Result(
+                    Revision.peeled(name, c), oldRevision, path.substring(name.length() + 2));
             return isVisible(walk, result) ? result : null;
           }
         }
@@ -212,9 +213,7 @@
   private static boolean isValidRevision(String revision) {
     // Disallow some uncommon but valid revision expressions that either we
     // don't support or we represent differently in our URLs.
-    return !revision.contains(":")
-        && !revision.contains("^{")
-        && !revision.contains("@");
+    return !revision.contains(":") && !revision.contains("^{") && !revision.contains("@");
   }
 
   private boolean isVisible(RevWalk walk, Result result) throws IOException {
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 9887195..9c7fdb0 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -67,8 +67,8 @@
 
   private final Linkifier linkifier;
 
-  public RevisionServlet(GitilesAccess.Factory accessFactory, Renderer renderer,
-      Linkifier linkifier) {
+  public RevisionServlet(
+      GitilesAccess.Factory accessFactory, Renderer renderer, Linkifier linkifier) {
     super(renderer, accessFactory);
     this.linkifier = checkNotNull(linkifier, "linkifier");
   }
@@ -92,33 +92,39 @@
         try {
           switch (obj.getType()) {
             case OBJ_COMMIT:
-              soyObjects.add(ImmutableMap.of(
-                  "type", Constants.TYPE_COMMIT,
-                  "data", new CommitSoyData()
-                      .setLinkifier(linkifier)
-                      .setRevWalk(walk)
-                      .setArchiveFormat(getArchiveFormat(access))
-                      .toSoyData(req, (RevCommit) obj, COMMIT_SOY_FIELDS, df)));
+              soyObjects.add(
+                  ImmutableMap.of(
+                      "type",
+                      Constants.TYPE_COMMIT,
+                      "data",
+                      new CommitSoyData()
+                          .setLinkifier(linkifier)
+                          .setRevWalk(walk)
+                          .setArchiveFormat(getArchiveFormat(access))
+                          .toSoyData(req, (RevCommit) obj, COMMIT_SOY_FIELDS, df)));
               break;
             case OBJ_TREE:
               Map<String, Object> tree =
-                  new TreeSoyData(walk.getObjectReader(), view, cfg, (RevTree) obj)
-                      .toSoyData(obj);
-              soyObjects.add(ImmutableMap.of(
-                  "type", Constants.TYPE_TREE,
-                  "data", tree));
+                  new TreeSoyData(walk.getObjectReader(), view, cfg, (RevTree) obj).toSoyData(obj);
+              soyObjects.add(ImmutableMap.of("type", Constants.TYPE_TREE, "data", tree));
               hasReadme = tree.containsKey("readmeHtml");
               break;
             case OBJ_BLOB:
-              soyObjects.add(ImmutableMap.of(
-                  "type", Constants.TYPE_BLOB,
-                  "data", new BlobSoyData(walk.getObjectReader(), view).toSoyData(obj)));
+              soyObjects.add(
+                  ImmutableMap.of(
+                      "type",
+                      Constants.TYPE_BLOB,
+                      "data",
+                      new BlobSoyData(walk.getObjectReader(), view).toSoyData(obj)));
               hasBlob = true;
               break;
             case OBJ_TAG:
-              soyObjects.add(ImmutableMap.of(
-                  "type", Constants.TYPE_TAG,
-                  "data", new TagSoyData(linkifier, req).toSoyData((RevTag) obj, df)));
+              soyObjects.add(
+                  ImmutableMap.of(
+                      "type",
+                      Constants.TYPE_TAG,
+                      "data",
+                      new TagSoyData(linkifier, req).toSoyData((RevTag) obj, df)));
               break;
             default:
               log.warn("Bad object type for {}: {}", ObjectId.toString(obj.getId()), obj.getType());
@@ -136,11 +142,15 @@
         }
       }
 
-      renderHtml(req, res, "gitiles.revisionDetail", ImmutableMap.of(
-          "title", view.getRevision().getName(),
-          "objects", soyObjects,
-          "hasBlob", hasBlob,
-          "hasReadme", hasReadme));
+      renderHtml(
+          req,
+          res,
+          "gitiles.revisionDetail",
+          ImmutableMap.of(
+              "title", view.getRevision().getName(),
+              "objects", soyObjects,
+              "hasBlob", hasBlob,
+              "hasReadme", hasReadme));
     }
   }
 
@@ -149,16 +159,16 @@
     GitilesView view = ViewFilter.getView(req);
     Repository repo = ServletUtils.getRepository(req);
     try (ObjectReader reader = repo.newObjectReader()) {
-        ObjectLoader loader = reader.open(view.getRevision().getId());
-        if (loader.getType() != OBJ_COMMIT) {
-          res.setStatus(SC_NOT_FOUND);
-        } else {
-          PathServlet.setTypeHeader(res, loader.getType());
-          try (Writer writer = startRenderText(req, res);
-              OutputStream out = BaseEncoding.base64().encodingStream(writer)) {
-            loader.copyTo(out);
-          }
+      ObjectLoader loader = reader.open(view.getRevision().getId());
+      if (loader.getType() != OBJ_COMMIT) {
+        res.setStatus(SC_NOT_FOUND);
+      } else {
+        PathServlet.setTypeHeader(res, loader.getType());
+        try (Writer writer = startRenderText(req, res);
+            OutputStream out = BaseEncoding.base64().encodingStream(writer)) {
+          loader.copyTo(out);
         }
+      }
     }
   }
 
@@ -172,9 +182,12 @@
       RevObject obj = walk.parseAny(view.getRevision().getId());
       switch (obj.getType()) {
         case OBJ_COMMIT:
-          renderJson(req, res, new CommitJsonData()
-                .setRevWalk(walk)
-                .toJsonData(req, (RevCommit) obj, COMMIT_JSON_FIELDS, df),
+          renderJson(
+              req,
+              res,
+              new CommitJsonData()
+                  .setRevWalk(walk)
+                  .toJsonData(req, (RevCommit) obj, COMMIT_JSON_FIELDS, df),
               Commit.class);
           break;
         default:
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java
index bdf4aa9..057aba8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java
@@ -47,8 +47,10 @@
   private final RepositoryResolver<HttpServletRequest> resolver;
   private final DocServlet docServlet;
 
-  public RootedDocServlet(RepositoryResolver<HttpServletRequest> resolver,
-      GitilesAccess.Factory accessFactory, Renderer renderer) {
+  public RootedDocServlet(
+      RepositoryResolver<HttpServletRequest> resolver,
+      GitilesAccess.Factory accessFactory,
+      Renderer renderer) {
     this.resolver = resolver;
     docServlet = new DocServlet(accessFactory, renderer);
   }
@@ -77,15 +79,18 @@
       }
 
       req.setAttribute(ATTRIBUTE_REPOSITORY, repo);
-      ViewFilter.setView(req, GitilesView.rootedDoc()
-          .setHostName(req.getServerName())
-          .setServletPath(req.getContextPath() + req.getServletPath())
-          .setRevision(BRANCH, obj)
-          .setPathPart(req.getPathInfo())
-          .build());
+      ViewFilter.setView(
+          req,
+          GitilesView.rootedDoc()
+              .setHostName(req.getServerName())
+              .setServletPath(req.getContextPath() + req.getServletPath())
+              .setRevision(BRANCH, obj)
+              .setPathPart(req.getPathInfo())
+              .build());
 
       docServlet.service(req, res);
-    } catch (RepositoryNotFoundException | ServiceNotAuthorizedException
+    } catch (RepositoryNotFoundException
+        | ServiceNotAuthorizedException
         | ServiceNotEnabledException e) {
       log.error(String.format("cannot open repository for %s", req.getServerName()), e);
       res.sendError(HttpServletResponse.SC_NOT_FOUND);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java
index f5881d4..36646aa 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java
@@ -20,15 +20,15 @@
 import prettify.parser.Prettify;
 
 public class ThreadSafePrettifyParser extends PrettifyParser {
-  public static final ThreadSafePrettifyParser INSTANCE =
-      new ThreadSafePrettifyParser();
+  public static final ThreadSafePrettifyParser INSTANCE = new ThreadSafePrettifyParser();
 
   private ThreadSafePrettifyParser() {
     // Prettify is not thread safe ... unless we do this.
-    prettify = new Prettify() {
-      {
-        langHandlerRegistry = Collections.synchronizedMap(langHandlerRegistry);
-      }
-    };
+    prettify =
+        new Prettify() {
+          {
+            langHandlerRegistry = Collections.synchronizedMap(langHandlerRegistry);
+          }
+        };
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
index efdff6e..7021733 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
@@ -58,25 +58,27 @@
 
   Long getTime(final RevWalk walk, final ObjectId id) throws IOException {
     try {
-      return cache.get(id, new Callable<Long>() {
-        @Override
-        public Long call() throws IOException {
-          RevObject o = walk.parseAny(id);
-          while (o instanceof RevTag) {
-            RevTag tag = (RevTag) o;
-            PersonIdent ident = tag.getTaggerIdent();
-            if (ident != null) {
-              return ident.getWhen().getTime() / 1000;
+      return cache.get(
+          id,
+          new Callable<Long>() {
+            @Override
+            public Long call() throws IOException {
+              RevObject o = walk.parseAny(id);
+              while (o instanceof RevTag) {
+                RevTag tag = (RevTag) o;
+                PersonIdent ident = tag.getTaggerIdent();
+                if (ident != null) {
+                  return ident.getWhen().getTime() / 1000;
+                }
+                o = tag.getObject();
+                walk.parseHeaders(o);
+              }
+              if (o.getType() == Constants.OBJ_COMMIT) {
+                return Long.valueOf(((RevCommit) o).getCommitTime());
+              }
+              return Long.MIN_VALUE;
             }
-            o = tag.getObject();
-            walk.parseHeaders(o);
-          }
-          if (o.getType() == Constants.OBJ_COMMIT) {
-            return Long.valueOf(((RevCommit) o).getCommitTime());
-          }
-          return Long.MIN_VALUE;
-        }
-      });
+          });
     } catch (ExecutionException e) {
       Throwables.propagateIfInstanceOf(e.getCause(), IOException.class);
       throw new IOException(e);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java
index 4ad6562..b525453 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java
@@ -53,6 +53,5 @@
     return tree;
   }
 
-  private TreeJsonData() {
-  }
+  private TreeJsonData() {}
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
index 6967c65..f1366ad 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -54,10 +54,7 @@
     if (resolved == null) {
       return null;
     }
-    return GitilesView.path()
-        .copyFrom(view)
-        .setPathPart(resolved)
-        .toUrl();
+    return GitilesView.path().copyFrom(view).setPathPart(resolved).toUrl();
   }
 
   @VisibleForTesting
@@ -77,8 +74,7 @@
   private final RevTree rootTree;
   private ArchiveFormat archiveFormat;
 
-  public TreeSoyData(ObjectReader reader, GitilesView view, Config cfg,
-      RevTree rootTree) {
+  public TreeSoyData(ObjectReader reader, GitilesView view, Config cfg, RevTree rootTree) {
     this.reader = reader;
     this.view = view;
     this.cfg = cfg;
@@ -90,8 +86,8 @@
     return this;
   }
 
-  public Map<String, Object> toSoyData(ObjectId treeId, TreeWalk tw) throws MissingObjectException,
-         IOException {
+  public Map<String, Object> toSoyData(ObjectId treeId, TreeWalk tw)
+      throws MissingObjectException, IOException {
     ReadmeHelper readme = new ReadmeHelper(reader, view, cfg, rootTree);
     List<Object> entries = Lists.newArrayList();
     GitilesView.Builder urlBuilder = GitilesView.path().copyFrom(view);
@@ -108,8 +104,8 @@
           urlBuilder.setPathPart(name);
           break;
         default:
-          throw new IllegalStateException(String.format(
-              "Cannot render TreeSoyData from %s view", view.getType()));
+          throw new IllegalStateException(
+              String.format("Cannot render TreeSoyData from %s view", view.getType()));
       }
 
       String url = urlBuilder.toUrl();
@@ -122,9 +118,7 @@
       entry.put("name", name);
       entry.put("url", url);
       if (type == FileType.SYMLINK) {
-        String target = new String(
-            reader.open(tw.getObjectId(0)).getCachedBytes(),
-            UTF_8);
+        String target = new String(reader.open(tw.getObjectId(0)).getCachedBytes(), UTF_8);
         entry.put("targetName", getTargetDisplayName(target));
         String targetUrl = resolveTargetUrl(view, target);
         if (targetUrl != null) {
@@ -143,11 +137,13 @@
     if (view.getType() == GitilesView.Type.PATH
         && view.getRevision().getPeeledType() == OBJ_COMMIT) {
       data.put("logUrl", GitilesView.log().copyFrom(view).toUrl());
-      data.put("archiveUrl", GitilesView.archive()
-          .copyFrom(view)
-          .setPathPart(Strings.emptyToNull(view.getPathPart()))
-          .setExtension(archiveFormat.getDefaultSuffix())
-          .toUrl());
+      data.put(
+          "archiveUrl",
+          GitilesView.archive()
+              .copyFrom(view)
+              .setPathPart(Strings.emptyToNull(view.getPathPart()))
+              .setExtension(archiveFormat.getDefaultSuffix())
+              .toUrl());
       data.put("archiveType", archiveFormat.getShortName());
     }
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
index 3bd5e09..131a353 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
@@ -93,8 +93,8 @@
   private final GitilesAccess.Factory accessFactory;
   private final VisibilityCache visibilityCache;
 
-  public ViewFilter(GitilesAccess.Factory accessFactory, GitilesUrls urls,
-      VisibilityCache visibilityCache) {
+  public ViewFilter(
+      GitilesAccess.Factory accessFactory, GitilesUrls urls, VisibilityCache visibilityCache) {
     this.urls = checkNotNull(urls, "urls");
     this.accessFactory = checkNotNull(accessFactory, "accessFactory");
     this.visibilityCache = checkNotNull(visibilityCache, "visibilityCache");
@@ -134,8 +134,7 @@
     }
   }
 
-  private boolean normalize(GitilesView.Builder view, HttpServletResponse res)
-      throws IOException {
+  private boolean normalize(GitilesView.Builder view, HttpServletResponse res) throws IOException {
     if (view.getOldRevision() != Revision.NULL) {
       return false;
     }
@@ -185,8 +184,7 @@
     }
   }
 
-  private GitilesView.Builder parseNoCommand(HttpServletRequest req,
-      String repoName) {
+  private GitilesView.Builder parseNoCommand(HttpServletRequest req, String repoName) {
     if (!hasRepository(req)) {
       return GitilesView.hostIndex().setRepositoryPrefix(repoName);
     }
@@ -217,8 +215,8 @@
         .setExtension(ext);
   }
 
-  private GitilesView.Builder parseAutoCommand(
-      HttpServletRequest req, String repoName, String path) throws IOException {
+  private GitilesView.Builder parseAutoCommand(HttpServletRequest req, String repoName, String path)
+      throws IOException {
     // Note: if you change the mapping for +, make sure to change
     // GitilesView.toUrl() correspondingly.
     if (path.isEmpty()) {
@@ -234,9 +232,9 @@
     GitilesView.Builder b = parseShowCommand(repoName, result);
     if (b != null && b.getPathPart() != null && b.getPathPart().endsWith(".md")) {
       return GitilesView.doc()
-        .setRepositoryName(repoName)
-        .setRevision(result.getRevision())
-        .setPathPart(result.getPath());
+          .setRepositoryName(repoName)
+          .setRevision(result.getRevision())
+          .setPathPart(result.getPath());
     }
     return b;
   }
@@ -260,18 +258,15 @@
     if (isEmptyOrSlash(path)) {
       return null;
     }
-    return GitilesView.describe()
-        .setRepositoryName(repoName)
-        .setPathPart(path);
+    return GitilesView.describe().setRepositoryName(repoName).setPathPart(path);
   }
 
-  private GitilesView.Builder parseDiffCommand(
-      HttpServletRequest req, String repoName, String path) throws IOException {
+  private GitilesView.Builder parseDiffCommand(HttpServletRequest req, String repoName, String path)
+      throws IOException {
     return parseDiffCommand(repoName, parseRevision(req, path));
   }
 
-  private GitilesView.Builder parseDiffCommand(
-      String repoName, RevisionParser.Result result) {
+  private GitilesView.Builder parseDiffCommand(String repoName, RevisionParser.Result result) {
     if (result == null) {
       return null;
     }
@@ -282,8 +277,8 @@
         .setPathPart(result.getPath());
   }
 
-  private GitilesView.Builder parseLogCommand(
-      HttpServletRequest req, String repoName, String path) throws IOException {
+  private GitilesView.Builder parseLogCommand(HttpServletRequest req, String repoName, String path)
+      throws IOException {
     if (isEmptyOrSlash(path)) {
       return GitilesView.log().setRepositoryName(repoName);
     }
@@ -299,46 +294,39 @@
   }
 
   private GitilesView.Builder parseRefsCommand(String repoName, String path) {
-    return GitilesView.refs()
-        .setRepositoryName(repoName)
-        .setPathPart(path);
+    return GitilesView.refs().setRepositoryName(repoName).setPathPart(path);
   }
 
-  private GitilesView.Builder parseShowCommand(
-      HttpServletRequest req, String repoName, String path) throws IOException {
+  private GitilesView.Builder parseShowCommand(HttpServletRequest req, String repoName, String path)
+      throws IOException {
     return parseShowCommand(repoName, parseRevision(req, path));
   }
 
-  private GitilesView.Builder parseShowCommand(
-      String repoName, RevisionParser.Result result) {
+  private GitilesView.Builder parseShowCommand(String repoName, RevisionParser.Result result) {
     if (result == null || result.getOldRevision() != null) {
       return null;
     }
     if (result.getPath().isEmpty()) {
-      return GitilesView.revision()
-        .setRepositoryName(repoName)
-        .setRevision(result.getRevision());
+      return GitilesView.revision().setRepositoryName(repoName).setRevision(result.getRevision());
     } else {
       return GitilesView.path()
-        .setRepositoryName(repoName)
-        .setRevision(result.getRevision())
-        .setPathPart(result.getPath());
+          .setRepositoryName(repoName)
+          .setRevision(result.getRevision())
+          .setPathPart(result.getPath());
     }
   }
 
-  private GitilesView.Builder parseDocCommand(
-      HttpServletRequest req, String repoName, String path) throws IOException {
+  private GitilesView.Builder parseDocCommand(HttpServletRequest req, String repoName, String path)
+      throws IOException {
     return parseDocCommand(repoName, parseRevision(req, path));
   }
 
-  private GitilesView.Builder parseDocCommand(
-      String repoName, RevisionParser.Result result) {
+  private GitilesView.Builder parseDocCommand(String repoName, RevisionParser.Result result) {
     if (result == null || result.getOldRevision() != null) {
       return null;
     }
-    GitilesView.Builder b = GitilesView.doc()
-        .setRepositoryName(repoName)
-        .setRevision(result.getRevision());
+    GitilesView.Builder b =
+        GitilesView.doc().setRepositoryName(repoName).setRevision(result.getRevision());
     if (!result.getPath().isEmpty()) {
       b.setPathPart(result.getPath());
     }
@@ -347,8 +335,9 @@
 
   private RevisionParser.Result parseRevision(HttpServletRequest req, String path)
       throws IOException {
-    RevisionParser revParser = new RevisionParser(
-        ServletUtils.getRepository(req), accessFactory.forRequest(req), visibilityCache);
+    RevisionParser revParser =
+        new RevisionParser(
+            ServletUtils.getRepository(req), accessFactory.forRequest(req), visibilityCache);
     return revParser.parse(checkLeadingSlash(path));
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
index cc36da8..2c0385d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -81,10 +81,10 @@
     @Override
     public String toString() {
       return toStringHelper(this)
-        .add("user", user)
-        .add("repositoryName", repositoryName)
-        .add("objectId", objectId)
-        .toString();
+          .add("user", user)
+          .add("repositoryName", repositoryName)
+          .add("objectId", objectId)
+          .toString();
     }
   }
 
@@ -92,9 +92,7 @@
   private final boolean topoSort;
 
   public static CacheBuilder<Object, Object> defaultBuilder() {
-    return CacheBuilder.newBuilder()
-        .maximumSize(1 << 10)
-        .expireAfterWrite(30, TimeUnit.MINUTES);
+    return CacheBuilder.newBuilder().maximumSize(1 << 10).expireAfterWrite(30, TimeUnit.MINUTES);
   }
 
   public VisibilityCache(boolean topoSort) {
@@ -110,8 +108,13 @@
     return cache;
   }
 
-  boolean isVisible(final Repository repo, final RevWalk walk, GitilesAccess access,
-      final ObjectId id, final ObjectId... knownReachable) throws IOException {
+  boolean isVisible(
+      final Repository repo,
+      final RevWalk walk,
+      GitilesAccess access,
+      final ObjectId id,
+      final ObjectId... knownReachable)
+      throws IOException {
     try {
       return cache.get(
           new Key(access.getUserKey(), access.getRepositoryName(), id),
@@ -135,8 +138,9 @@
     }
   }
 
-  private boolean isVisible(Repository repo, RevWalk walk, ObjectId id,
-      Collection<ObjectId> knownReachable) throws IOException {
+  private boolean isVisible(
+      Repository repo, RevWalk walk, ObjectId id, Collection<ObjectId> knownReachable)
+      throws IOException {
     RevCommit commit;
     try {
       commit = walk.parseCommit(id);
@@ -175,23 +179,28 @@
 
   @SuppressWarnings("unchecked")
   private static Predicate<Ref> otherRefs() {
-    return not(Predicates.<Ref> or(
-        refStartsWith(R_HEADS), refStartsWith(R_TAGS), refStartsWith("refs/changes/")));
+    return not(
+        Predicates.<Ref>or(
+            refStartsWith(R_HEADS), refStartsWith(R_TAGS), refStartsWith("refs/changes/")));
   }
 
-  private boolean isReachableFromRefs(RevWalk walk, RevCommit commit,
-      Collection<Ref> refs) throws IOException {
-    return isReachableFrom(walk, commit,
-        Collections2.transform(refs, new Function<Ref, ObjectId>() {
-          @Override
-          public ObjectId apply(Ref ref) {
-            if (ref.getPeeledObjectId() != null) {
-              return ref.getPeeledObjectId();
-            } else {
-              return ref.getObjectId();
-            }
-          }
-        }));
+  private boolean isReachableFromRefs(RevWalk walk, RevCommit commit, Collection<Ref> refs)
+      throws IOException {
+    return isReachableFrom(
+        walk,
+        commit,
+        Collections2.transform(
+            refs,
+            new Function<Ref, ObjectId>() {
+              @Override
+              public ObjectId apply(Ref ref) {
+                if (ref.getPeeledObjectId() != null) {
+                  return ref.getPeeledObjectId();
+                } else {
+                  return ref.getObjectId();
+                }
+              }
+            }));
   }
 
   private boolean isReachableFrom(RevWalk walk, RevCommit commit, Collection<ObjectId> ids)
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
index 9c5edbd..daae821 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
@@ -69,8 +69,7 @@
   }
 
   @Override
-  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
     GitilesView view = ViewFilter.getView(req);
     Repository repo = ServletUtils.getRepository(req);
 
@@ -82,20 +81,32 @@
       }
 
       String title = "Blame - " + view.getPathPart();
-      Map<String, ?> blobData = new BlobSoyData(rw.getObjectReader(), view)
-          .toSoyData(view.getPathPart(), result.blobId);
+      Map<String, ?> blobData =
+          new BlobSoyData(rw.getObjectReader(), view).toSoyData(view.getPathPart(), result.blobId);
       if (blobData.get("lines") != null) {
         DateFormatter df = new DateFormatter(access, Format.ISO);
-        renderHtml(req, res, "gitiles.blameDetail", ImmutableMap.of(
-            "title", title,
-            "breadcrumbs", view.getBreadcrumbs(),
-            "data", blobData,
-            "regions", toSoyData(view, rw.getObjectReader(), result.regions, df)));
+        renderHtml(
+            req,
+            res,
+            "gitiles.blameDetail",
+            ImmutableMap.of(
+                "title",
+                title,
+                "breadcrumbs",
+                view.getBreadcrumbs(),
+                "data",
+                blobData,
+                "regions",
+                toSoyData(view, rw.getObjectReader(), result.regions, df)));
       } else {
-        renderHtml(req, res, "gitiles.blameDetail", ImmutableMap.of(
-            "title", title,
-            "breadcrumbs", view.getBreadcrumbs(),
-            "data", blobData));
+        renderHtml(
+            req,
+            res,
+            "gitiles.blameDetail",
+            ImmutableMap.of(
+                "title", title,
+                "breadcrumbs", view.getBreadcrumbs(),
+                "data", blobData));
       }
     }
   }
@@ -118,15 +129,19 @@
         r.setStart(start);
         start += r.getCount();
       }
-      renderJson(req, res, ImmutableMap.of("regions", result.regions),
+      renderJson(
+          req,
+          res,
+          ImmutableMap.of("regions", result.regions),
           new TypeToken<Map<String, List<Region>>>() {}.getType());
     }
   }
 
   @Override
   protected GsonBuilder newGsonBuilder(HttpServletRequest req) throws IOException {
-    return super.newGsonBuilder(req).registerTypeAdapter(Region.class,
-        new RegionAdapter(new DateFormatter(getAccess(req), Format.ISO)));
+    return super.newGsonBuilder(req)
+        .registerTypeAdapter(
+            Region.class, new RegionAdapter(new DateFormatter(getAccess(req), Format.ISO)));
   }
 
   private static class RegionResult {
@@ -139,8 +154,9 @@
     }
   }
 
-  private RegionResult getRegions(GitilesView view, GitilesAccess access, Repository repo,
-      RevWalk rw, HttpServletResponse res) throws IOException {
+  private RegionResult getRegions(
+      GitilesView view, GitilesAccess access, Repository repo, RevWalk rw, HttpServletResponse res)
+      throws IOException {
     RevCommit currCommit = rw.parseCommit(view.getRevision().getId());
     ObjectId currCommitBlobId = resolveBlob(view, rw, currCommit);
     if (currCommitBlobId == null) {
@@ -152,13 +168,15 @@
     ObjectId lastCommitBlobId = resolveBlob(view, rw, lastCommit);
 
     if (!Objects.equals(currCommitBlobId, lastCommitBlobId)) {
-      log.warn(String.format("Blob %s in last modified commit %s for repo %s starting from %s"
-          + " does not match original blob %s",
-          ObjectId.toString(lastCommitBlobId),
-          ObjectId.toString(lastCommit),
-          access.getRepositoryName(),
-          ObjectId.toString(currCommit),
-          ObjectId.toString(currCommitBlobId)));
+      log.warn(
+          String.format(
+              "Blob %s in last modified commit %s for repo %s starting from %s"
+                  + " does not match original blob %s",
+              ObjectId.toString(lastCommitBlobId),
+              ObjectId.toString(lastCommit),
+              access.getRepositoryName(),
+              ObjectId.toString(currCommit),
+              ObjectId.toString(currCommitBlobId)));
       lastCommitBlobId = currCommitBlobId;
       lastCommit = currCommit;
     }
@@ -191,6 +209,7 @@
   private static final ImmutableList<String> CLASSES =
       ImmutableList.of("Blame-region--bg1", "Blame-region--bg2");
   private static final ImmutableList<SoyMapData> NULLS;
+
   static {
     ImmutableList.Builder<SoyMapData> nulls = ImmutableList.builder();
     for (String clazz : CLASSES) {
@@ -199,8 +218,9 @@
     NULLS = nulls.build();
   }
 
-  private static SoyListData toSoyData(GitilesView view, ObjectReader reader,
-      List<Region> regions, DateFormatter df) throws IOException {
+  private static SoyListData toSoyData(
+      GitilesView view, ObjectReader reader, List<Region> regions, DateFormatter df)
+      throws IOException {
     Map<ObjectId, String> abbrevShas = Maps.newHashMap();
     SoyListData result = new SoyListData();
 
@@ -225,18 +245,24 @@
           blameParent = "^";
           blameText = "blame^";
         }
-        e.put("blameUrl", GitilesView.blame().copyFrom(view)
-            .setRevision(r.getSourceCommit().name() + blameParent)
-            .setPathPart(r.getSourcePath())
-            .toUrl());
+        e.put(
+            "blameUrl",
+            GitilesView.blame()
+                .copyFrom(view)
+                .setRevision(r.getSourceCommit().name() + blameParent)
+                .setPathPart(r.getSourcePath())
+                .toUrl());
         e.put("blameText", blameText);
-        e.put("commitUrl", GitilesView.revision().copyFrom(view)
-            .setRevision(r.getSourceCommit().name())
-            .toUrl());
-        e.put("diffUrl", GitilesView.diff().copyFrom(view)
-            .setRevision(r.getSourceCommit().name())
-            .setPathPart(r.getSourcePath())
-            .toUrl());
+        e.put(
+            "commitUrl",
+            GitilesView.revision().copyFrom(view).setRevision(r.getSourceCommit().name()).toUrl());
+        e.put(
+            "diffUrl",
+            GitilesView.diff()
+                .copyFrom(view)
+                .setRevision(r.getSourceCommit().name())
+                .setPathPart(r.getSourcePath())
+                .toUrl());
         e.put("author", CommitSoyData.toSoyData(r.getSourceAuthor(), df));
         e.put("class", CLASSES.get(c));
         result.add(e);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java
index a9710ae..eed270f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/RegionAdapter.java
@@ -35,15 +35,23 @@
   @Override
   public void write(JsonWriter out, Region value) throws IOException {
     out.beginObject()
-        .name("start").value(value.getStart() + 1)
-        .name("count").value(value.getCount())
-        .name("path").value(value.getSourcePath())
-        .name("commit").value(ObjectId.toString(value.getSourceCommit()))
-        .name("author").beginObject()
+        .name("start")
+        .value(value.getStart() + 1)
+        .name("count")
+        .value(value.getCount())
+        .name("path")
+        .value(value.getSourcePath())
+        .name("commit")
+        .value(ObjectId.toString(value.getSourceCommit()))
+        .name("author")
+        .beginObject()
         // TODO(dborowitz): Use an adapter from CommitJsonData instead.
-        .name("name").value(value.getSourceAuthor().getName())
-        .name("email").value(value.getSourceAuthor().getEmailAddress())
-        .name("time").value(df.format(value.getSourceAuthor()))
+        .name("name")
+        .value(value.getSourceAuthor().getName())
+        .name("email")
+        .value(value.getSourceAuthor().getEmailAddress())
+        .name("time")
+        .value(df.format(value.getSourceAuthor()))
         .endObject()
         .endObject();
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java
index 7c31b0f..502c39f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ColsNode.java
@@ -57,10 +57,8 @@
     int idx = 0;
     Column col = null;
     for (Node n : children) {
-      if (col == null
-          || n instanceof HeaderNode
-          || n instanceof DivNode) {
-        for (;;) {
+      if (col == null || n instanceof HeaderNode || n instanceof DivNode) {
+        for (; ; ) {
           if (idx < columns.size()) {
             col = columns.get(idx);
           } else {
@@ -78,9 +76,7 @@
   }
 
   private static <T> ArrayList<T> copyOf(List<T> in) {
-    return in != null && !in.isEmpty()
-        ? new ArrayList<>(in)
-        : new ArrayList<T>();
+    return in != null && !in.isEmpty() ? new ArrayList<>(in) : new ArrayList<T>();
   }
 
   @SuppressWarnings("unchecked")
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java
index f3389de..9bdb926 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DivNode.java
@@ -25,9 +25,10 @@
   private final String style;
 
   DivNode(String style, List<Node> list) {
-    super(list.size() == 1 && list.get(0) instanceof ParaNode
-        ? ((ParaNode) list.get(0)).getChildren()
-        : list);
+    super(
+        list.size() == 1 && list.get(0) instanceof ParaNode
+            ? ((ParaNode) list.get(0)).getChildren()
+            : list);
     this.style = style;
   }
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
index 59b8b5c..4b774a5 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/DocServlet.java
@@ -76,8 +76,7 @@
   }
 
   @Override
-  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res)
-      throws IOException {
+  protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
     Config cfg = getAccess(req).getConfig();
     if (!cfg.getBoolean("markdown", "render", true)) {
       res.setStatus(SC_NOT_FOUND);
@@ -110,13 +109,14 @@
         return;
       }
 
-      Duration parseTimeout = ConfigUtil.getDuration(cfg, "markdown", null,
-          "parseTimeout", Duration.standardSeconds(2));
+      Duration parseTimeout =
+          ConfigUtil.getDuration(
+              cfg, "markdown", null, "parseTimeout", Duration.standardSeconds(2));
       view = view.toBuilder().setPathPart(srcmd.path).build();
       int inputLimit = cfg.getInt("markdown", "inputLimit", 5 << 20);
-      RootNode doc = GitilesMarkdown.parseFile(
-          parseTimeout, view, srcmd.path,
-          srcmd.read(rw.getObjectReader(), inputLimit));
+      RootNode doc =
+          GitilesMarkdown.parseFile(
+              parseTimeout, view, srcmd.path, srcmd.read(rw.getObjectReader(), inputLimit));
       if (doc == null) {
         res.sendRedirect(GitilesView.show().copyFrom(view).toUrl());
         return;
@@ -124,9 +124,9 @@
 
       RootNode nav = null;
       if (navmd != null) {
-        nav = GitilesMarkdown.parseFile(
-            parseTimeout, view, navmd.path,
-            navmd.read(rw.getObjectReader(), inputLimit));
+        nav =
+            GitilesMarkdown.parseFile(
+                parseTimeout, view, navmd.path, navmd.read(rw.getObjectReader(), inputLimit));
         if (nav == null) {
           res.setStatus(SC_INTERNAL_SERVER_ERROR);
           return;
@@ -136,8 +136,7 @@
       int imageLimit = cfg.getInt("markdown", "imageLimit", 256 << 10);
       ImageLoader img = null;
       if (imageLimit > 0) {
-        img = new ImageLoader(rw.getObjectReader(), view,
-            root, srcmd.path, imageLimit);
+        img = new ImageLoader(rw.getObjectReader(), view, root, srcmd.path, imageLimit);
       }
 
       res.setHeader(HttpHeaders.ETAG, curEtag);
@@ -171,23 +170,25 @@
     res.setHeader(HttpHeaders.CACHE_CONTROL, "private, max-age=0, must-revalidate");
   }
 
-  private void showDoc(HttpServletRequest req, HttpServletResponse res,
-      GitilesView view, Config cfg, ImageLoader img,
-      RootNode nav, RootNode doc) throws IOException {
+  private void showDoc(
+      HttpServletRequest req,
+      HttpServletResponse res,
+      GitilesView view,
+      Config cfg,
+      ImageLoader img,
+      RootNode nav,
+      RootNode doc)
+      throws IOException {
     Map<String, Object> data = new HashMap<>();
     data.putAll(Navbar.bannerSoyData(view, img, nav));
-    data.put("pageTitle", MoreObjects.firstNonNull(
-        MarkdownUtil.getTitle(doc),
-        view.getPathPart()));
+    data.put("pageTitle", MoreObjects.firstNonNull(MarkdownUtil.getTitle(doc), view.getPathPart()));
     if (view.getType() != GitilesView.Type.ROOTED_DOC) {
       data.put("sourceUrl", GitilesView.show().copyFrom(view).toUrl());
       data.put("logUrl", GitilesView.log().copyFrom(view).toUrl());
       data.put("blameUrl", GitilesView.blame().copyFrom(view).toUrl());
     }
     data.put("navbarHtml", new MarkdownToHtml(view, cfg).toSoyHtml(nav));
-    data.put("bodyHtml", new MarkdownToHtml(view, cfg)
-        .setImageLoader(img)
-        .toSoyHtml(doc));
+    data.put("bodyHtml", new MarkdownToHtml(view, cfg).setImageLoader(img).toSoyHtml(doc));
 
     String analyticsId = cfg.getString("google", null, "analyticsId");
     if (!Strings.isNullOrEmpty(analyticsId)) {
@@ -237,8 +238,7 @@
   private static boolean findIndexFile(TreeWalk tw) throws IOException {
     tw.enterSubtree();
     while (tw.next()) {
-      if ((tw.getRawMode(0) & TYPE_MASK) == TYPE_FILE
-          && INDEX_MD.equals(tw.getNameString())) {
+      if ((tw.getRawMode(0) & TYPE_MASK) == TYPE_FILE && INDEX_MD.equals(tw.getNameString())) {
         return true;
       }
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java
index 91168b8..c417932 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesMarkdown.java
@@ -39,8 +39,7 @@
 import java.util.List;
 
 /** Parses Gitiles extensions to markdown. */
-public class GitilesMarkdown extends Parser
-    implements BlockPluginParser, InlinePluginParser {
+public class GitilesMarkdown extends Parser implements BlockPluginParser, InlinePluginParser {
   private static final Logger log = LoggerFactory.getLogger(MarkdownUtil.class);
 
   // SUPPRESS_ALL_HTML is enabled to permit hosting arbitrary user content
@@ -51,8 +50,8 @@
   // this impacting the rendered formatting.
   private static final int MD_OPTIONS = (ALL | SUPPRESS_ALL_HTML) & ~(HARDWRAPS);
 
-  public static RootNode parseFile(Duration parseTimeout, GitilesView view,
-      String path, String md) {
+  public static RootNode parseFile(
+      Duration parseTimeout, GitilesView view, String path, String md) {
     if (md == null) {
       return null;
     }
@@ -65,7 +64,8 @@
         throw e;
       }
     } catch (ParsingTimeoutException e) {
-      log.error("timeout {} ms rendering {}/{} at {}",
+      log.error(
+          "timeout {} ms rendering {}/{} at {}",
           parseTimeout.getMillis(),
           view.getRepositoryName(),
           path,
@@ -75,9 +75,8 @@
   }
 
   private static PegDownProcessor newParser(Duration parseDeadline) {
-    PegDownPlugins plugins = new PegDownPlugins.Builder()
-        .withPlugin(GitilesMarkdown.class, parseDeadline)
-        .build();
+    PegDownPlugins plugins =
+        new PegDownPlugins.Builder().withPlugin(GitilesMarkdown.class, parseDeadline).build();
     return new PegDownProcessor(MD_OPTIONS, parseDeadline.getMillis(), plugins);
   }
 
@@ -92,32 +91,28 @@
   @Override
   public Rule[] blockPluginRules() {
     return new Rule[] {
-        cols(),
-        hr(),
-        iframe(),
-        note(),
-        toc(),
+      cols(), hr(), iframe(), note(), toc(),
     };
   }
 
   @Override
   public Rule[] inlinePluginRules() {
-    return new Rule[]{
-        namedAnchorHtmlStyle(),
-        namedAnchorMarkdownExtensionStyle(),
+    return new Rule[] {
+      namedAnchorHtmlStyle(), namedAnchorMarkdownExtensionStyle(),
     };
   }
 
   public Rule toc() {
-    return NodeSequence(
-        string("[TOC]"),
-        push(new TocNode()));
+    return NodeSequence(string("[TOC]"), push(new TocNode()));
   }
 
   public Rule hr() {
     // GitHub flavor markdown recognizes "--" as a rule.
     return NodeSequence(
-        NonindentSpace(), string("--"), zeroOrMore('-'), Newline(),
+        NonindentSpace(),
+        string("--"),
+        zeroOrMore('-'),
+        Newline(),
         oneOrMore(BlankLine()),
         push(new SimpleNode(SimpleNode.Type.HRule)));
   }
@@ -125,19 +120,21 @@
   public Rule namedAnchorHtmlStyle() {
     StringBuilderVar name = new StringBuilderVar();
     return NodeSequence(
-        Sp(), string("<a"),
+        Sp(),
+        string("<a"),
         Spn1(),
         sequence(string("name="), attribute(name)),
-        Spn1(), '>',
-        Spn1(), string("</a>"),
+        Spn1(),
+        '>',
+        Spn1(),
+        string("</a>"),
         push(new NamedAnchorNode(name.getString())));
   }
 
   public Rule namedAnchorMarkdownExtensionStyle() {
     StringBuilderVar name = new StringBuilderVar();
     return NodeSequence(
-        Sp(), string("{#"), anchorId(name), '}',
-        push(new NamedAnchorNode(name.getString())));
+        Sp(), string("{#"), anchorId(name), '}', push(new NamedAnchorNode(name.getString())));
   }
 
   public Rule anchorId(StringBuilderVar name) {
@@ -152,35 +149,36 @@
     return NodeSequence(
         string("<iframe"),
         oneOrMore(
-          sequence(
-            Spn1(),
-            firstOf(
-              sequence(string("src="), attribute(src)),
-              sequence(string("height="), attribute(h)),
-              sequence(string("width="), attribute(w)),
-              sequence(string("frameborder="), attribute(b))
-            ))),
-        Spn1(), '>',
-        Spn1(), string("</iframe>"),
-        push(new IframeNode(src.getString(),
-            h.getString(), w.getString(),
-            b.getString())));
+            sequence(
+                Spn1(),
+                firstOf(
+                    sequence(string("src="), attribute(src)),
+                    sequence(string("height="), attribute(h)),
+                    sequence(string("width="), attribute(w)),
+                    sequence(string("frameborder="), attribute(b))))),
+        Spn1(),
+        '>',
+        Spn1(),
+        string("</iframe>"),
+        push(new IframeNode(src.getString(), h.getString(), w.getString(), b.getString())));
   }
 
   public Rule attribute(StringBuilderVar var) {
     return firstOf(
-      sequence('"', zeroOrMore(testNot('"'), ANY), var.append(match()), '"'),
-      sequence('\'', zeroOrMore(testNot('\''), ANY), var.append(match()), '\''));
+        sequence('"', zeroOrMore(testNot('"'), ANY), var.append(match()), '"'),
+        sequence('\'', zeroOrMore(testNot('\''), ANY), var.append(match()), '\''));
   }
 
   public Rule note() {
     StringBuilderVar body = new StringBuilderVar();
     return NodeSequence(
-        string("***"), Sp(), typeOfNote(), Newline(),
-        oneOrMore(
-          testNot(string("***"), Newline()),
-          Line(body)),
-        string("***"), Newline(),
+        string("***"),
+        Sp(),
+        typeOfNote(),
+        Newline(),
+        oneOrMore(testNot(string("***"), Newline()), Line(body)),
+        string("***"),
+        Newline(),
         push(new DivNode(popAsString(), parse(body))));
   }
 
@@ -195,11 +193,12 @@
   public Rule cols() {
     StringBuilderVar body = new StringBuilderVar();
     return NodeSequence(
-        colsTag(), columnWidths(), Newline(),
-        oneOrMore(
-            testNot(colsTag(), Newline()),
-            Line(body)),
-        colsTag(), Newline(),
+        colsTag(),
+        columnWidths(),
+        Newline(),
+        oneOrMore(testNot(colsTag(), Newline()), Line(body)),
+        colsTag(),
+        Newline(),
         push(new ColsNode((List<ColsNode.Column>) pop(), parse(body))));
   }
 
@@ -210,19 +209,17 @@
   public Rule columnWidths() {
     ListVar widths = new ListVar();
     return sequence(
-      zeroOrMore(
-        sequence(
-          Sp(), optional(ch(',')), Sp(),
-          columnWidth(widths))),
-      push(widths.get()));
+        zeroOrMore(sequence(Sp(), optional(ch(',')), Sp(), columnWidth(widths))),
+        push(widths.get()));
   }
 
   public Rule columnWidth(ListVar widths) {
     StringBuilderVar s = new StringBuilderVar();
     return sequence(
-      optional(sequence(ch(':'), s.append(':'))),
-      oneOrMore(digit()), s.append(match()),
-      widths.get().add(parse(s.get().toString())));
+        optional(sequence(ch(':'), s.append(':'))),
+        oneOrMore(digit()),
+        s.append(match()),
+        widths.get().add(parse(s.get().toString())));
   }
 
   static ColsNode.Column parse(String spec) {
@@ -248,12 +245,13 @@
   public static class ListVar extends Var<List<Object>> {
     @SuppressWarnings({"rawtypes", "unchecked"})
     public ListVar() {
-      super(new Factory() {
-        @Override
-        public Object create() {
-          return new ArrayList<>();
-        }
-      });
+      super(
+          new Factory() {
+            @Override
+            public Object create() {
+              return new ArrayList<>();
+            }
+          });
     }
   }
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java
index 11c5e2f..b381616 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/ImageLoader.java
@@ -41,8 +41,8 @@
   private final String path;
   private final int imageLimit;
 
-  public ImageLoader(ObjectReader reader, GitilesView view,
-      RevTree root, String path, int maxImageSize) {
+  public ImageLoader(
+      ObjectReader reader, GitilesView view, RevTree root, String path, int maxImageSize) {
     this.reader = reader;
     this.view = view;
     this.root = root;
@@ -97,17 +97,20 @@
     } catch (LargeObjectException.ExceedsLimit e) {
       return FilterImageDataUri.INSTANCE.getInnocuousOutput();
     } catch (IOException e) {
-      log.error(String.format("cannot read repo %s image %s from %s",
-          view.getRepositoryName(), path, root.name()), e);
+      log.error(
+          String.format(
+              "cannot read repo %s image %s from %s", view.getRepositoryName(), path, root.name()),
+          e);
       return FilterImageDataUri.INSTANCE.getInnocuousOutput();
     }
   }
 
-  private static final ImmutableMap<String, String> TYPES = ImmutableMap.of(
-      "png", "image/png",
-      "gif", "image/gif",
-      "jpg", "image/jpeg",
-      "jpeg", "image/jpeg");
+  private static final ImmutableMap<String, String> TYPES =
+      ImmutableMap.of(
+          "png", "image/png",
+          "gif", "image/gif",
+          "jpg", "image/jpeg",
+          "jpeg", "image/jpeg");
 
   private static String getMimeType(String path) {
     int d = path.lastIndexOf('.');
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
index eb602ea..7d0d4e1 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownToHtml.java
@@ -188,7 +188,8 @@
           .attribute("class", "h")
           .attribute("name", id)
           .attribute("href", "#" + id)
-          .open("span").close("span")
+          .open("span")
+          .close("span")
           .close("a");
     }
     visitChildren(node);
@@ -322,33 +323,25 @@
   @Override
   public void visit(AutoLinkNode node) {
     String url = node.getText();
-    html.open("a").attribute("href", href(url))
-        .appendAndEscape(url)
-        .close("a");
+    html.open("a").attribute("href", href(url)).appendAndEscape(url).close("a");
   }
 
   @Override
   public void visit(MailLinkNode node) {
     String addr = node.getText();
-    html.open("a").attribute("href", "mailto:" + addr)
-        .appendAndEscape(addr)
-        .close("a");
+    html.open("a").attribute("href", "mailto:" + addr).appendAndEscape(addr).close("a");
   }
 
   @Override
   public void visit(WikiLinkNode node) {
     String text = node.getText();
     String path = text.replace(' ', '-') + ".md";
-    html.open("a").attribute("href", href(path))
-        .appendAndEscape(text)
-        .close("a");
+    html.open("a").attribute("href", href(path)).appendAndEscape(text).close("a");
   }
 
   @Override
   public void visit(ExpLinkNode node) {
-    html.open("a")
-        .attribute("href", href(node.url))
-        .attribute("title", node.title);
+    html.open("a").attribute("href", href(node.url)).attribute("title", node.title);
     visitChildren(node);
     html.close("a");
   }
@@ -357,9 +350,7 @@
   public void visit(RefLinkNode node) {
     ReferenceNode ref = references.get(node.referenceKey, getInnerText(node));
     if (ref != null) {
-      html.open("a")
-          .attribute("href", href(ref.getUrl()))
-          .attribute("title", ref.getTitle());
+      html.open("a").attribute("href", href(ref.getUrl())).attribute("title", ref.getTitle());
       visitChildren(node);
       html.close("a");
     } else {
@@ -411,9 +402,7 @@
       return FilterNormalizeUri.INSTANCE.getInnocuousOutput();
     }
 
-    GitilesView.Builder dest = url.endsWith(".md")
-        ? GitilesView.doc()
-        : GitilesView.show();
+    GitilesView.Builder dest = url.endsWith(".md") ? GitilesView.doc() : GitilesView.show();
     return dest.copyFrom(view).setPathPart(dir + url).build().toUrl();
   }
 
@@ -437,15 +426,13 @@
       // If reference is missing, insert a broken image.
       url = FilterImageDataUri.INSTANCE.getInnocuousOutput();
     }
-    html.open("img")
-        .attribute("src", url)
-        .attribute("title", title)
-        .attribute("alt", alt);
+    html.open("img").attribute("src", url).attribute("title", title).attribute("alt", alt);
   }
 
   private String resolveImageUrl(String url) {
     if (imageLoader == null
-        || url.startsWith("https://") || url.startsWith("http://")
+        || url.startsWith("https://")
+        || url.startsWith("http://")
         || url.startsWith("data:")) {
       return url;
     }
@@ -492,8 +479,7 @@
   public void visit(TableCellNode node) {
     mustBeInsideTable(node);
     String tag = table.inHeader ? "th" : "td";
-    html.open(tag)
-        .attribute("align", table.getAlign());
+    html.open(tag).attribute("align", table.getAlign());
     if (node.getColSpan() > 1) {
       html.attribute("colspan", Integer.toString(node.getColSpan()));
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java
index e6a0f00..5130216 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownUtil.java
@@ -23,9 +23,7 @@
 class MarkdownUtil {
   /** Check if anchor URL is like {@code /top.md}. */
   static boolean isAbsolutePathToMarkdown(String url) {
-    return url.length() >= 5
-        && url.charAt(0) == '/' && url.charAt(1) != '/'
-        && url.endsWith(".md");
+    return url.length() >= 5 && url.charAt(0) == '/' && url.charAt(1) != '/' && url.endsWith(".md");
   }
 
   /** Combine child nodes as string; this must be escaped for HTML. */
@@ -66,6 +64,5 @@
     return null;
   }
 
-  private MarkdownUtil() {
-  }
+  private MarkdownUtil() {}
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java
index 548a252..aa8e0eb 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Navbar.java
@@ -29,9 +29,7 @@
 import java.util.Map;
 
 class Navbar {
-  static Map<String, Object> bannerSoyData(
-      GitilesView view, ImageLoader img,
-      RootNode nav) {
+  static Map<String, Object> bannerSoyData(GitilesView view, ImageLoader img, RootNode nav) {
     Map<String, Object> data = new HashMap<>();
     data.put("siteTitle", null);
     data.put("logoUrl", null);
@@ -41,7 +39,7 @@
       return data;
     }
 
-    for (Iterator<Node> i = nav.getChildren().iterator(); i.hasNext();) {
+    for (Iterator<Node> i = nav.getChildren().iterator(); i.hasNext(); ) {
       Node n = i.next();
       if (n instanceof HeaderNode) {
         HeaderNode h = (HeaderNode) n;
@@ -78,6 +76,5 @@
     return data;
   }
 
-  private Navbar() {
-  }
+  private Navbar() {}
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java
index 80276d2..396a86b 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TableState.java
@@ -47,13 +47,12 @@
       case Center:
         return "center";
       default:
-        throw new IllegalStateException(String.format(
-            "unsupported alignment %s on column %d",
-            c.getAlignment(), pos));
+        throw new IllegalStateException(
+            String.format("unsupported alignment %s on column %d", c.getAlignment(), pos));
     }
   }
 
   void done(TableCellNode cell) {
     column += cell.getColSpan();
   }
-}
\ No newline at end of file
+}
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java
index ed5315c..cb82f54 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/TocFormatter.java
@@ -73,9 +73,12 @@
     html.open("div")
         .attribute("class", "toc")
         .attribute("role", "navigation")
-      .open("h2").appendAndEscape("Contents").close("h2")
-      .open("div").attribute("class", "toc-aux")
-      .open("ul");
+        .open("h2")
+        .appendAndEscape("Contents")
+        .close("h2")
+        .open("div")
+        .attribute("class", "toc-aux")
+        .open("ul");
     for (HeaderNode header : outline) {
       outline(header);
     }
@@ -106,15 +109,14 @@
     }
 
     html.open("li")
-      .open("a").attribute("href", "#" + id)
-      .appendAndEscape(MarkdownUtil.getInnerText(h))
-      .close("a")
-      .close("li");
+        .open("a")
+        .attribute("href", "#" + id)
+        .appendAndEscape(MarkdownUtil.getInnerText(h))
+        .close("a")
+        .close("li");
   }
 
-  private void scan(Node node,
-      Multimap<String, TocEntry> entries,
-      Deque<HeaderNode> stack) {
+  private void scan(Node node, Multimap<String, TocEntry> entries, Deque<HeaderNode> stack) {
     if (node instanceof HeaderNode) {
       scan((HeaderNode) node, entries, stack);
     } else {
@@ -124,9 +126,8 @@
     }
   }
 
-  private void scan(HeaderNode header,
-      Multimap<String, TocEntry> entries,
-      Deque<HeaderNode> stack) {
+  private void scan(
+      HeaderNode header, Multimap<String, TocEntry> entries, Deque<HeaderNode> stack) {
     if (header.getLevel() == 1) {
       countH1++;
     }
@@ -227,14 +228,10 @@
   private static String idFromTitle(String title) {
     StringBuilder b = new StringBuilder(title.length());
     for (char c : StringUtils.stripAccents(title).toCharArray()) {
-      if (('a' <= c && c <= 'z')
-          || ('A' <= c && c <= 'Z')
-          || ('0' <= c && c <= '9')) {
+      if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9')) {
         b.append(c);
       } else if (c == ' ') {
-        if (b.length() > 0
-            && b.charAt(b.length() - 1) != '-'
-            && b.charAt(b.length() - 1) != '_') {
+        if (b.length() > 0 && b.charAt(b.length() - 1) != '-' && b.charAt(b.length() - 1) != '_') {
           b.append('-');
         }
       } else if (b.length() > 0
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java
index 5562be2..6c9f2f6 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/Visitor.java
@@ -16,9 +16,14 @@
 
 public interface Visitor extends org.pegdown.ast.Visitor {
   void visit(ColsNode node);
+
   void visit(ColsNode.Column node);
+
   void visit(DivNode node);
+
   void visit(IframeNode node);
+
   void visit(TocNode node);
+
   void visit(NamedAnchorNode node);
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java
index 5b74c35..89611da 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/html/HtmlBuilder.java
@@ -41,20 +41,46 @@
  * {@code https://}, and for image src {@code data:image/*;base64,...}.
  */
 public final class HtmlBuilder {
-  private static final ImmutableSet<String> ALLOWED_TAGS = ImmutableSet.of(
-      "h1", "h2", "h3", "h4", "h5", "h6",
-      "a", "div", "img", "p", "blockquote", "pre",
-      "ol", "ul", "li", "dl", "dd", "dt",
-      "del", "em", "strong", "code", "br", "hr",
-      "table", "thead", "tbody", "caption", "tr", "th", "td",
-      "iframe", "span"
-  );
+  private static final ImmutableSet<String> ALLOWED_TAGS =
+      ImmutableSet.of(
+          "h1",
+          "h2",
+          "h3",
+          "h4",
+          "h5",
+          "h6",
+          "a",
+          "div",
+          "img",
+          "p",
+          "blockquote",
+          "pre",
+          "ol",
+          "ul",
+          "li",
+          "dl",
+          "dd",
+          "dt",
+          "del",
+          "em",
+          "strong",
+          "code",
+          "br",
+          "hr",
+          "table",
+          "thead",
+          "tbody",
+          "caption",
+          "tr",
+          "th",
+          "td",
+          "iframe",
+          "span");
 
-  private static final ImmutableSet<String> ALLOWED_ATTRIBUTES = ImmutableSet.of(
-      "id", "class", "role");
+  private static final ImmutableSet<String> ALLOWED_ATTRIBUTES =
+      ImmutableSet.of("id", "class", "role");
 
-  private static final ImmutableSet<String> SELF_CLOSING_TAGS = ImmutableSet.of(
-      "img", "br", "hr");
+  private static final ImmutableSet<String> SELF_CLOSING_TAGS = ImmutableSet.of("img", "br", "hr");
 
   private static final FilterNormalizeUri URI = FilterNormalizeUri.INSTANCE;
   private static final FilterImageDataUri IMAGE_DATA = FilterImageDataUri.INSTANCE;
@@ -64,9 +90,7 @@
   }
 
   public static boolean isValidHttpUri(String val) {
-    return (val.startsWith("https://")
-        || val.startsWith("http://")
-        || val.startsWith("//"))
+    return (val.startsWith("https://") || val.startsWith("http://") || val.startsWith("//"))
         && URI.getValueFilter().matcher(val).find();
   }
 
@@ -163,8 +187,7 @@
   /** Close an open tag with {@code </tag>} */
   public HtmlBuilder close(String tag) {
     checkArgument(
-        ALLOWED_TAGS.contains(tag) && !SELF_CLOSING_TAGS.contains(tag),
-        "invalid HTML tag %s", tag);
+        ALLOWED_TAGS.contains(tag) && !SELF_CLOSING_TAGS.contains(tag), "invalid HTML tag %s", tag);
 
     finishActiveTag();
     htmlBuf.append("</").append(tag).append('>');
@@ -194,8 +217,6 @@
   /** Bless the current content as HTML. */
   public SanitizedContent toSoy() {
     finishActiveTag();
-    return UnsafeSanitizedContentOrdainer.ordainAsSafe(
-        htmlBuf.toString(),
-        ContentKind.HTML);
+    return UnsafeSanitizedContentOrdainer.ordainAsSafe(htmlBuf.toString(), ContentKind.HTML);
   }
 }