Link from repo index page to full log, not skipping the first 5

Bug: https://github.com/google/gitiles/issues/128
Change-Id: I13b9c25eca77f7db7e2198c5086161c6517cac5c
diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java
index b4a8e03..5d06ae5 100644
--- a/java/com/google/gitiles/LogServlet.java
+++ b/java/com/google/gitiles/LogServlet.java
@@ -129,7 +129,8 @@
 
       try (OutputStream out = startRenderStreamingHtml(req, res, "gitiles.logDetail", data)) {
         Writer w = newWriter(out, res);
-        new LogSoyData(req, access, pretty).renderStreaming(paginator, null, renderer, w, df);
+        new LogSoyData(req, access, pretty)
+            .renderStreaming(paginator, null, renderer, w, df, LogSoyData.FooterBehavior.NEXT);
         w.flush();
       }
     } catch (RevWalkException e) {
diff --git a/java/com/google/gitiles/LogSoyData.java b/java/com/google/gitiles/LogSoyData.java
index 56ddb8f..2f906fe 100644
--- a/java/com/google/gitiles/LogSoyData.java
+++ b/java/com/google/gitiles/LogSoyData.java
@@ -49,6 +49,15 @@
           Field.TAGS);
   private static final ImmutableSet<Field> VERBOSE_FIELDS = Field.setOf(FIELDS, Field.DIFF_TREE);
 
+  /** Behavior for the footer link when rendering streaming log data. */
+  public enum FooterBehavior {
+    /** "Next" link that skips commits in the current view. */
+    NEXT,
+
+    /** "More" link that starts from HEAD. */
+    LOG_HEAD;
+  }
+
   private final HttpServletRequest req;
   private final GitilesView view;
   private final Set<Field> fields;
@@ -70,7 +79,8 @@
       @Nullable String revision,
       Renderer renderer,
       Writer out,
-      DateFormatter df)
+      DateFormatter df,
+      FooterBehavior footerBehavior)
       throws IOException {
     renderer
         .newRenderer("gitiles.logEntriesHeader")
@@ -91,7 +101,7 @@
 
     renderer
         .newRenderer("gitiles.logEntriesFooter")
-        .setData(toFooterSoyData(paginator, revision))
+        .setData(toFooterSoyData(paginator, revision, footerBehavior))
         .render(out);
   }
 
@@ -139,17 +149,28 @@
         "score", entry.getScore());
   }
 
-  private Map<String, Object> toFooterSoyData(Paginator paginator, @Nullable String revision) {
-    Map<String, Object> data = Maps.newHashMapWithExpectedSize(1);
-    ObjectId next = paginator.getNextStart();
-    if (next != null) {
-      data.put(
-          "nextUrl",
-          copyAndCanonicalizeView(revision)
-              .replaceParam(LogServlet.START_PARAM, next.name())
-              .toUrl());
+  private Map<String, Object> toFooterSoyData(
+      Paginator paginator, @Nullable String revision, FooterBehavior behavior) {
+    switch (behavior) {
+      case NEXT:
+        ObjectId next = paginator.getNextStart();
+        if (next == null) {
+          return ImmutableMap.of();
+        }
+        return ImmutableMap.of(
+            "nextUrl",
+            copyAndCanonicalizeView(revision)
+                .replaceParam(LogServlet.START_PARAM, next.name())
+                .toUrl(),
+            "nextText",
+            "Next");
+
+      case LOG_HEAD:
+        return ImmutableMap.of(
+            "nextUrl", GitilesView.log().copyFrom(view).toUrl(), "nextText", "More");
+      default:
+        throw new IllegalStateException("unknown footer behavior: " + behavior);
     }
-    return data;
   }
 
   private GitilesView.Builder copyAndCanonicalizeView(String revision) {
diff --git a/java/com/google/gitiles/RepositoryIndexServlet.java b/java/com/google/gitiles/RepositoryIndexServlet.java
index 51bc42d..7d7ac36 100644
--- a/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -134,7 +134,8 @@
             startRenderStreamingHtml(req, res, "gitiles.repositoryIndex", data)) {
           Writer w = newWriter(out, res);
           new LogSoyData(req, access, "oneline")
-              .renderStreaming(paginator, "HEAD", renderer, w, df);
+              .renderStreaming(
+                  paginator, "HEAD", renderer, w, df, LogSoyData.FooterBehavior.LOG_HEAD);
           w.flush();
         }
       } else {
diff --git a/resources/com/google/gitiles/templates/LogDetail.soy b/resources/com/google/gitiles/templates/LogDetail.soy
index c09c9f6..5a90b86 100644
--- a/resources/com/google/gitiles/templates/LogDetail.soy
+++ b/resources/com/google/gitiles/templates/LogDetail.soy
@@ -74,12 +74,13 @@
  * Footer for the list of log entries.
  *
  * @param? nextUrl URL for the next page of results.
+ * @param? nextText text for next page link.
  */
 {template .logEntriesFooter stricthtml="false"}
 </ol>
 {if $nextUrl}
   <nav class="LogNav">
-    <a class="LogNav-next" href="{$nextUrl}">{msg desc="text for next URL"}Next &raquo;{/msg}</a>
+    <a class="LogNav-next" href="{$nextUrl}">{$nextText} &raquo;</a>
   </nav>
 {/if}
 {/template}