@@ -49,6 +49,15 @@ public class LogSoyData {
4949 Field .TAGS );
5050 private static final ImmutableSet <Field > VERBOSE_FIELDS = Field .setOf (FIELDS , Field .DIFF_TREE );
5151
52+ /** Behavior for the footer link when rendering streaming log data. */
53+ public enum FooterBehavior {
54+ /** "Next" link that skips commits in the current view. */
55+ NEXT ,
56+
57+ /** "More" link that starts from HEAD. */
58+ LOG_HEAD ;
59+ }
60+
5261 private final HttpServletRequest req ;
5362 private final GitilesView view ;
5463 private final Set <Field > fields ;
@@ -70,7 +79,8 @@ public void renderStreaming(
7079 @ Nullable String revision ,
7180 Renderer renderer ,
7281 Writer out ,
73- DateFormatter df )
82+ DateFormatter df ,
83+ FooterBehavior footerBehavior )
7484 throws IOException {
7585 renderer
7686 .newRenderer ("gitiles.logEntriesHeader" )
@@ -91,7 +101,7 @@ public void renderStreaming(
91101
92102 renderer
93103 .newRenderer ("gitiles.logEntriesFooter" )
94- .setData (toFooterSoyData (paginator , revision ))
104+ .setData (toFooterSoyData (paginator , revision , footerBehavior ))
95105 .render (out );
96106 }
97107
@@ -139,17 +149,28 @@ private Map<String, Object> toRenameSoyData(DiffEntry entry) {
139149 "score" , entry .getScore ());
140150 }
141151
142- private Map <String , Object > toFooterSoyData (Paginator paginator , @ Nullable String revision ) {
143- Map <String , Object > data = Maps .newHashMapWithExpectedSize (1 );
144- ObjectId next = paginator .getNextStart ();
145- if (next != null ) {
146- data .put (
147- "nextUrl" ,
148- copyAndCanonicalizeView (revision )
149- .replaceParam (LogServlet .START_PARAM , next .name ())
150- .toUrl ());
152+ private Map <String , Object > toFooterSoyData (
153+ Paginator paginator , @ Nullable String revision , FooterBehavior behavior ) {
154+ switch (behavior ) {
155+ case NEXT :
156+ ObjectId next = paginator .getNextStart ();
157+ if (next == null ) {
158+ return ImmutableMap .of ();
159+ }
160+ return ImmutableMap .of (
161+ "nextUrl" ,
162+ copyAndCanonicalizeView (revision )
163+ .replaceParam (LogServlet .START_PARAM , next .name ())
164+ .toUrl (),
165+ "nextText" ,
166+ "Next" );
167+
168+ case LOG_HEAD :
169+ return ImmutableMap .of (
170+ "nextUrl" , GitilesView .log ().copyFrom (view ).toUrl (), "nextText" , "More" );
171+ default :
172+ throw new IllegalStateException ("unknown footer behavior: " + behavior );
151173 }
152- return data ;
153174 }
154175
155176 private GitilesView .Builder copyAndCanonicalizeView (String revision ) {
0 commit comments