diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
index d4218a5..2176a47 100644
--- a/.settings/org.eclipse.jdt.ui.prefs
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -1,10 +1,9 @@
-#Wed Jul 29 11:31:38 PDT 2009
 eclipse.preferences.version=1
 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
 formatter_profile=_Google Format
 formatter_settings_version=11
 org.eclipse.jdt.ui.ignorelowercasenames=true
-org.eclipse.jdt.ui.importorder=com.google;com;junit;net;org;java;javax;
+org.eclipse.jdt.ui.importorder=;
 org.eclipse.jdt.ui.ondemandthreshold=99
 org.eclipse.jdt.ui.staticondemandthreshold=99
 org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
diff --git a/blame-cache/src/main/java/com/google/gitiles/blame/BlameCache.java b/blame-cache/src/main/java/com/google/gitiles/blame/BlameCache.java
index 415cbdb..9ea4023 100644
--- a/blame-cache/src/main/java/com/google/gitiles/blame/BlameCache.java
+++ b/blame-cache/src/main/java/com/google/gitiles/blame/BlameCache.java
@@ -14,20 +14,15 @@
 
 package com.google.gitiles.blame;
 
-import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.lib.Repository;
-
 import java.io.IOException;
 import java.util.List;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
 
 public interface BlameCache {
   /** @return the blame of a path at a given commit. */
   List<Region> get(Repository repo, ObjectId commitId, String path) throws IOException;
 
-  /**
-   * @return the last commit that modified a path, starting at the given
-   *     commit.
-   */
-  ObjectId findLastCommit(Repository repo, ObjectId commitId, String path)
-      throws IOException;
+  /** @return the last commit that modified a path, starting at the given commit. */
+  ObjectId findLastCommit(Repository repo, ObjectId commitId, String path) throws IOException;
 }
diff --git a/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java b/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
index 66363b7..c088d81 100644
--- a/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
+++ b/blame-cache/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
@@ -25,7 +25,13 @@
 import com.google.common.collect.Interners;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
 import org.eclipse.jgit.blame.BlameGenerator;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.PersonIdent;
@@ -36,14 +42,6 @@
 import org.eclipse.jgit.treewalk.filter.TreeFilter;
 import org.eclipse.jgit.util.QuotedString;
 
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-
 /** Guava implementation of BlameCache, weighted by number of blame regions. */
 public class BlameCacheImpl implements BlameCache {
   public static CacheBuilder<Key, List<Region>> defaultBuilder() {
diff --git a/blame-cache/src/main/java/com/google/gitiles/blame/Region.java b/blame-cache/src/main/java/com/google/gitiles/blame/Region.java
index fbc9eb4..10ec0e3 100644
--- a/blame-cache/src/main/java/com/google/gitiles/blame/Region.java
+++ b/blame-cache/src/main/java/com/google/gitiles/blame/Region.java
@@ -16,11 +16,10 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 
+import java.io.Serializable;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.PersonIdent;
 
-import java.io.Serializable;
-
 /** Region of the blame of a file. */
 public class Region implements Serializable, Comparable<Region> {
   private static final long serialVersionUID = 1L;
diff --git a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
index 6cf73ad..1c4410a 100644
--- a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
+++ b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
@@ -24,7 +24,20 @@
 import com.google.gitiles.PathServlet;
 import com.google.gitiles.RepositoryDescription;
 import com.google.gitiles.RootedDocServlet;
-
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+import javax.servlet.Servlet;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jetty.server.Handler;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.handler.ContextHandler;
@@ -46,22 +59,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.URISyntaxException;
-import java.net.UnknownHostException;
-import java.nio.file.NoSuchFileException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.Servlet;
-import javax.servlet.http.HttpServletRequest;
-
 class DevServer {
   private static final Logger log = LoggerFactory.getLogger(PathServlet.class);
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java
index 275a427..f1a7657 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/AbstractHttpFilter.java
@@ -15,7 +15,6 @@
 package com.google.gitiles;
 
 import java.io.IOException;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
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 a44aa96..f29db45 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveFormat.java
@@ -18,7 +18,6 @@
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-
 import org.eclipse.jgit.api.ArchiveCommand;
 import org.eclipse.jgit.archive.TarFormat;
 import org.eclipse.jgit.archive.Tbz2Format;
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 8a3b1e2..f004c9f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
@@ -19,7 +19,10 @@
 
 import com.google.common.base.Optional;
 import com.google.common.base.Strings;
-
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.api.ArchiveCommand;
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
@@ -31,12 +34,6 @@
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.treewalk.TreeWalk;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 public class ArchiveServlet extends BaseServlet {
   private static final long serialVersionUID = 1L;
 
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 e839a9f..70c48f1 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -32,9 +32,6 @@
 import com.google.common.net.HttpHeaders;
 import com.google.gson.FieldNamingPolicy;
 import com.google.gson.GsonBuilder;
-
-import org.joda.time.Instant;
-
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -43,11 +40,11 @@
 import java.lang.reflect.Type;
 import java.util.Map;
 import java.util.zip.GZIPOutputStream;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.joda.time.Instant;
 
 /** Base servlet class for Gitiles servlets that serve Soy templates. */
 public abstract class BaseServlet extends HttpServlet {
@@ -135,8 +132,7 @@
 
   /**
    * @param req in-progress request.
-   * @return the default {@link FormatType} used when {@code ?format=} is not
-   *     specified.
+   * @return the default {@link FormatType} used when {@code ?format=} is not specified.
    */
   protected FormatType getDefaultFormat(HttpServletRequest req) {
     return HTML;
@@ -195,8 +191,8 @@
    *
    * @param req in-progress request.
    * @param res in-progress response.
-   * @param templateName Soy template name; must be in one of the template files
-   *     defined in {@link Renderer}.
+   * @param templateName Soy template name; must be in one of the template files defined in {@link
+   *     Renderer}.
    * @param soyData data for Soy.
    * @throws IOException an error occurred during rendering.
    */
@@ -208,20 +204,18 @@
 
   /**
    * Start a streaming HTML response with header and footer rendered by Soy.
-   * <p>
-   * A streaming template includes the special template
-   * {@code gitiles.streamingPlaceholder} at the point where data is to be
-   * streamed. The template before and after this placeholder is rendered using
-   * the provided data map.
+   *
+   * <p>A streaming template includes the special template {@code gitiles.streamingPlaceholder} at
+   * the point where data is to be streamed. The template before and after this placeholder is
+   * rendered using the provided data map.
    *
    * @param req in-progress request.
    * @param res in-progress response.
-   * @param templateName Soy template name; must be in one of the template files
-   *     defined in {@link Renderer}.
+   * @param templateName Soy template name; must be in one of the template files defined in {@link
+   *     Renderer}.
    * @param soyData data for Soy.
-   * @return output stream to render to. The portion of the template before the
-   *     placeholder is already written and flushed; the portion after is
-   *     written only on calling {@code close()}.
+   * @return output stream to render to. The portion of the template before the placeholder is
+   *     already written and flushed; the portion after is written only on calling {@code close()}.
    * @throws IOException an error occurred during rendering the header.
    */
   protected OutputStream startRenderStreamingHtml(
@@ -298,14 +292,11 @@
 
   /**
    * Prepare the response to render plain text.
-   * <p>
-   * Unlike
-   * {@link #renderHtml(HttpServletRequest, HttpServletResponse, String, Map)}
-   * and
-   * {@link #renderJson(HttpServletRequest, HttpServletResponse, Object, Type)},
-   * which assume the data to render is already completely prepared, this method
-   * does not write any data, only headers, and returns the response's
-   * ready-to-use writer.
+   *
+   * <p>Unlike {@link #renderHtml(HttpServletRequest, HttpServletResponse, String, Map)} and {@link
+   * #renderJson(HttpServletRequest, HttpServletResponse, Object, Type)}, which assume the data to
+   * render is already completely prepared, this method does not write any data, only headers, and
+   * returns the response's ready-to-use writer.
    *
    * @param req in-progress request.
    * @param res in-progress response.
@@ -323,7 +314,6 @@
    * @param res in-progress response.
    * @param statusCode HTTP status code.
    * @param message full message text.
-   *
    * @throws IOException
    */
   protected void renderTextError(
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 41e0701..c505ed4 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BlobSoyData.java
@@ -22,7 +22,9 @@
 import com.google.common.collect.Maps;
 import com.google.template.soy.data.SoyListData;
 import com.google.template.soy.data.SoyMapData;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 import org.eclipse.jgit.diff.RawText;
 import org.eclipse.jgit.errors.LargeObjectException;
 import org.eclipse.jgit.errors.MissingObjectException;
@@ -33,11 +35,6 @@
 import org.eclipse.jgit.util.RawParseUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
 import prettify.parser.Prettify;
 import syntaxhighlight.ParseResult;
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommentLinkInfo.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommentLinkInfo.java
index cf10241..2280c0f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommentLinkInfo.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommentLinkInfo.java
@@ -19,25 +19,25 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-
 import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
- * Converts commit message text to soy data in accordance with
- * a commentlink rule.
- * <p>
- * Example:
+ * Converts commit message text to soy data in accordance with a commentlink rule.
+ *
+ * <p>Example:
+ *
  * <pre>
  *  new CommentLinkInfo(
  *      Pattern.compile("bug (\d+)"),
  *      "http://bugs/$1")
  *    .linkify("do something nice\n\nbug 5")
  * </pre>
- * <p>
- * returns a list of soy data objects:
+ *
+ * <p>returns a list of soy data objects:
+ *
  * <pre>
  * ImmutableList.of(
  *   ImmutableMap.of("text", "do something nice\n\n"),
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 429acae..4e917c4 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
@@ -25,7 +25,13 @@
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Ordering;
 import com.google.common.collect.Sets;
-
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.diff.DiffFormatter;
 import org.eclipse.jgit.http.server.ServletUtils;
@@ -44,15 +50,6 @@
 import org.eclipse.jgit.treewalk.EmptyTreeIterator;
 import org.eclipse.jgit.util.io.NullOutputStream;
 
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-
 /** Format-independent data about a single commit. */
 class CommitData {
   enum Field {
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 4b75ffd..96f7f2f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitJsonData.java
@@ -20,19 +20,16 @@
 import com.google.common.collect.Sets;
 import com.google.gitiles.CommitData.DiffList;
 import com.google.gitiles.CommitData.Field;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevWalk;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-
 public class CommitJsonData {
   static final ImmutableSet<Field> DEFAULT_FIELDS =
       Sets.immutableEnumSet(
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 d5bd8fd..40c5f74 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -27,7 +27,12 @@
 import com.google.gitiles.CommitData.DiffList;
 import com.google.gitiles.CommitData.Field;
 import com.google.template.soy.data.restricted.NullData;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
 import org.eclipse.jgit.lib.Constants;
@@ -37,14 +42,6 @@
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.util.RelativeDateFormatter;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-
 /** Soy data converter for git commits. */
 public class CommitSoyData {
   static final ImmutableSet<Field> DEFAULT_FIELDS =
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 1915d73..0c7c942 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ConfigUtil.java
@@ -17,28 +17,20 @@
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Predicates;
 import com.google.common.cache.CacheBuilder;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-
-import org.eclipse.jgit.lib.Config;
-import org.joda.time.Duration;
-
 import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import javax.annotation.Nullable;
+import org.eclipse.jgit.lib.Config;
+import org.joda.time.Duration;
 
 /** Utilities for working with {@link Config} objects. */
 public class ConfigUtil {
   /**
    * Read a duration value from the configuration.
-   * <p>
-   * Durations can be written with unit suffixes, for example {@code "1 s"} or
-   * {@code "5 days"}. If units are not specified, milliseconds are assumed.
+   *
+   * <p>Durations can be written with unit suffixes, for example {@code "1 s"} or {@code "5 days"}.
+   * If units are not specified, milliseconds are assumed.
    *
    * @param config JGit config object.
    * @param section section to read, e.g. "google"
@@ -48,7 +40,10 @@
    * @return a standard duration representing the time read, or defaultValue.
    */
   public static Duration getDuration(
-      Config config, String section, String subsection, String name,
+      Config config,
+      String section,
+      String subsection,
+      String name,
       @Nullable Duration defaultValue) {
     long m = config.getTimeUnit(section, subsection, name, -1, MILLISECONDS);
     return m == -1 ? defaultValue : Duration.millis(m);
@@ -94,10 +89,9 @@
    * @param section section to read, e.g. "gitiles".
    * @param subsection subsection to read, e.g. "subsection".
    * @param name variable to read, e.g. "fixedTimeZone".
-   * @return a time zone read from parsing the specified config string value, or
-   *     {@link Optional#absent()} if not present. As in the behavior of
-   *     {@link TimeZone#getTimeZone(String)}, unknown time zones are treated as
-   *     GMT.
+   * @return a time zone read from parsing the specified config string value, or {@link
+   *     Optional#absent()} if not present. As in the behavior of {@link
+   *     TimeZone#getTimeZone(String)}, unknown time zones are treated as GMT.
    */
   public static Optional<TimeZone> getTimeZone(
       Config config, String section, String subsection, String name) {
@@ -105,13 +99,5 @@
     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);
-  }
-
-  private static boolean anyOf(String a, String... cases) {
-    return Iterables.any(ImmutableList.copyOf(cases), Predicates.equalTo(a.toLowerCase()));
-  }
-
   private ConfigUtil() {}
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatter.java b/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatter.java
index affe508..1f847a8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DateFormatter.java
@@ -15,14 +15,12 @@
 package com.google.gitiles;
 
 import com.google.common.base.Optional;
-
-import org.eclipse.jgit.lib.PersonIdent;
-import org.eclipse.jgit.util.SystemReader;
-
 import java.io.IOException;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.TimeZone;
+import org.eclipse.jgit.lib.PersonIdent;
+import org.eclipse.jgit.util.SystemReader;
 
 /** Date formatter similar in spirit to JGit's {@code GitDateFormatter}. */
 public class DateFormatter {
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 dd6830d..5a54cea 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DebugRenderer.java
@@ -21,7 +21,6 @@
 import com.google.common.hash.HashCode;
 import com.google.template.soy.SoyFileSet;
 import com.google.template.soy.tofu.SoyTofu;
-
 import java.io.File;
 import java.net.URISyntaxException;
 import java.net.URL;
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 f912c3e..0953923 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
@@ -21,7 +21,17 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Queues;
-
+import java.io.File;
+import java.io.IOException;
+import java.text.Collator;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.http.server.ServletUtils;
@@ -33,25 +43,11 @@
 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 import org.eclipse.jgit.util.IO;
 
-import java.io.File;
-import java.io.IOException;
-import java.text.Collator;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-
 /**
  * Default implementation of {@link GitilesAccess} with local repositories.
- * <p>
- * Repositories are scanned on-demand under the given path, configured by
- * default from {@code gitiles.basePath}. There is no access control beyond what
- * user the JVM is running under.
+ *
+ * <p>Repositories are scanned on-demand under the given path, configured by default from {@code
+ * gitiles.basePath}. There is no access control beyond what user the JVM is running under.
  */
 public class DefaultAccess implements GitilesAccess {
   private static final String ANONYMOUS_USER_KEY = "anonymous user";
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 238aa74..0d78e24 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultRenderer.java
@@ -20,7 +20,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/DefaultUrls.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultUrls.java
index 7218a4b..67e42c0 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultUrls.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultUrls.java
@@ -18,14 +18,13 @@
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-
 import javax.servlet.http.HttpServletRequest;
 
 /**
  * Default implementation of {@link GitilesUrls}.
- * <p>
- * This implementation uses statically-configured defaults, and thus assumes
- * that the servlet is running a single virtual host.
+ *
+ * <p>This implementation uses statically-configured defaults, and thus assumes that the servlet is
+ * running a single virtual host.
  */
 public class DefaultUrls implements GitilesUrls {
   private final String canonicalHostName;
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 fb4aa0f..785d452 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DescribeServlet.java
@@ -20,7 +20,12 @@
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
 import com.google.gson.reflect.TypeToken;
-
+import java.io.IOException;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.NameRevCommand;
 import org.eclipse.jgit.api.errors.GitAPIException;
@@ -31,14 +36,6 @@
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
 
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves an API result describing an object. */
 public class DescribeServlet extends BaseServlet {
   private static final long serialVersionUID = 1L;
@@ -100,8 +97,7 @@
           SC_BAD_REQUEST,
           String.format(
               "Ambiguous short SHA-1 %s (%s)",
-              e.getAbbreviatedObjectId(),
-              Joiner.on(", ").join(e.getCandidates())));
+              e.getAbbreviatedObjectId(), Joiner.on(", ").join(e.getCandidates())));
       return null;
     }
   }
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 27b9852..273b0be 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DiffServlet.java
@@ -20,7 +20,14 @@
 import com.google.common.io.BaseEncoding;
 import com.google.gitiles.CommitData.Field;
 import com.google.gitiles.DateFormatter.Format;
-
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.diff.DiffFormatter;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
@@ -36,16 +43,6 @@
 import org.eclipse.jgit.treewalk.TreeWalk;
 import org.eclipse.jgit.treewalk.filter.PathFilter;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves an HTML page with all the diffs for a commit. */
 public class DiffServlet extends BaseServlet {
   private static final long serialVersionUID = 1L;
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 4eca18d..7f8d62a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/FormatType.java
@@ -18,7 +18,6 @@
 import com.google.common.base.Optional;
 import com.google.common.base.Strings;
 import com.google.common.net.HttpHeaders;
-
 import javax.servlet.http.HttpServletRequest;
 
 /** Type of formatting to use in the response to the client. */
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 3b5427d..ec3b5ff 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesAccess.java
@@ -14,22 +14,20 @@
 
 package com.google.gitiles;
 
+import java.io.IOException;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 
-import java.io.IOException;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-
 /**
  * Git storage interface for Gitiles.
- * <p>
- * Each instance is associated with a single end-user request, which implicitly
- * includes information about the host and repository.
+ *
+ * <p>Each instance is associated with a single end-user request, which implicitly includes
+ * information about the host and repository.
  */
 public interface GitilesAccess {
   /** Factory for per-request access. */
@@ -40,26 +38,22 @@
   /**
    * List repositories on the host.
    *
-   * @param prefix repository base path to list. Trailing "/" is implicitly
-   *        added if missing. Null or empty string will match all repositories.
+   * @param prefix repository base path to list. Trailing "/" is implicitly added if missing. Null
+   *     or empty string will match all repositories.
    * @param branches branches to list along with each repository.
    * @return map of repository names to descriptions.
-   * @throws ServiceNotEnabledException to trigger an HTTP 403 Forbidden
-   *         (matching behavior in
-   *         {@link org.eclipse.jgit.http.server.RepositoryFilter}).
-   * @throws ServiceNotAuthorizedException to trigger an HTTP 401 Unauthorized
-   *         (matching behavior in
-   *         {@link org.eclipse.jgit.http.server.RepositoryFilter}).
+   * @throws ServiceNotEnabledException to trigger an HTTP 403 Forbidden (matching behavior in
+   *     {@link org.eclipse.jgit.http.server.RepositoryFilter}).
+   * @throws ServiceNotAuthorizedException to trigger an HTTP 401 Unauthorized (matching behavior in
+   *     {@link org.eclipse.jgit.http.server.RepositoryFilter}).
    * @throws IOException if an error occurred.
    */
-  Map<String, RepositoryDescription> listRepositories(
-      @Nullable String prefix, Set<String> branches)
+  Map<String, RepositoryDescription> listRepositories(@Nullable String prefix, Set<String> branches)
       throws ServiceNotEnabledException, ServiceNotAuthorizedException, IOException;
 
   /**
-   * @return an opaque object that uniquely identifies the end-user making the
-   *     request, and supports {@link Object#equals(Object)} and
-   *     {@link Object#hashCode()}. Never null.
+   * @return an opaque object that uniquely identifies the end-user making the request, and supports
+   *     {@link Object#equals(Object)} and {@link Object#hashCode()}. Never null.
    */
   Object getUserKey();
 
@@ -68,8 +62,7 @@
 
   /**
    * @return the description attached to the repository of this request.
-   * @throws IOException an error occurred reading the description string from
-   *         the repository.
+   * @throws IOException an error occurred reading the description string from the repository.
    */
   RepositoryDescription getRepositoryDescription() throws IOException;
 
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 9793163..40fd6d0 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
@@ -16,17 +16,15 @@
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+import javax.servlet.FilterConfig;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.eclipse.jgit.util.FS;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.Map;
-
-import javax.servlet.FilterConfig;
-
 public class GitilesConfig {
   private static final String FILTER_CONFIG_PARAM = "configPath";
   private static final String PROPERTY_NAME = "com.google.gitiles.configPath";
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 4e5da10..3820521 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -30,14 +30,6 @@
 import com.google.gitiles.blame.BlameCacheImpl;
 import com.google.gitiles.blame.BlameServlet;
 import com.google.gitiles.doc.DocServlet;
-
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.http.server.glue.MetaFilter;
-import org.eclipse.jgit.http.server.glue.ServletBinder;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.transport.resolver.FileResolver;
-import org.eclipse.jgit.transport.resolver.RepositoryResolver;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.UnknownHostException;
@@ -45,7 +37,6 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.regex.Pattern;
-
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -55,11 +46,17 @@
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.http.server.glue.MetaFilter;
+import org.eclipse.jgit.http.server.glue.ServletBinder;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.transport.resolver.FileResolver;
+import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 
 /**
  * MetaFilter to serve Gitiles.
- * <p>
- * Do not use directly; use {@link GitilesServlet}.
+ *
+ * <p>Do not use directly; use {@link GitilesServlet}.
  */
 class GitilesFilter extends MetaFilter {
 
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 7a14ba2..3cf4fd2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesServlet.java
@@ -15,13 +15,7 @@
 package com.google.gitiles;
 
 import com.google.gitiles.blame.BlameCache;
-
-import org.eclipse.jgit.http.server.glue.MetaServlet;
-import org.eclipse.jgit.lib.Config;
-import org.eclipse.jgit.transport.resolver.RepositoryResolver;
-
 import java.util.Enumeration;
-
 import javax.annotation.Nullable;
 import javax.servlet.Filter;
 import javax.servlet.FilterConfig;
@@ -30,14 +24,16 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.http.server.glue.MetaServlet;
+import org.eclipse.jgit.lib.Config;
+import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 
 /**
  * Servlet to serve Gitiles.
- * <p>
- * This servlet can either be constructed manually with its dependencies, or
- * configured to use default implementations for the Gitiles interfaces. To
- * configure the defaults, you must provide a single init parameter
- * "configPath", which is the path to a git config file containing additional
+ *
+ * <p>This servlet can either be constructed manually with its dependencies, or configured to use
+ * default implementations for the Gitiles interfaces. To configure the defaults, you must provide a
+ * single init parameter "configPath", which is the path to a git config file containing additional
  * configuration.
  */
 public class GitilesServlet extends MetaServlet {
@@ -108,8 +104,8 @@
 
   /**
    * Add a custom filter for a view.
-   * <p>
-   * Must be called before initializing the servlet.
+   *
+   * <p>Must be called before initializing the servlet.
    *
    * @param view view type.
    * @param filter filter.
@@ -120,8 +116,8 @@
 
   /**
    * Set a custom handler for a view.
-   * <p>
-   * Must be called before initializing the servlet.
+   *
+   * <p>Must be called before initializing the servlet.
    *
    * @param view view type.
    * @param handler handler.
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 53dddc9..2d07c49 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesUrls.java
@@ -17,23 +17,20 @@
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import com.google.common.base.Function;
-
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
-
 import javax.servlet.http.HttpServletRequest;
 
 /** Interface for URLs displayed on source browsing pages. */
 public interface GitilesUrls {
   /**
    * Escapes repository or path names to be safely embedded into a URL.
-   * <p>
-   * This escape implementation escapes a repository or path name such as
-   * "foo/bar&lt;/child" to appear as "foo/bar%3C/child". Spaces are escaped as
-   * "%20". Its purpose is to escape a repository name to be safe for inclusion
-   * in the path component of the URL, where "/" is a valid character that
-   * should not be encoded, while almost any other non-alpha, non-numeric
-   * character will be encoded using URL style encoding.
+   *
+   * <p>This escape implementation escapes a repository or path name such as "foo/bar&lt;/child" to
+   * appear as "foo/bar%3C/child". Spaces are escaped as "%20". Its purpose is to escape a
+   * repository name to be safe for inclusion in the path component of the URL, where "/" is a valid
+   * character that should not be encoded, while almost any other non-alpha, non-numeric character
+   * will be encoded using URL style encoding.
    */
   Function<String, String> NAME_ESCAPER =
       new Function<String, String>() {
@@ -55,7 +52,7 @@
   /**
    * Return the name of the host from the request.
    *
-   * Used in various user-visible text, like "MyHost Git Repositories".
+   * <p>Used in various user-visible text, like "MyHost Git Repositories".
    *
    * @param req request.
    * @return host name; may be null.
@@ -74,8 +71,7 @@
    * Return the base URL for Gerrit projects on this host.
    *
    * @param req request.
-   * @return base URL for Gerrit Code Review, or null if Gerrit is not
-   *     configured.
+   * @return base URL for Gerrit Code Review, or null if Gerrit is not configured.
    */
   String getBaseGerritUrl(HttpServletRequest req);
 }
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 057ebf4..c792634 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -32,10 +32,6 @@
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Multimaps;
-
-import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.revwalk.RevObject;
-
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.ArrayList;
@@ -43,16 +39,16 @@
 import java.util.EnumSet;
 import java.util.List;
 import java.util.Map;
-
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.revwalk.RevObject;
 
 /**
  * Information about a view in Gitiles.
- * <p>
- * Views are uniquely identified by a type, and dispatched to servlet types by
- * {@link GitilesServlet}. This class contains the list of all types, as
- * well as some methods containing basic information parsed from the URL.
- * Construction happens in {@link ViewFilter}.
+ *
+ * <p>Views are uniquely identified by a type, and dispatched to servlet types by {@link
+ * GitilesServlet}. This class contains the list of all types, as well as some methods containing
+ * basic information parsed from the URL. Construction happens in {@link ViewFilter}.
  */
 public class GitilesView {
   private static final String DEFAULT_ARCHIVE_EXTENSION = ".tar.gz";
@@ -170,9 +166,8 @@
 
     public Builder setRepositoryPrefix(String prefix) {
       if (type == Type.HOST_INDEX) {
-        this.repositoryPrefix = prefix != null
-            ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix))
-            : null;
+        this.repositoryPrefix =
+            prefix != null ? Strings.emptyToNull(maybeTrimLeadingAndTrailingSlash(prefix)) : null;
         return this;
       }
       throw new IllegalStateException(
@@ -731,9 +726,8 @@
   }
 
   /**
-   * @return a list of maps with "text" and "url" keys for all file paths
-   *     leading up to the path represented by this view. All URLs allow
-   *     auto-diving into one-entry subtrees; see also
+   * @return a list of maps with "text" and "url" keys for all file paths leading up to the path
+   *     represented by this view. All URLs allow auto-diving into one-entry subtrees; see also
    *     {@link #getBreadcrumbs(List)}.
    */
   public List<Map<String, String>> getBreadcrumbs() {
@@ -743,13 +737,12 @@
   private static final EnumSet<Type> NON_HTML_TYPES = EnumSet.of(Type.DESCRIBE, Type.ARCHIVE);
 
   /**
-   * @param hasSingleTree list of booleans, one per path entry in this view's
-   *     path excluding the leaf. True entries indicate the tree at that path
-   *     only has a single entry that is another tree.
-   * @return a list of maps with "text" and "url" keys for all file paths
-   *     leading up to the path represented by this view. URLs whose
-   *     corresponding entry in {@code hasSingleTree} is true will disable
-   *     auto-diving into one-entry subtrees.
+   * @param hasSingleTree list of booleans, one per path entry in this view's path excluding the
+   *     leaf. True entries indicate the tree at that path only has a single entry that is another
+   *     tree.
+   * @return a list of maps with "text" and "url" keys for all file paths leading up to the path
+   *     represented by this view. URLs whose corresponding entry in {@code hasSingleTree} is true
+   *     will disable 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);
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 6578891..f1e01bc 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
@@ -27,19 +27,16 @@
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.gitiles.GitilesView.InvalidViewException;
-
-import org.eclipse.jgit.lib.ObjectId;
-
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.util.List;
 import java.util.regex.Pattern;
-
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jgit.lib.ObjectId;
 
 /** Filter to redirect Gitweb-style URLs to Gitiles-style URLs. */
 public class GitwebRedirectFilter extends AbstractHttpFilter {
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 ca35727..da79ea9 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HostIndexServlet.java
@@ -26,17 +26,9 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
 import com.google.gson.reflect.TypeToken;
-import com.google.template.soy.data.SoyData;
 import com.google.template.soy.data.SoyListData;
 import com.google.template.soy.data.SoyMapData;
-
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.eclipse.jgit.transport.ServiceMayNotContinueException;
-import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
-import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import com.google.template.soy.data.restricted.NullData;
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Collections;
@@ -44,10 +36,15 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.eclipse.jgit.transport.ServiceMayNotContinueException;
+import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
+import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Serves the top level index page for a Gitiles host. */
 public class HostIndexServlet extends BaseServlet {
@@ -163,7 +160,7 @@
             "hostName",
             hostName,
             "breadcrumbs",
-            SoyData.createFromExistingData(breadcrumbs),
+            breadcrumbs != null ? new SoyListData(breadcrumbs) : NullData.INSTANCE,
             "prefix",
             prefix != null ? prefix + '/' : "",
             "repositories",
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 4998f94..a290642 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/HtmlDiffFormatter.java
@@ -20,7 +20,10 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
@@ -30,11 +33,6 @@
 import org.eclipse.jgit.patch.FileHeader.PatchType;
 import org.eclipse.jgit.util.RawParseUtils;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.List;
-import java.util.Map;
-
 /** 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 Diff-unified\">".getBytes(UTF_8);
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 5493452..745debd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/IdentRevFilter.java
@@ -15,7 +15,7 @@
 package com.google.gitiles;
 
 import com.google.common.annotations.VisibleForTesting;
-
+import java.io.IOException;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.errors.StopWalkException;
@@ -24,8 +24,6 @@
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.revwalk.filter.RevFilter;
 
-import java.io.IOException;
-
 /** Filter which only includes commits matching a person identity. */
 public abstract class IdentRevFilter extends RevFilter {
   public static IdentRevFilter author(String author) {
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 e513ec4..e3110dd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Linkifier.java
@@ -20,11 +20,6 @@
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-
-import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -32,8 +27,10 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
-
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Linkifier for blocks of text such as commit message descriptions. */
 public class Linkifier {
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 fd3f3f9..5f17081 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -29,7 +29,16 @@
 import com.google.gitiles.CommitData.Field;
 import com.google.gitiles.DateFormatter.Format;
 import com.google.gson.reflect.TypeToken;
-
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.diff.DiffConfig;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
@@ -44,6 +53,7 @@
 import org.eclipse.jgit.revwalk.FollowFilter;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevObject;
+import org.eclipse.jgit.revwalk.RevSort;
 import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.revwalk.filter.AndRevFilter;
@@ -55,18 +65,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves an HTML page with a shortlog for commits and paths. */
 public class LogServlet extends BaseServlet {
   private static final long serialVersionUID = 1L;
@@ -97,7 +95,7 @@
     Paginator paginator = null;
     try {
       GitilesAccess access = getAccess(req);
-      paginator = newPaginator(repo, view, getAccess(req));
+      paginator = newPaginator(repo, view, access);
       if (paginator == null) {
         res.setStatus(SC_NOT_FOUND);
         return;
@@ -158,12 +156,13 @@
 
     Paginator paginator = null;
     try {
-      paginator = newPaginator(repo, view, getAccess(req));
+      GitilesAccess access = getAccess(req);
+      paginator = newPaginator(repo, view, access);
       if (paginator == null) {
         res.setStatus(SC_NOT_FOUND);
         return;
       }
-      DateFormatter df = new DateFormatter(getAccess(req), Format.DEFAULT);
+      DateFormatter df = new DateFormatter(access, Format.DEFAULT);
       CommitJsonData.Log result = new CommitJsonData.Log();
       List<CommitJsonData.Commit> entries = Lists.newArrayListWithCapacity(paginator.getLimit());
       for (RevCommit c : paginator) {
@@ -236,24 +235,37 @@
       return null;
     }
     setTreeFilter(walk, view, access);
+    setRevFilter(walk, view);
+    if (isTrue(view, "topo-order")) {
+      walk.sort(RevSort.TOPO, true);
+    }
+    if (isTrue(view, "reverse")) {
+      walk.sort(RevSort.REVERSE, true);
+    }
+    return walk;
+  }
+
+  private static void setRevFilter(RevWalk walk, GitilesView view) {
     List<RevFilter> filters = new ArrayList<>(3);
-    if (isTrue(Iterables.getFirst(view.getParameters().get("no-merges"), null))) {
+    if (isTrue(view, "no-merges")) {
       filters.add(RevFilter.NO_MERGES);
     }
+
     String author = Iterables.getFirst(view.getParameters().get("author"), null);
     if (author != null) {
       filters.add(IdentRevFilter.author(author));
     }
+
     String committer = Iterables.getFirst(view.getParameters().get("committer"), null);
     if (committer != null) {
       filters.add(IdentRevFilter.committer(committer));
     }
+
     if (filters.size() > 1) {
       walk.setRevFilter(AndRevFilter.create(filters));
     } else if (filters.size() == 1) {
       walk.setRevFilter(filters.get(0));
     }
-    return walk;
   }
 
   private static void setTreeFilter(RevWalk walk, GitilesView view, GitilesAccess access)
@@ -277,6 +289,10 @@
     }
   }
 
+  private static boolean isTrue(GitilesView view, String param) {
+    return isTrue(Iterables.getFirst(view.getParameters().get(param), null));
+  }
+
   private static boolean isTrue(String v) {
     if (v == null) {
       return false;
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 6d1a1c8..56ddb8f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -23,21 +23,18 @@
 import com.google.common.collect.Sets;
 import com.google.gitiles.CommitData.Field;
 import com.google.template.soy.tofu.SoyTofu;
-
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.revwalk.RevCommit;
 
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-
 public class LogSoyData {
   private static final ImmutableSet<Field> FIELDS =
       Sets.immutableEnumSet(
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/MimeTypes.java b/gitiles-servlet/src/main/java/com/google/gitiles/MimeTypes.java
index ed219ce..440503c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/MimeTypes.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/MimeTypes.java
@@ -16,7 +16,6 @@
 
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.ImmutableMap;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
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 019d33c..3060e45 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Paginator.java
@@ -18,6 +18,13 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
+import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.Deque;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import javax.annotation.Nullable;
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
@@ -29,26 +36,15 @@
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.treewalk.filter.TreeFilter;
 
-import java.io.IOException;
-import java.util.ArrayDeque;
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-
 /**
  * Wrapper around {@link RevWalk} that paginates for Gitiles.
  *
- * A single page of a shortlog is defined by a revision range, such as "master"
- * or "master..next", a page size, and a start commit, such as "c0ffee". The
- * distance between the first commit in the walk ("next") and the first commit
- * in the page may be arbitrarily long, but in order to present the commit list
- * in a stable way, we must always start from the first commit in the walk. This
- * is because there may be arbitrary merge commits between "c0ffee" and "next"
- * that effectively insert arbitrary commits into the history starting from
- * "c0ffee".
+ * <p>A single page of a shortlog is defined by a revision range, such as "master" or
+ * "master..next", a page size, and a start commit, such as "c0ffee". The distance between the first
+ * commit in the walk ("next") and the first commit in the page may be arbitrarily long, but in
+ * order to present the commit list in a stable way, we must always start from the first commit in
+ * the walk. This is because there may be arbitrary merge commits between "c0ffee" and "next" that
+ * effectively insert arbitrary commits into the history starting from "c0ffee".
  */
 class Paginator implements Iterable<RevCommit> {
   private static class RenameWatcher extends RenameCallback {
@@ -82,8 +78,7 @@
    *
    * @param walk revision walk; must be fully initialized before calling.
    * @param limit page size.
-   * @param start commit at which to start the walk, or null to start at the
-   *     beginning.
+   * @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 {
@@ -122,7 +117,6 @@
    * Get the next element in this page of the walk.
    *
    * @return the next element, or null if the walk is finished.
-   *
    * @throws MissingObjectException See {@link RevWalk#next()}.
    * @throws IncorrectObjectTypeException See {@link RevWalk#next()}.
    * @throws IOException See {@link RevWalk#next()}.
@@ -166,33 +160,31 @@
   }
 
   /**
-   * @return the ID at the start of the page of results preceding this one, or
-   *     null if this is the first page.
+   * @return the ID at the start of the page of results preceding this one, or null if this is the
+   *     first page.
    */
   public ObjectId getPreviousStart() {
     return prevStart;
   }
 
   /**
-   * @return the ID at the start of the page of results after this one, or null
-   *     if this is the last page.
+   * @return the ID at the start of the page of results after this one, or null if this is the last
+   *     page.
    */
   public ObjectId getNextStart() {
     checkState(done, "getNextStart() invalid before walk done");
     return nextStart;
   }
 
-  /**
-   * @return entry corresponding to a rename or copy at the given commit.
-   */
+  /** @return entry corresponding to a rename or copy at the given commit. */
   public DiffEntry getRename(ObjectId commitId) {
     return renamed != null ? renamed.get(commitId) : null;
   }
 
   /**
    * @return an iterator over the commits in this walk.
-   * @throws RevWalkException if an error occurred, wrapping the checked
-   *     exception from {@link #next()}.
+   * @throws RevWalkException if an error occurred, wrapping the checked exception from {@link
+   *     #next()}.
    */
   @Override
   public Iterator<RevCommit> iterator() {
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 91e7060..804d5b3 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathServlet.java
@@ -29,7 +29,14 @@
 import com.google.common.collect.Maps;
 import com.google.common.io.BaseEncoding;
 import com.google.common.primitives.Bytes;
-
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Pattern;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.LargeObjectException;
@@ -57,16 +64,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves an HTML page with detailed information about a path within a tree. */
 // TODO(dborowitz): Handle non-UTF-8 names.
 public class PathServlet extends BaseServlet {
@@ -77,8 +74,8 @@
   static final String TYPE_HEADER = "X-Gitiles-Object-Type";
 
   /**
-   * Submodule URLs where we know there is a web page if the user visits the
-   * repository URL verbatim in a web browser.
+   * Submodule URLs where we know there is a web page if the user visits the repository URL verbatim
+   * in a web browser.
    */
   private static final Pattern VERBATIM_SUBMODULE_URL_PATTERN =
       Pattern.compile(
@@ -347,9 +344,9 @@
 
   /**
    * Encapsulate the result of walking to a single tree.
-   * <p>
-   * Unlike {@link TreeWalk} itself, supports positioning at the root tree.
-   * Includes information to help the auto-dive routine as well.
+   *
+   * <p>Unlike {@link TreeWalk} itself, supports positioning at the root tree. Includes information
+   * to help the auto-dive routine as well.
    */
   private static class WalkResult implements AutoCloseable {
     private static WalkResult recursivePath(RevWalk rw, GitilesView view) throws IOException {
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 e67223f..2df8cdc 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/PathUtil.java
@@ -18,7 +18,6 @@
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.io.Files;
-
 import java.util.StringTokenizer;
 
 /** Static utilities for dealing with pathnames. */
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 3dcf1ea..e6c5736 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ReadmeHelper.java
@@ -13,11 +13,12 @@
 // limitations under the License.
 
 package com.google.gitiles;
+
 import com.google.gitiles.doc.GitilesMarkdown;
 import com.google.gitiles.doc.MarkdownConfig;
 import com.google.gitiles.doc.MarkdownToHtml;
 import com.google.template.soy.data.SanitizedContent;
-
+import java.io.IOException;
 import org.eclipse.jgit.errors.CorruptObjectException;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
@@ -30,8 +31,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-
 class ReadmeHelper {
   private static final Logger log = LoggerFactory.getLogger(ReadmeHelper.class);
 
@@ -103,10 +102,7 @@
       log.error(
           String.format(
               "error rendering %s/%s %s:%s",
-              view.getHostName(),
-              view.getRepositoryName(),
-              view.getRevision(),
-              readmePath),
+              view.getHostName(), view.getRepositoryName(), view.getRevision(), readmePath),
           err);
       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 f434586..5aa4119 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -25,7 +25,15 @@
 import com.google.common.primitives.Ints;
 import com.google.common.util.concurrent.UncheckedExecutionException;
 import com.google.gson.reflect.TypeToken;
-
+import java.io.IOException;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.http.server.ServletUtils;
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.Constants;
@@ -35,17 +43,6 @@
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.transport.RefAdvertiser;
 
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves an HTML page with all the refs in a repository. */
 public class RefServlet extends BaseServlet {
   private static final long serialVersionUID = 1L;
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 694a3c3..7030694 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Renderer.java
@@ -31,7 +31,6 @@
 import com.google.common.io.ByteStreams;
 import com.google.common.net.HttpHeaders;
 import com.google.template.soy.tofu.SoyTofu;
-
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -41,15 +40,14 @@
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
-
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 /**
  * Renderer for Soy templates used by Gitiles.
- * <p>
- * Most callers should not use the methods in this class directly, and instead
- * use one of the HTML methods in {@link BaseServlet}.
+ *
+ * <p>Most callers should not use the methods in this class directly, and instead use one of the
+ * HTML methods in {@link BaseServlet}.
  */
 public abstract class Renderer {
   // Must match .streamingPlaceholder.
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 bbaabc5..ffb4a55 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryFilter.java
@@ -21,6 +21,11 @@
 import static org.eclipse.jgit.http.server.GitSmartHttpTools.sendError;
 import static org.eclipse.jgit.http.server.ServletUtils.ATTRIBUTE_REPOSITORY;
 
+import java.io.IOException;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.ServiceMayNotContinueException;
@@ -28,13 +33,6 @@
 import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
 import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
 
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 class RepositoryFilter extends AbstractHttpFilter {
   private final RepositoryResolver<HttpServletRequest> resolver;
 
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 3b754df..7ce3720 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -26,7 +26,13 @@
 import com.google.gitiles.doc.MarkdownConfig;
 import com.google.gson.reflect.TypeToken;
 import com.google.template.soy.data.SanitizedContent;
-
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.http.server.ServletUtils;
 import org.eclipse.jgit.lib.Config;
@@ -38,15 +44,6 @@
 import org.eclipse.jgit.revwalk.RevTree;
 import org.eclipse.jgit.revwalk.RevWalk;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves the index page for a repository, if accessed directly by a browser. */
 public class RepositoryIndexServlet extends BaseServlet {
   private static final long serialVersionUID = 1L;
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 356fbc7..3fc8d37 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
@@ -21,7 +21,8 @@
 import static org.eclipse.jgit.lib.Constants.OBJ_TAG;
 
 import com.google.common.annotations.VisibleForTesting;
-
+import java.io.IOException;
+import java.util.Objects;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.AbbreviatedObjectId;
 import org.eclipse.jgit.lib.Constants;
@@ -29,14 +30,11 @@
 import org.eclipse.jgit.revwalk.RevObject;
 import org.eclipse.jgit.revwalk.RevWalk;
 
-import java.io.IOException;
-import java.util.Objects;
-
 /**
  * Object encapsulating a single revision as seen by Gitiles.
- * <p>
- * A single revision consists of a name, an ID, and a type. Name parsing is done
- * once per request by {@link RevisionParser}.
+ *
+ * <p>A single revision consists of a name, an ID, and a type. Name parsing is done once per request
+ * by {@link RevisionParser}.
  */
 public class Revision {
   /** Sentinel indicating a missing or empty revision. */
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 f837bca..9b2d044 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
@@ -21,7 +21,8 @@
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Splitter;
-
+import java.io.IOException;
+import java.util.Objects;
 import org.eclipse.jgit.errors.AmbiguousObjectException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.errors.RevisionSyntaxException;
@@ -32,9 +33,6 @@
 import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.revwalk.RevWalk;
 
-import java.io.IOException;
-import java.util.Objects;
-
 /** Object to parse revisions out of Gitiles paths. */
 class RevisionParser {
   private static final Splitter OPERATOR_SPLITTER = Splitter.on(CharMatcher.anyOf("^~"));
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 cc80490..a126c7e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -28,7 +28,13 @@
 import com.google.gitiles.CommitData.Field;
 import com.google.gitiles.CommitJsonData.Commit;
 import com.google.gitiles.DateFormatter.Format;
-
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.http.server.ServletUtils;
@@ -46,15 +52,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves an HTML page with detailed information about a ref. */
 public class RevisionServlet extends BaseServlet {
   private static final ImmutableSet<Field> COMMIT_SOY_FIELDS =
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 057aba8..90c6e07 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RootedDocServlet.java
@@ -17,7 +17,12 @@
 import static org.eclipse.jgit.http.server.ServletUtils.ATTRIBUTE_REPOSITORY;
 
 import com.google.gitiles.doc.DocServlet;
-
+import java.io.IOException;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
@@ -30,14 +35,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves Markdown at the root of a host. */
 public class RootedDocServlet extends HttpServlet {
   private static final Logger log = LoggerFactory.getLogger(ViewFilter.class);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java
index 8401551..831cb8e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TagSoyData.java
@@ -15,14 +15,11 @@
 package com.google.gitiles;
 
 import com.google.common.collect.Maps;
-
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.revwalk.RevTag;
 
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
 /** Soy data converter for git tags. */
 public class TagSoyData {
   private final Linkifier linkifier;
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 36646aa..b529ea8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ThreadSafePrettifyParser.java
@@ -15,7 +15,6 @@
 package com.google.gitiles;
 
 import java.util.Collections;
-
 import prettify.PrettifyParser;
 import prettify.parser.Prettify;
 
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 7021733..1a931e3 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TimeCache.java
@@ -17,7 +17,9 @@
 import com.google.common.base.Throwables;
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
-
+import java.io.IOException;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.PersonIdent;
@@ -26,16 +28,12 @@
 import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.revwalk.RevWalk;
 
-import java.io.IOException;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-
 /**
  * Cache of the time associated with Git objects.
- * <p>
- * Uses the time as stored in annotated tags if available, or else the commit
- * time of the tagged commit. Non-commits are given {@link Long#MIN_VALUE},
- * rather than searching for occurrences in the entire repository.
+ *
+ * <p>Uses the time as stored in annotated tags if available, or else the commit time of the tagged
+ * commit. Non-commits are given {@link Long#MIN_VALUE}, rather than searching for occurrences in
+ * the entire repository.
  */
 public class TimeCache {
   public static CacheBuilder<Object, Object> defaultBuilder() {
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 998d546..212099c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeJsonData.java
@@ -17,16 +17,14 @@
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import com.google.common.collect.Lists;
-
+import java.io.IOException;
+import java.util.List;
 import org.eclipse.jgit.annotations.Nullable;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.treewalk.TreeWalk;
 
-import java.io.IOException;
-import java.util.List;
-
 class TreeJsonData {
   static class Tree {
     String id;
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 f32e2cf..1e4e4b7 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/TreeSoyData.java
@@ -23,7 +23,9 @@
 import com.google.common.collect.Maps;
 import com.google.gitiles.PathServlet.FileType;
 import com.google.gitiles.doc.MarkdownConfig;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.ObjectId;
@@ -31,22 +33,17 @@
 import org.eclipse.jgit.revwalk.RevTree;
 import org.eclipse.jgit.treewalk.TreeWalk;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
 /** Soy data converter for git trees. */
 public class TreeSoyData {
   /**
-   * Number of characters to display for a symlink target. Targets longer than
-   * this are abbreviated for display in a tree listing.
+   * Number of characters to display for a symlink target. Targets longer than this are abbreviated
+   * for display in a tree listing.
    */
   private static final int MAX_SYMLINK_TARGET_LENGTH = 72;
 
   /**
-   * Maximum number of bytes to load from a blob that claims to be a symlink. If
-   * the blob is larger than this byte limit it will be displayed as a binary
-   * file instead of as a symlink.
+   * Maximum number of bytes to load from a blob that claims to be a symlink. If the blob is larger
+   * than this byte limit it will be displayed as a binary file instead of as a symlink.
    */
   static final int MAX_SYMLINK_SIZE = 16 << 10;
 
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 dbc9436..51e248e 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ViewFilter.java
@@ -21,19 +21,16 @@
 import static org.eclipse.jgit.http.server.ServletUtils.ATTRIBUTE_REPOSITORY;
 
 import com.google.common.base.Strings;
-
-import org.eclipse.jgit.http.server.ServletUtils;
-import org.eclipse.jgit.http.server.glue.WrappedRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.io.IOException;
 import java.util.Map;
-
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jgit.http.server.ServletUtils;
+import org.eclipse.jgit.http.server.glue.WrappedRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /** Filter to parse URLs and convert them to {@link GitilesView}s. */
 public class ViewFilter extends AbstractHttpFilter {
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 6c1a7a2..657bba8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -30,7 +30,13 @@
 import com.google.common.cache.CacheBuilder;
 import com.google.common.collect.Collections2;
 import com.google.common.util.concurrent.ExecutionError;
-
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.ObjectId;
@@ -41,14 +47,6 @@
 import org.eclipse.jgit.revwalk.RevSort;
 import org.eclipse.jgit.revwalk.RevWalk;
 
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Objects;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-
 /** Cache of per-user object visibility. */
 public class VisibilityCache {
   private static class Key {
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 2bb9dd3..bff70c2 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
@@ -34,7 +34,12 @@
 import com.google.gson.reflect.TypeToken;
 import com.google.template.soy.data.SoyListData;
 import com.google.template.soy.data.SoyMapData;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.http.server.ServletUtils;
 import org.eclipse.jgit.lib.FileMode;
@@ -48,14 +53,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 /** Serves an HTML page with blame data for a commit. */
 public class BlameServlet extends BaseServlet {
   private static final long serialVersionUID = 1L;
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 eed270f..f2f1855 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
@@ -20,10 +20,8 @@
 import com.google.gson.TypeAdapter;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonWriter;
-
-import org.eclipse.jgit.lib.ObjectId;
-
 import java.io.IOException;
+import org.eclipse.jgit.lib.ObjectId;
 
 class RegionAdapter extends TypeAdapter<Region> {
   private final DateFormatter df;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/BlockNoteExtension.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/BlockNoteExtension.java
index 3ae747d..deda75a 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/BlockNoteExtension.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/BlockNoteExtension.java
@@ -15,7 +15,6 @@
 package com.google.gitiles.doc;
 
 import com.google.common.collect.ImmutableSet;
-
 import org.commonmark.Extension;
 import org.commonmark.node.Block;
 import org.commonmark.parser.Parser;
@@ -29,6 +28,7 @@
 
 /**
  * CommonMark extension for block notes.
+ *
  * <pre>
  * *** note
  * This is a note.
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 9007928..a55084f 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
@@ -34,7 +34,12 @@
 import com.google.gitiles.GitilesView;
 import com.google.gitiles.Renderer;
 import com.google.gitiles.ViewFilter;
-
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import javax.annotation.Nullable;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import org.commonmark.node.Node;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.LargeObjectException;
@@ -49,14 +54,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 public class DocServlet extends BaseServlet {
   private static final Logger log = LoggerFactory.getLogger(DocServlet.class);
   private static final long serialVersionUID = 1L;
@@ -275,10 +272,7 @@
     log.error(
         String.format(
             "cannot load markdown %s/%s %s %s",
-            view.getHostName(),
-            view.getRepositoryName(),
-            view.getRevision(),
-            view.getPathPart()),
+            view.getHostName(), view.getRepositoryName(), view.getRevision(), view.getPathPart()),
         err);
     res.setStatus(SC_INTERNAL_SERVER_ERROR);
   }
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 2127400..435bb16 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
@@ -15,7 +15,8 @@
 package com.google.gitiles.doc;
 
 import com.google.gitiles.doc.html.HtmlBuilder;
-
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import org.commonmark.Extension;
 import org.commonmark.node.AbstractVisitor;
 import org.commonmark.node.HardLineBreak;
@@ -27,15 +28,13 @@
 import org.commonmark.parser.Parser.ParserExtension;
 import org.commonmark.parser.PostProcessor;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /**
  * Convert some {@link HtmlInline} and {@link HtmlBlock} to safe types.
- * <p>
- * Gitiles style Markdown accepts only a very small subset of HTML that is safe
- * for use within the document. This {@code PostProcessor} scans parsed nodes
- * and converts them to safer types for rendering:
+ *
+ * <p>Gitiles style Markdown accepts only a very small subset of HTML that is safe for use within
+ * the document. This {@code PostProcessor} scans parsed nodes and converts them to safer types for
+ * rendering:
+ *
  * <ul>
  * <li>{@link HardLineBreak}
  * <li>{@link ThematicBreak}
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 fcd00dc..cc50048 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
@@ -15,7 +15,6 @@
 package com.google.gitiles.doc;
 
 import com.google.common.collect.ImmutableList;
-
 import org.commonmark.ext.autolink.AutolinkExtension;
 import org.commonmark.ext.gfm.strikethrough.StrikethroughExtension;
 import org.commonmark.ext.gfm.tables.TablesExtension;
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 4fca76a..b7b2531 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
@@ -19,7 +19,8 @@
 import com.google.gitiles.GitilesView;
 import com.google.gitiles.MimeTypes;
 import com.google.template.soy.shared.restricted.EscapingConventions.FilterImageDataUri;
-
+import java.io.IOException;
+import javax.annotation.Nullable;
 import org.eclipse.jgit.errors.LargeObjectException;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.FileMode;
@@ -30,10 +31,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-
-import javax.annotation.Nullable;
-
 /** Reads an image from Git and converts to {@code data:image/*;base64,...} */
 class ImageLoader {
   private static final Logger log = LoggerFactory.getLogger(ImageLoader.class);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownConfig.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownConfig.java
index f229f8e..5737d85 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownConfig.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MarkdownConfig.java
@@ -16,7 +16,6 @@
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
-
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.Config.SectionParser;
 import org.eclipse.jgit.util.StringUtils;
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 d5218e7..f734949 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
@@ -24,7 +24,8 @@
 import com.google.template.soy.data.SanitizedContent;
 import com.google.template.soy.shared.restricted.EscapingConventions.FilterImageDataUri;
 import com.google.template.soy.shared.restricted.EscapingConventions.FilterNormalizeUri;
-
+import java.util.List;
+import javax.annotation.Nullable;
 import org.commonmark.ext.gfm.strikethrough.Strikethrough;
 import org.commonmark.ext.gfm.tables.TableBlock;
 import org.commonmark.ext.gfm.tables.TableBody;
@@ -59,18 +60,13 @@
 import org.commonmark.node.Visitor;
 import org.eclipse.jgit.lib.ObjectReader;
 import org.eclipse.jgit.revwalk.RevTree;
-
-import java.util.List;
-
-import javax.annotation.Nullable;
-
 import prettify.parser.Prettify;
 import syntaxhighlight.ParseResult;
 
 /**
  * Formats parsed Markdown AST into HTML.
- * <p>
- * Callers must create a new instance for each document.
+ *
+ * <p>Callers must create a new instance for each document.
  */
 public class MarkdownToHtml implements Visitor {
   public static Builder builder() {
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 6392cd0..9a6bb82 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
@@ -16,7 +16,6 @@
 
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Strings;
-
 import org.commonmark.node.Heading;
 import org.commonmark.node.Node;
 import org.commonmark.node.Text;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnBlock.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnBlock.java
index 3651474..d26e32c 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnBlock.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnBlock.java
@@ -19,9 +19,9 @@
 
 /**
  * Multi-column layout delineated by {@code |||---|||}.
- * <p>
- * Each {@link Heading} or {@link BlockNote} within the layout begins a new
- * {@link Column} in the HTML.
+ *
+ * <p>Each {@link Heading} or {@link BlockNote} within the layout begins a new {@link Column} in the
+ * HTML.
  */
 public class MultiColumnBlock extends CustomBlock {
   /** Grid is 12 columns wide. */
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnExtension.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnExtension.java
index aeb3d89..4f1ca53 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnExtension.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/MultiColumnExtension.java
@@ -17,7 +17,8 @@
 import com.google.common.base.Splitter;
 import com.google.common.primitives.Ints;
 import com.google.gitiles.doc.MultiColumnBlock.Column;
-
+import java.util.ArrayList;
+import java.util.List;
 import org.commonmark.Extension;
 import org.commonmark.node.Block;
 import org.commonmark.node.Heading;
@@ -31,9 +32,6 @@
 import org.commonmark.parser.block.MatchedBlockParser;
 import org.commonmark.parser.block.ParserState;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /** CommonMark extension for multicolumn layouts. */
 public class MultiColumnExtension implements ParserExtension {
   private static final String MARKER = "|||---|||";
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/NamedAnchorExtension.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/NamedAnchorExtension.java
index fd3f8f7..e6a3071 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/NamedAnchorExtension.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/NamedAnchorExtension.java
@@ -14,6 +14,8 @@
 
 package com.google.gitiles.doc;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import org.commonmark.Extension;
 import org.commonmark.node.Node;
 import org.commonmark.node.Text;
@@ -22,9 +24,6 @@
 import org.commonmark.parser.delimiter.DelimiterProcessor;
 import org.commonmark.parser.delimiter.DelimiterRun;
 
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 /** Parses <code>{#foo}</code> into {@link NamedAnchor}. */
 public class NamedAnchorExtension implements ParserExtension {
   public static Extension create() {
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 5affd6c..50e0b61 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
@@ -15,17 +15,15 @@
 package com.google.gitiles.doc;
 
 import com.google.gitiles.doc.html.HtmlBuilder;
-import com.google.template.soy.shared.restricted.Sanitizers;
 import com.google.template.soy.shared.restricted.EscapingConventions.FilterImageDataUri;
-
-import org.commonmark.node.Heading;
-import org.commonmark.node.Node;
-import org.eclipse.jgit.util.RawParseUtils;
-
+import com.google.template.soy.shared.restricted.Sanitizers;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.commonmark.node.Heading;
+import org.commonmark.node.Node;
+import org.eclipse.jgit.util.RawParseUtils;
 
 class Navbar {
   private static final Pattern REF_LINK =
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/PathResolver.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/PathResolver.java
index 1cc8095..205cecd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/PathResolver.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/PathResolver.java
@@ -15,21 +15,19 @@
 package com.google.gitiles.doc;
 
 import com.google.common.base.CharMatcher;
-
 import javax.annotation.Nullable;
 
 class PathResolver {
   /**
    * Resolve a path within the repository.
    *
-   * @param file path of the Markdown file in the repository that is making the
-   *        reference. May be null.
-   * @param target destination within the repository. If {@code target} starts
-   *        with {@code '/'}, {@code file} may be null and {@code target} is
-   *        evaluated as from the root directory of the repository.
-   * @return resolved form of {@code target} within the repository. Null if
-   *         {@code target} is not valid from {@code file}. Does not begin with
-   *         {@code '/'}, even if {@code target} does.
+   * @param file path of the Markdown file in the repository that is making the reference. May be
+   *     null.
+   * @param target destination within the repository. If {@code target} starts with {@code '/'},
+   *     {@code file} may be null and {@code target} is evaluated as from the root directory of the
+   *     repository.
+   * @return resolved form of {@code target} within the repository. Null if {@code target} is not
+   *     valid from {@code file}. Does not begin with {@code '/'}, even if {@code target} does.
    */
   @Nullable
   static String resolve(@Nullable String file, String target) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/doc/SmartQuotedExtension.java b/gitiles-servlet/src/main/java/com/google/gitiles/doc/SmartQuotedExtension.java
index 4f06f3d..7df0c13 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/doc/SmartQuotedExtension.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/doc/SmartQuotedExtension.java
@@ -18,7 +18,6 @@
 import static com.google.gitiles.doc.SmartQuoted.Type.SINGLE;
 
 import com.google.gitiles.doc.SmartQuoted.Type;
-
 import org.commonmark.Extension;
 import org.commonmark.node.Node;
 import org.commonmark.node.Text;
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 9c415a8..1cbc374 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
@@ -19,17 +19,15 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
 import com.google.gitiles.doc.html.HtmlBuilder;
-
-import org.apache.commons.lang3.StringUtils;
-import org.commonmark.node.Heading;
-import org.commonmark.node.Node;
-
 import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Deque;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+import org.commonmark.node.Heading;
+import org.commonmark.node.Node;
 
 /** Outputs outline from HeaderNodes in the AST. */
 class TocFormatter {
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 3239fe1..9551e94 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
@@ -25,20 +25,18 @@
 import com.google.template.soy.shared.restricted.EscapingConventions.EscapeHtml;
 import com.google.template.soy.shared.restricted.EscapingConventions.FilterImageDataUri;
 import com.google.template.soy.shared.restricted.EscapingConventions.FilterNormalizeUri;
-
 import java.io.IOException;
 import java.util.regex.Pattern;
 
 /**
  * Builds a document fragment using a restricted subset of HTML.
- * <p>
- * Most attributes are rejected ({@code style}, {@code onclick}, ...) by
- * throwing IllegalArgumentException if the caller attempts to add them to a
- * pending element.
- * <p>
- * Useful but critical attributes like {@code href} on anchors or {@code src} on
- * img permit only safe subset of URIs, primarily {@code http://},
- * {@code https://}, and for image src {@code data:image/*;base64,...}.
+ *
+ * <p>Most attributes are rejected ({@code style}, {@code onclick}, ...) by throwing
+ * IllegalArgumentException if the caller attempts to add them to a pending element.
+ *
+ * <p>Useful but critical attributes like {@code href} on anchors or {@code src} on img permit only
+ * safe subset of URIs, primarily {@code http://}, {@code https://}, and for image src {@code
+ * data:image/*;base64,...}.
  */
 public final class HtmlBuilder {
   private static final ImmutableSet<String> ALLOWED_TAGS =
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 255d7b8..0002ed1 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ConfigUtilTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ConfigUtilTest.java
@@ -14,7 +14,6 @@
 
 package com.google.gitiles;
 
-import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.truth.Truth.assertThat;
 import static com.google.gitiles.ConfigUtil.getDuration;
 import static org.junit.Assert.fail;
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterTest.java
index f2adff3..760ccb9 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/DateFormatterTest.java
@@ -20,17 +20,15 @@
 import static java.util.TimeZone.getTimeZone;
 
 import com.google.common.base.Optional;
-
+import java.text.ParseException;
+import java.util.Date;
+import java.util.TimeZone;
 import org.eclipse.jgit.lib.PersonIdent;
 import org.eclipse.jgit.util.GitDateParser;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.text.ParseException;
-import java.util.Date;
-import java.util.TimeZone;
-
 @RunWith(JUnit4.class)
 public class DateFormatterTest {
   @Test
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
index 620d80a..7a2d201 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/DiffServletTest.java
@@ -20,7 +20,6 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.BaseEncoding;
-
 import org.eclipse.jgit.diff.DiffEntry;
 import org.eclipse.jgit.diff.DiffEntry.ChangeType;
 import org.eclipse.jgit.diff.DiffEntry.Side;
@@ -48,8 +47,7 @@
     String diffHeader =
         String.format(
             "diff --git <a href=\"/b/repo/+/%s/foo\">a/foo</a> <a href=\"/b/repo/+/%s/foo\">b/foo</a>",
-            c1.name(),
-            c2.name());
+            c1.name(), c2.name());
     assertThat(actual).contains(diffHeader);
   }
 
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
index b158432..f113d94 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletRequest.java
@@ -25,10 +25,6 @@
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Maps;
-
-import org.eclipse.jgit.http.server.ServletUtils;
-import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
-
 import java.io.BufferedReader;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
@@ -39,12 +35,13 @@
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
+import org.eclipse.jgit.http.server.ServletUtils;
+import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 
 /** Simple fake implementation of {@link HttpServletRequest}. */
 public class FakeHttpServletRequest implements HttpServletRequest {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
index 4f50568..544c075 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/FakeHttpServletResponse.java
@@ -23,18 +23,15 @@
 import com.google.common.collect.LinkedListMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.net.HttpHeaders;
-
-import org.eclipse.jgit.util.RawParseUtils;
-
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.nio.charset.Charset;
 import java.util.Locale;
-
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jgit.util.RawParseUtils;
 
 /** Simple fake implementation of {@link HttpServletResponse}. */
 public class FakeHttpServletResponse implements HttpServletResponse {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesFilterTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesFilterTest.java
index 4b10ca7..f8d8640 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesFilterTest.java
@@ -19,12 +19,11 @@
 import static com.google.gitiles.GitilesFilter.REPO_REGEX;
 import static com.google.gitiles.GitilesFilter.ROOT_REGEX;
 
+import java.util.regex.Matcher;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.util.regex.Matcher;
-
 /** Tests for the Gitiles filter. */
 @RunWith(JUnit4.class)
 public class GitilesFilterTest {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
index 59659a2..7cce3ef 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
@@ -20,7 +20,6 @@
 import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ImmutableMap;
 import com.google.gitiles.GitilesView.Type;
-
 import org.eclipse.jgit.lib.ObjectId;
 import org.junit.Test;
 import org.junit.runner.RunWith;
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 0a502b0..779e816 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/GitwebRedirectFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/GitwebRedirectFilterTest.java
@@ -21,7 +21,7 @@
 import static javax.servlet.http.HttpServletResponse.SC_MOVED_PERMANENTLY;
 
 import com.google.common.net.HttpHeaders;
-
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
@@ -33,8 +33,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import javax.servlet.http.HttpServletRequest;
-
 /** Tests for gitweb redirector. */
 @RunWith(JUnit4.class)
 public class GitwebRedirectFilterTest {
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 07b8585..1e1e01f 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/HostIndexServletTest.java
@@ -22,7 +22,8 @@
 import com.google.template.soy.data.SoyListData;
 import com.google.template.soy.data.SoyMapData;
 import com.google.template.soy.data.restricted.NullData;
-
+import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
@@ -32,10 +33,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.util.Map;
-
-import javax.servlet.http.HttpServletResponse;
-
 /** Tests for {@link HostIndexServlet}. */
 @RunWith(JUnit4.class)
 public class HostIndexServletTest extends ServletTest {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/IdentRevFilterTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/IdentRevFilterTest.java
index 43992d5..dacf85e 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/IdentRevFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/IdentRevFilterTest.java
@@ -26,10 +26,9 @@
 /**
  * Tests for {@link IdentRevFilter}.
  *
- * Unfortunately it's not easy to test the Filter using real {@link RevCommit}s
- * because {@link TestRepository} hard-codes its author as "J. Author". The next
- * best thing is to test a {@link PersonIdent}, those are easy to construct.
- * TODO(dborowitz): Fix TestRepository to allow this.
+ * <p>Unfortunately it's not easy to test the Filter using real {@link RevCommit}s because {@link
+ * TestRepository} hard-codes its author as "J. Author". The next best thing is to test a {@link
+ * PersonIdent}, those are easy to construct. TODO(dborowitz): Fix TestRepository to allow this.
  */
 @RunWith(JUnit4.class)
 public class IdentRevFilterTest {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
index f6b16d9..37ff436 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/LinkifierTest.java
@@ -17,14 +17,12 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.common.collect.ImmutableMap;
-
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.lib.Config;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import javax.servlet.http.HttpServletRequest;
-
 /** Tests for {@link Linkifier}. */
 @RunWith(JUnit4.class)
 public class LinkifierTest {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
index 5d1d1f6..06ddaf4 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
@@ -20,14 +20,12 @@
 import com.google.gitiles.CommitJsonData.Log;
 import com.google.gitiles.DateFormatter.Format;
 import com.google.gson.reflect.TypeToken;
-
+import java.util.ArrayList;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.util.ArrayList;
-
 /** Tests for {@link LogServlet}. */
 @RunWith(JUnit4.class)
 public class LogServletTest extends ServletTest {
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 3328b4c..a174625 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/PaginatorTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/PaginatorTest.java
@@ -18,7 +18,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.common.collect.Lists;
-
+import java.util.List;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
@@ -31,8 +31,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.util.List;
-
 /** Unit tests for {@link LogServlet}. */
 @RunWith(JUnit4.class)
 public class PaginatorTest {
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 696b446..b492ed3 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/PathServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/PathServletTest.java
@@ -21,7 +21,8 @@
 import com.google.gitiles.TreeJsonData.Tree;
 import com.google.template.soy.data.SoyListData;
 import com.google.template.soy.data.restricted.StringData;
-
+import java.util.List;
+import java.util.Map;
 import org.eclipse.jgit.dircache.DirCacheEditor.PathEdit;
 import org.eclipse.jgit.dircache.DirCacheEntry;
 import org.eclipse.jgit.lib.FileMode;
@@ -33,9 +34,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.util.List;
-import java.util.Map;
-
 /** Tests for {@PathServlet}. */
 @SuppressWarnings("unchecked")
 @RunWith(JUnit4.class)
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
index 962b037..8dff6b3 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RefServletTest.java
@@ -21,7 +21,10 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.gitiles.RefServlet.RefJsonData;
 import com.google.gson.reflect.TypeToken;
-
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -31,12 +34,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-
 /** Tests for {@link RefServlet}. */
 @RunWith(JUnit4.class)
 public class RefServletTest extends ServletTest {
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 85311a8..43047ed 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/RevisionParserTest.java
@@ -21,7 +21,6 @@
 
 import com.google.common.cache.CacheBuilder;
 import com.google.gitiles.RevisionParser.Result;
-
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
index fdf2eec..24c551c 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
@@ -26,7 +26,8 @@
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.reflect.TypeToken;
-
+import java.util.Map;
+import java.util.TimeZone;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
@@ -38,9 +39,6 @@
 import org.junit.After;
 import org.junit.Before;
 
-import java.util.Map;
-import java.util.TimeZone;
-
 /** Base class for servlet tests. */
 public class ServletTest {
   protected TestRepository<DfsRepository> repo;
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesAccess.java b/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesAccess.java
index 50c91a5..3571270 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesAccess.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesAccess.java
@@ -18,15 +18,12 @@
 
 import com.google.common.base.CharMatcher;
 import com.google.common.collect.ImmutableMap;
-
-import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
-import org.eclipse.jgit.lib.Config;
-
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
-
 import javax.servlet.http.HttpServletRequest;
+import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
+import org.eclipse.jgit.lib.Config;
 
 /** Gitiles access for testing. */
 public class TestGitilesAccess implements GitilesAccess.Factory {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java b/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java
index 9b80a56..0a7beb1 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TestGitilesServlet.java
@@ -15,7 +15,13 @@
 package com.google.gitiles;
 
 import com.google.common.collect.ImmutableList;
-
+import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
 import org.eclipse.jgit.errors.RepositoryNotFoundException;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.junit.TestRepository;
@@ -23,15 +29,6 @@
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.transport.resolver.RepositoryResolver;
 
-import java.net.URL;
-import java.util.Collections;
-import java.util.Enumeration;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-
 /** Static utility methods for creating {@link GitilesServlet}s for testing. */
 public class TestGitilesServlet {
   /** @see #create(TestRepository) */
@@ -42,12 +39,12 @@
 
   /**
    * Create a servlet backed by a single test repository.
-   * <p>
-   * The servlet uses the same filter lists as a real servlet, but only knows
-   * about a single repo, having the name returned by
-   * {@link org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription#getRepositoryName()}.
-   * Pass a {@link FakeHttpServletRequest} and {@link FakeHttpServletResponse}
-   * to the servlet's {@code service} method to test.
+   *
+   * <p>The servlet uses the same filter lists as a real servlet, but only knows about a single
+   * repo, having the name returned by {@link
+   * org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription#getRepositoryName()}. Pass a
+   * {@link FakeHttpServletRequest} and {@link FakeHttpServletResponse} to the servlet's {@code
+   * service} method to test.
    *
    * @param repo the test repo backing the servlet.
    * @param gitwebRedirect optional redirect filter for gitweb URLs.
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TestViewFilter.java b/gitiles-servlet/src/test/java/com/google/gitiles/TestViewFilter.java
index 9a7f4cb..68acffb 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TestViewFilter.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TestViewFilter.java
@@ -21,19 +21,16 @@
 import static com.google.gitiles.GitilesFilter.ROOT_REGEX;
 
 import com.google.common.collect.ImmutableList;
-
-import org.eclipse.jgit.http.server.glue.MetaFilter;
-import org.eclipse.jgit.http.server.glue.MetaServlet;
-import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
-import org.eclipse.jgit.junit.TestRepository;
-
 import java.io.IOException;
 import java.util.regex.Pattern;
-
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import org.eclipse.jgit.http.server.glue.MetaFilter;
+import org.eclipse.jgit.http.server.glue.MetaServlet;
+import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
+import org.eclipse.jgit.junit.TestRepository;
 
 /** Run {@link ViewFilter} in a test environment. */
 public class TestViewFilter {
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 e34bc88..8d38eff 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
@@ -16,6 +16,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import java.io.IOException;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
@@ -33,8 +34,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.io.IOException;
-
 /** Unit tests for {@link TimeCache}. */
 @RunWith(JUnit4.class)
 public class TimeCacheTest {
@@ -44,8 +43,8 @@
 
   /**
    * Start time of {@link #repo}.
-   * <p>
-   * Note that commits auto-increment the repo's ticker, but tags do not.
+   *
+   * <p>Note that commits auto-increment the repo's ticker, but tags do not.
    */
   private long start;
 
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java
index 001ef02..98d416a 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TreeSoyDataTest.java
@@ -19,7 +19,6 @@
 import static com.google.gitiles.TreeSoyData.resolveTargetUrl;
 
 import com.google.common.base.Strings;
-
 import org.eclipse.jgit.lib.ObjectId;
 import org.junit.Test;
 import org.junit.runner.RunWith;
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 32cb7ca..9981a2d 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ViewFilterTest.java
@@ -19,7 +19,8 @@
 
 import com.google.common.net.HttpHeaders;
 import com.google.gitiles.GitilesView.Type;
-
+import java.io.IOException;
+import javax.servlet.ServletException;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
@@ -30,10 +31,6 @@
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-
 /** Tests for the view filter. */
 @RunWith(JUnit4.class)
 public class ViewFilterTest {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
index 265866b..d05b082 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
@@ -20,15 +20,13 @@
 import com.google.gitiles.CommitJsonData.Ident;
 import com.google.gitiles.ServletTest;
 import com.google.gson.reflect.TypeToken;
-
+import java.util.List;
+import java.util.Map;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
-import java.util.List;
-import java.util.Map;
-
 @RunWith(JUnit4.class)
 public class BlameServletTest extends ServletTest {
   private static final String NAME = "J. Author";
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java
index 25f3d7f..2404090 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/doc/DocServletTest.java
@@ -17,7 +17,6 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.gitiles.ServletTest;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -146,6 +145,6 @@
     repo.branch("master").commit().add("README.md", "[c](git://example.com/repo/..)").create();
 
     String html = buildHtml("/repo/+doc/master/README.md");
-    assertThat(html).contains("<a href=\"#zSoyz\">c</a>");
+    assertThat(html).contains("<a href=\"about:invalid#zSoyz\">c</a>");
   }
 }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/doc/LinkTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/doc/LinkTest.java
index ad9f941..a7e08a0 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/doc/LinkTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/doc/LinkTest.java
@@ -19,7 +19,6 @@
 import com.google.common.base.CharMatcher;
 import com.google.gitiles.GitilesView;
 import com.google.gitiles.RootedDocServlet;
-
 import org.eclipse.jgit.lib.Config;
 import org.junit.Before;
 import org.junit.Test;
@@ -33,12 +32,13 @@
 
   @Before
   public void setup() {
-    view = GitilesView.revision()
-        .setHostName("127.0.0.1")
-        .setServletPath("/g")
-        .setRepositoryName("repo")
-        .setRevision("HEAD")
-        .build();
+    view =
+        GitilesView.revision()
+            .setHostName("127.0.0.1")
+            .setServletPath("/g")
+            .setRepositoryName("repo")
+            .setRevision("HEAD")
+            .build();
     config = new Config();
   }
 
@@ -75,10 +75,10 @@
     url = "git://example.com/repo.git";
     assertThat(md.href(url)).isEqualTo(url);
 
-    assertThat(md.href("git:example.com/repo.git")).isEqualTo("#zSoyz");
-    assertThat(md.href("git://")).isEqualTo("#zSoyz");
-    assertThat(md.href("git://example.com/../root")).isEqualTo("#zSoyz");
-    assertThat(md.href("git://example.com/root/..")).isEqualTo("#zSoyz");
+    assertThat(md.href("git:example.com/repo.git")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("git://")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("git://example.com/../root")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("git://example.com/root/..")).isEqualTo("about:invalid#zSoyz");
   }
 
   @Test
@@ -126,24 +126,22 @@
 
   private static void testMarkdownInRoot(MarkdownToHtml md) {
     assertThat(md.href("#Help")).isEqualTo("#Help");
-    assertThat(md.href("setup.md#Help"))
-        .isEqualTo("/g/repo/+/HEAD/setup.md#Help");
+    assertThat(md.href("setup.md#Help")).isEqualTo("/g/repo/+/HEAD/setup.md#Help");
 
     assertThat(md.href("setup.md")).isEqualTo("/g/repo/+/HEAD/setup.md");
     assertThat(md.href("./setup.md")).isEqualTo("/g/repo/+/HEAD/setup.md");
     assertThat(md.href("./")).isEqualTo("/g/repo/+/HEAD/");
     assertThat(md.href(".")).isEqualTo("/g/repo/+/HEAD/");
 
-    assertThat(md.href("../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../..")).isEqualTo("#zSoyz");
-    assertThat(md.href("..")).isEqualTo("#zSoyz");
+    assertThat(md.href("../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../..")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("..")).isEqualTo("about:invalid#zSoyz");
   }
 
   private static void testMarkdownInTree(MarkdownToHtml md) {
     assertThat(md.href("#Help")).isEqualTo("#Help");
-    assertThat(md.href("setup.md#Help"))
-        .isEqualTo("/g/repo/+/HEAD/doc/setup.md#Help");
+    assertThat(md.href("setup.md#Help")).isEqualTo("/g/repo/+/HEAD/doc/setup.md#Help");
 
     assertThat(md.href("setup.md")).isEqualTo("/g/repo/+/HEAD/doc/setup.md");
     assertThat(md.href("./setup.md")).isEqualTo("/g/repo/+/HEAD/doc/setup.md");
@@ -155,10 +153,10 @@
     assertThat(md.href("../")).isEqualTo("/g/repo/+/HEAD/");
     assertThat(md.href("..")).isEqualTo("/g/repo/+/HEAD/");
 
-    assertThat(md.href("../../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../..")).isEqualTo("#zSoyz");
-    assertThat(md.href("../../../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../../..")).isEqualTo("#zSoyz");
+    assertThat(md.href("../../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../..")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../../../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../../..")).isEqualTo("about:invalid#zSoyz");
   }
 
   private MarkdownToHtml file(String path) {
@@ -203,10 +201,10 @@
     assertThat(md.href("./")).isEqualTo("/");
     assertThat(md.href(".")).isEqualTo("/");
 
-    assertThat(md.href("../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../..")).isEqualTo("#zSoyz");
-    assertThat(md.href("..")).isEqualTo("#zSoyz");
+    assertThat(md.href("../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../..")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("..")).isEqualTo("about:invalid#zSoyz");
   }
 
   @Test
@@ -227,10 +225,10 @@
     assertThat(md.href("../")).isEqualTo("/");
     assertThat(md.href("..")).isEqualTo("/");
 
-    assertThat(md.href("../../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../..")).isEqualTo("#zSoyz");
-    assertThat(md.href("../../../")).isEqualTo("#zSoyz");
-    assertThat(md.href("../../..")).isEqualTo("#zSoyz");
+    assertThat(md.href("../../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../..")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../../../")).isEqualTo("about:invalid#zSoyz");
+    assertThat(md.href("../../..")).isEqualTo("about:invalid#zSoyz");
   }
 
   private MarkdownToHtml rootedDoc(String path, String file) {
diff --git a/lib/BUCK b/lib/BUCK
index d585cc3..9e64d07 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -6,8 +6,8 @@
 
 maven_jar(
   name = 'gson',
-  id = 'com.google.code.gson:gson:2.1',
-  sha1 = '2e66da15851f9f5b5079228f856c2f090ba98c38',
+  id = 'com.google.code.gson:gson:2.7',
+  sha1 = '751f548c85fa49f330cecbb1875893f971b33c4e',
 )
 
 maven_jar(
diff --git a/lib/guice/BUCK b/lib/guice/BUCK
index 59470ce..35790d7 100644
--- a/lib/guice/BUCK
+++ b/lib/guice/BUCK
@@ -1,4 +1,4 @@
-VERSION = '4.0'
+VERSION = '4.1.0'
 EXCLUDE = [
   'META-INF/DEPENDENCIES',
   'META-INF/LICENSE',
@@ -20,7 +20,7 @@
 maven_jar(
   name = 'multibindings',
   id = 'com.google.inject.extensions:guice-multibindings:' + VERSION,
-  sha1 = 'f4509545b4470bbcc865aa500ad6fef2e97d28bf',
+  sha1 = '3b27257997ac51b0f8d19676f1ea170427e86d51',
   exclude_java_sources = True,
   exclude = EXCLUDE + [
     'META-INF/maven/com.google.guava/guava/pom.properties',
@@ -32,7 +32,7 @@
 maven_jar(
   name = 'guice_library',
   id = 'com.google.inject:guice:' + VERSION,
-  sha1 = '0f990a43d3725781b6db7cd0acf0a8b62dfd1649',
+  sha1 = 'eeb69005da379a10071aa4948c48d89250febb07',
   deps = [':aopalliance'],
   exclude_java_sources = True,
   exclude = EXCLUDE + [
@@ -45,7 +45,7 @@
 maven_jar(
   name = 'guice-assistedinject',
   id = 'com.google.inject.extensions:guice-assistedinject:' + VERSION,
-  sha1 = '8fa6431da1a2187817e3e52e967535899e2e46ca',
+  sha1 = 'af799dd7e23e6fe8c988da12314582072b07edcb',
   exclude = EXCLUDE,
 )
 
diff --git a/lib/soy/BUCK b/lib/soy/BUCK
index dbd5aac..a55edd0 100644
--- a/lib/soy/BUCK
+++ b/lib/soy/BUCK
@@ -1,7 +1,8 @@
+# Keep this version of Soy synchronized with the version used in Gerrit.
 maven_jar(
   name = 'soy',
-  id = 'com.google.template:soy:2015-04-10',
-  sha1 = 'f2a260c0eafbc5756ccec546efd2ffd5b0a583cb',
+  id = 'com.google.template:soy:2016-08-09',
+  sha1 = '43d33651e95480d515fe26c10a662faafe3ad1e4',
   deps = [
     ':icu4j',
     '//lib:jsr305',
@@ -10,6 +11,6 @@
 
 maven_jar(
   name = 'icu4j',
-  id = 'com.ibm.icu:icu4j:51.1',
-  sha1 = '8ce396c4aed83c0c3de9158dc72c834fd283d5a4',
+  id = 'com.ibm.icu:icu4j:57.1',
+  sha1 = '198ea005f41219f038f4291f0b0e9f3259730e92',
 )
diff --git a/tools/gitiles.importorder b/tools/gitiles.importorder
index e5f83dc..e372a41 100644
--- a/tools/gitiles.importorder
+++ b/tools/gitiles.importorder
@@ -1,9 +1,3 @@
 #Organize Import Order
-#Thu Dec 27 15:20:37 PST 2012
-6=javax
-5=java
-4=org
-3=net
-2=junit
-1=com
-0=com.google
+#Fri Aug 19 16:08:40 EDT 2016
+0=
