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 3985b92..4ddfec1 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -340,8 +340,8 @@
   }
 
   protected void setCacheHeaders(HttpServletRequest req, HttpServletResponse res) {
-    if (Strings.nullToEmpty(req.getHeader(HttpHeaders.PRAGMA)).equalsIgnoreCase("no-cache") ||
-        Strings.nullToEmpty(req.getHeader(HttpHeaders.CACHE_CONTROL))
+    if (Strings.nullToEmpty(req.getHeader(HttpHeaders.PRAGMA)).equalsIgnoreCase("no-cache")
+        || Strings.nullToEmpty(req.getHeader(HttpHeaders.CACHE_CONTROL))
             .equalsIgnoreCase("no-cache")) {
       setNotCacheable(res);
       return;
@@ -350,16 +350,16 @@
     GitilesView view = ViewFilter.getView(req);
     Revision rev = view.getRevision();
     if (rev.nameIsId()) {
-      res.setHeader(HttpHeaders.CACHE_CONTROL,
-          "private, max-age=7200, stale-while-revalidate=604800");
+      res.setHeader(
+          HttpHeaders.CACHE_CONTROL, "private, max-age=7200, stale-while-revalidate=604800");
       return;
     }
 
     setNotCacheable(res);
   }
 
-  protected void setApiHeaders(
-       HttpServletRequest req, HttpServletResponse res, String contentType) throws IOException {
+  protected void setApiHeaders(HttpServletRequest req, HttpServletResponse res, String contentType)
+      throws IOException {
     if (!Strings.isNullOrEmpty(contentType)) {
       res.setContentType(contentType);
     }
@@ -390,8 +390,8 @@
     setApiHeaders(req, res, type.getMimeType());
   }
 
-  protected void setDownloadHeaders(HttpServletRequest req, HttpServletResponse res,
-      String filename, String contentType) {
+  protected void setDownloadHeaders(
+      HttpServletRequest req, HttpServletResponse res, String filename, String contentType) {
     res.setContentType(contentType);
     res.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename);
     setCacheHeaders(req, res);
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 c43c7a8..297350e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
@@ -19,7 +19,6 @@
 import com.google.common.io.Resources;
 import com.google.template.soy.SoyFileSet;
 import com.google.template.soy.tofu.SoyTofu;
-
 import java.net.URL;
 import java.util.Map;
 
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 40eeb83..666d5a2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
@@ -35,7 +35,8 @@
 
 /** Formats a unified format patch as UTF-8 encoded HTML. */
 final class HtmlDiffFormatter extends DiffFormatter {
-  private static final byte[] DIFF_BEGIN = "<pre class=\"u-pre u-monospace Diff-unified\">".getBytes(UTF_8);
+  private static final byte[] DIFF_BEGIN =
+      "<pre class=\"u-pre u-monospace Diff-unified\">".getBytes(UTF_8);
   private static final byte[] DIFF_END = "</pre>".getBytes(UTF_8);
 
   private static final byte[] HUNK_BEGIN = "<span class=\"Diff-hunk\">".getBytes(UTF_8);
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 6ef9e05..493e1c5 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
@@ -106,8 +106,7 @@
     String baseGerritUrl = urls.getBaseGerritUrl(req);
 
     if (baseGerritUrl != null) {
-      CommentLinkInfo changeIds =
-          new CommentLinkInfo(CHANGE_ID_PATTERN, baseGerritUrl + "#/q/$0");
+      CommentLinkInfo changeIds = new CommentLinkInfo(CHANGE_ID_PATTERN, baseGerritUrl + "#/q/$0");
       operationalCommentLinks.add(changeIds);
     }
 
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 55ea975..b4a8e03 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -212,7 +212,7 @@
 
   private static Optional<ObjectId> getStart(
       ListMultimap<String, String> params, ObjectReader reader)
-          throws IOException, InvalidStartValueException {
+      throws IOException, InvalidStartValueException {
     List<String> values = params.get(START_PARAM);
     switch (values.size()) {
       case 0:
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 31e182d..0ecb875 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -261,10 +261,7 @@
               req,
               res,
               FileJsonData.toJsonData(
-                  wr.id,
-                  view.getRepositoryName(),
-                  view.getRevision().getName(),
-                  wr.path),
+                  wr.id, view.getRepositoryName(), view.getRevision().getName(), wr.path),
               FileJsonData.File.class);
           break;
         case TREE:
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesHtmlExtension.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesHtmlExtension.java
index 435bb16..834f5fd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesHtmlExtension.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/GitilesHtmlExtension.java
@@ -36,10 +36,10 @@
  * rendering:
  *
  * <ul>
- * <li>{@link HardLineBreak}
- * <li>{@link ThematicBreak}
- * <li>{@link NamedAnchor}
- * <li>{@link IframeBlock}
+ *   <li>{@link HardLineBreak}
+ *   <li>{@link ThematicBreak}
+ *   <li>{@link NamedAnchor}
+ *   <li>{@link IframeBlock}
  * </ul>
  */
 public class GitilesHtmlExtension implements ParserExtension {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ConfigUtilTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ConfigUtilTest.java
index b7735c5..a9d58bc 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ConfigUtilTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ConfigUtilTest.java
@@ -42,8 +42,7 @@
       getDuration(config, "core", "dht", "timeout", def);
       fail("expected IllegalArgumentException");
     } catch (IllegalArgumentException e) {
-      assertThat(e).hasMessageThat().isEqualTo(
-          "Invalid time unit value: core.dht.timeout=5.2 sec");
+      assertThat(e).hasMessageThat().isEqualTo("Invalid time unit value: core.dht.timeout=5.2 sec");
     }
 
     config.setString("core", "dht", "timeout", "1 min");
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/GitwebRedirectFilterTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/GitwebRedirectFilterTest.java
index 879815f..d9863f1 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/GitwebRedirectFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/GitwebRedirectFilterTest.java
@@ -41,9 +41,7 @@
 
   @Before
   public void setUp() throws Exception {
-    repo =
-        new TestRepository<>(
-            new InMemoryRepository(new DfsRepositoryDescription("test")));
+    repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription("test")));
     servlet = TestGitilesServlet.create(repo);
   }
 
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
index e890f61..d8332d1 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
@@ -42,9 +42,7 @@
   @Override
   @Before
   public void setUp() throws Exception {
-    repo =
-        new TestRepository<>(
-            new InMemoryRepository(new DfsRepositoryDescription(NAME)));
+    repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription(NAME)));
     servlet = TestGitilesServlet.create(repo);
   }
 
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/PaginatorTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/PaginatorTest.java
index 7f8961d..f03a40b 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/PaginatorTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/PaginatorTest.java
@@ -39,9 +39,7 @@
 
   @Before
   public void setUp() throws Exception {
-    repo =
-        new TestRepository<>(
-            new InMemoryRepository(new DfsRepositoryDescription("test")));
+    repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription("test")));
     walk = new RevWalk(repo.getRepository());
   }
 
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/PathServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/PathServletTest.java
index 7d6f737..c0f98b1 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/PathServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/PathServletTest.java
@@ -358,14 +358,12 @@
   @Test
   public void rejectOrigin() throws Exception {
     repo.branch("master").commit().add("foo", "contents").create();
-    FakeHttpServletResponse res = buildResponse(
-        "/repo/+/master/foo", "format=text", SC_OK, "http://notlocalhost");
+    FakeHttpServletResponse res =
+        buildResponse("/repo/+/master/foo", "format=text", SC_OK, "http://notlocalhost");
     assertThat(res.getHeader(HttpHeaders.CONTENT_TYPE)).isEqualTo("text/plain");
-    assertThat(res.getHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN))
-        .isEqualTo(null);
+    assertThat(res.getHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)).isEqualTo(null);
   }
 
-
   private Map<String, ?> getBlobData(Map<String, ?> data) {
     return ((Map<String, Map<String, ?>>) data).get("data");
   }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
index ed3ed9b..f287685 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
@@ -41,9 +41,7 @@
 
   @Before
   public void setUp() throws Exception {
-    repo =
-        new TestRepository<>(
-            new InMemoryRepository(new DfsRepositoryDescription("test")));
+    repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription("test")));
     parser =
         new RevisionParser(
             repo.getRepository(),
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
index e8a05a4..8fe900a 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
@@ -50,9 +50,7 @@
 
   @Before
   public void setUp() throws Exception {
-    repo =
-        new TestRepository<>(
-            new InMemoryRepository(new DfsRepositoryDescription("test")));
+    repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription("test")));
     walk = new RevWalk(repo.getRepository());
     cache = new TimeCache();
     start = repo.getDate().getTime() / 1000;
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
index 68b57ba..2a8cb65 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
@@ -38,9 +38,7 @@
 
   @Before
   public void setUp() throws Exception {
-    repo =
-        new TestRepository<>(
-            new InMemoryRepository(new DfsRepositoryDescription("repo")));
+    repo = new TestRepository<>(new InMemoryRepository(new DfsRepositoryDescription("repo")));
   }
 
   @Test
