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 »{/msg}</a>
+ <a class="LogNav-next" href="{$nextUrl}">{$nextText} »</a>
</nav>
{/if}
{/template}