ensure that s= param is set correctly for previous link in log On the second page of results in a log view, the Previous button links back to itself rather than to the first page of results because the start param, s=, was not properly removed. Change-Id: If6102b727740438e45f549bdda053b7089955001
diff --git a/java/com/google/gitiles/GitilesView.java b/java/com/google/gitiles/GitilesView.java index 9bb43a9..f5be973 100644 --- a/java/com/google/gitiles/GitilesView.java +++ b/java/com/google/gitiles/GitilesView.java
@@ -32,6 +32,7 @@ import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimaps; +import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; @@ -299,6 +300,12 @@ return this; } + @CanIgnoreReturnValue + public Builder removeParam(String key) { + params.removeAll(key); + return this; + } + public Builder putAllParams(Map<String, String[]> params) { for (Map.Entry<String, String[]> e : params.entrySet()) { this.params.putAll(e.getKey(), Arrays.asList(e.getValue()));
diff --git a/java/com/google/gitiles/LogSoyData.java b/java/com/google/gitiles/LogSoyData.java index 0c57e69..4292bc9 100644 --- a/java/com/google/gitiles/LogSoyData.java +++ b/java/com/google/gitiles/LogSoyData.java
@@ -71,7 +71,10 @@ this.view = checkNotNull(ViewFilter.getView(req)); checkNotNull(pretty); Config config = access.getConfig(); - fields = config.getBoolean("logFormat", pretty, "verbose", false) || pretty.equals("fuller") ? VERBOSE_FIELDS : FIELDS; + fields = + config.getBoolean("logFormat", pretty, "verbose", false) || pretty.equals("fuller") + ? VERBOSE_FIELDS + : FIELDS; variant = firstNonNull(config.getString("logFormat", pretty, "variant"), pretty); } @@ -120,7 +123,9 @@ ObjectId prev = paginator.getPreviousStart(); if (prev != null) { GitilesView.Builder prevView = copyAndCanonicalizeView(revision); - if (!prevView.getRevision().getId().equals(prev)) { + if (prevView.getRevision().getId().equals(prev)) { + prevView.removeParam(LogServlet.START_PARAM); + } else { prevView.replaceParam(LogServlet.START_PARAM, prev.name()); } data.put("previousUrl", prevView.toUrl());
diff --git a/javatests/com/google/gitiles/LogServletTest.java b/javatests/com/google/gitiles/LogServletTest.java index 4ef7a4d..94c2e38 100644 --- a/javatests/com/google/gitiles/LogServletTest.java +++ b/javatests/com/google/gitiles/LogServletTest.java
@@ -15,6 +15,7 @@ package com.google.gitiles; import static com.google.common.truth.Truth.assertThat; +import static javax.servlet.http.HttpServletResponse.SC_OK; import com.google.gitiles.CommitJsonData.Commit; import com.google.gitiles.CommitJsonData.Log; @@ -30,6 +31,7 @@ @RunWith(JUnit4.class) public class LogServletTest extends ServletTest { private static final TypeToken<Log> LOG = new TypeToken<Log>() {}; + private static final String MAIN = "main"; @Test public void basicLog() throws Exception { @@ -136,4 +138,33 @@ assertThat(jsonCommit.committer.time).isEqualTo(df.format(commit.getCommitterIdent())); assertThat(jsonCommit.message).isEqualTo(commit.getFullMessage()); } + + @Test + public void verifyPreviousButtonAction() throws Exception { + repo.branch(MAIN).commit().add("foo", "contents").create(); + RevCommit grandParent = repo.branch(MAIN).commit().add("foo", "contents").create(); + RevCommit parent = + repo.branch(MAIN).commit().parent(grandParent).add("foo", "contents").create(); + RevCommit main = repo.branch(MAIN).commit().parent(parent).create(); + + int numCommitsPerPage = 2; + String path = + "/repo/+log/" + grandParent.toObjectId().getName() + ".." + main.toObjectId().getName(); + FakeHttpServletResponse res = + buildResponse( + path, + "format=html" + "&n=" + numCommitsPerPage + "&s=" + parent.toObjectId().getName(), + SC_OK); + + assertThat(res.getActualBodyString()) + .contains( + "<a class=\"LogNav-prev\"" + + " href=\"/b/repo/+log/" + + grandParent.toObjectId().getName() + + ".." + + main.toObjectId().getName() + + "/?format=html" + + "&n=2" + + "\">"); + } }