Avoid IllegalArgumentException when auto-diving in root paths

The checkArgument() call in GitilesView.getBreadcrumbs(List<Boolean>)
is intended to avoid programmer error due to the subtle relationship
between hasSingleTree and the view's path. In fact, the check was
incorrectly failing when browsing root paths like "/+/master/". Change
the check to fix that case.

Change-Id: I1a1f8b57d5d16b45ec4da32afaf2009936486787
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 d5ac93b..1239ac7 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -533,7 +533,9 @@
       }
       StringBuilder cur = new StringBuilder();
       List<String> parts = ImmutableList.copyOf(PATH_SPLITTER.omitEmptyStrings().split(path));
-      checkArgument(hasSingleTree == null || hasSingleTree.size() == parts.size() - 1,
+      checkArgument(hasSingleTree == null
+          || (parts.isEmpty() && hasSingleTree.isEmpty())
+          || hasSingleTree.size() == parts.size() - 1,
           "hasSingleTree has wrong number of entries");
       for (int i = 0; i < parts.size(); i++) {
         String part = parts.get(i);
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 b2b435a..1d143ae 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/GitilesViewTest.java
@@ -554,6 +554,25 @@
         view.getBreadcrumbs(ImmutableList.of(true, false, false)));
   }
 
+  public void testBreadcrumbsHasSingleTreeRootPath() throws Exception {
+    ObjectId id = ObjectId.fromString("abcd1234abcd1234abcd1234abcd1234abcd1234");
+    GitilesView view = GitilesView.path()
+        .copyFrom(HOST)
+        .setRepositoryName("foo/bar")
+        .setRevision(Revision.unpeeled("master", id))
+        .setTreePath("")
+        .build();
+
+    assertEquals("/b/foo/bar/+/master/", view.toUrl());
+    assertEquals(
+        ImmutableList.of(
+            breadcrumb("host", "/b/?format=HTML"),
+            breadcrumb("foo/bar", "/b/foo/bar/"),
+            breadcrumb("master", "/b/foo/bar/+/master"),
+            breadcrumb(".", "/b/foo/bar/+/master/")),
+        view.getBreadcrumbs(ImmutableList.<Boolean> of()));
+  }
+
   private static ImmutableMap<String, String> breadcrumb(String text, String url) {
     return ImmutableMap.of("text", text, "url", url);
   }