Add config option to set log entry template variant

Change-Id: Id185c1492f9d854c396e4a0eb914dc24beea084d
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 76d9f96..972f913 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -195,11 +195,8 @@
 
       Map<String, Object> allData = getData(req);
 
-      String headerVariant = getAccess(req).getConfig().getString("template", null, "customHeader");
-      if (headerVariant != null) {
-        allData.put("headerVariant", headerVariant);
-      }
-
+      GitilesConfig.putVariant(
+          getAccess(req).getConfig(), "customHeader", "headerVariant", allData);
       allData.putAll(soyData);
       GitilesView view = ViewFilter.getView(req);
       if (!allData.containsKey("repositoryName") && view.getRepositoryName() != null) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
index b7d9a10..a196c07 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesConfig.java
@@ -21,6 +21,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Map;
 
 import javax.servlet.FilterConfig;
 
@@ -52,5 +53,13 @@
     return config;
   }
 
+  public static void putVariant(Config config, String templateName, String keyName,
+      Map<String, ? super String> out) {
+    String variant = config.getString("template", null, templateName);
+    if (variant != null) {
+      out.put(keyName, variant);
+    }
+  }
+
   private GitilesConfig() {}
 }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
index ba979bc..e547563 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -108,6 +108,7 @@
       }
 
       data.put("title", title);
+      GitilesConfig.putVariant(getAccess(req).getConfig(), "logEntry", "logEntryVariant", data);
 
       renderHtml(req, res, "gitiles.logDetail", data);
     } catch (RevWalkException e) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
index d266a1c..1c134cf 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -34,7 +34,7 @@
 
 public class LogSoyData {
   private static final ImmutableSet<Field> FIELDS = Sets.immutableEnumSet(Field.ABBREV_SHA,
-      Field.URL, Field.SHORT_MESSAGE, Field.AUTHOR, Field.BRANCHES, Field.TAGS);
+      Field.URL, Field.SHORT_MESSAGE, Field.AUTHOR, Field.COMMITTER, Field.BRANCHES, Field.TAGS);
 
   private final HttpServletRequest req;
   private final GitilesView view;
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
index 09d9918..ec375ba 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -78,10 +78,10 @@
           data = new LogSoyData(req, view).toSoyData(walk, LOG_LIMIT, "HEAD", null, df);
         } else {
           // TODO(dborowitz): Handle non-commit or missing HEAD?
-          data = Maps.newHashMapWithExpectedSize(6);
+          data = Maps.newHashMapWithExpectedSize(7);
         }
       } else {
-        data = Maps.newHashMapWithExpectedSize(6);
+        data = Maps.newHashMapWithExpectedSize(7);
       }
     } finally {
       walk.release();
@@ -102,6 +102,7 @@
     if (tags.size() > REF_LIMIT) {
       data.put("moreTagsUrl", GitilesView.refs().copyFrom(view).toUrl());
     }
+    GitilesConfig.putVariant(getAccess(req).getConfig(), "logEntry", "logEntryVariant", data);
     return data;
   }
 
diff --git a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/LogDetail.soy b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/LogDetail.soy
index 3d5531e..eeccb94 100644
--- a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/LogDetail.soy
+++ b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/LogDetail.soy
@@ -23,6 +23,7 @@
  * @param breadcrumbs breadcrumbs for this page.
  * @param? tags optional list of tags encountered when peeling this object, with
  *     keys corresponding to gitiles.tagDetail.
+ * @param? logEntryVariant variant name for log entry template.
  * @param entries list of log entries; see .logEntry.
  * @param? nextUrl URL for the next page of results.
  * @param? previousUrl URL for the previous page of results.
@@ -44,6 +45,7 @@
 /**
  * List of log entries.
  *
+ * @param? logEntryVariant variant name for log entry template.
  * @param entries list of log entries; see .logEntry.
  * @param? nextUrl URL for the next page of results.
  * @param? previousUrl URL for the previous page of results.
@@ -59,7 +61,8 @@
   <ol class="shortlog">
     {foreach $entry in $entries}
       <li{if $previousUrl and isFirst($entry)} class="first"{/if}>
-        {call .logEntry data="$entry" /}
+        {delcall gitiles.logEntry variant="$logEntryVariant ?: 'default'"
+            data="$entry" /}
       </li>
     {/foreach}
   </ol>
@@ -85,7 +88,7 @@
  * @param branches list of branches for this entry, with "name" and "url" keys.
  * @param tags list of tags for this entry, with "name" and "url" keys.
  */
-{template .logEntry}
+{deltemplate gitiles.logEntry variant="'default'"}
 <a href="{$url}">
   <span class="sha1">{$abbrevSha}</span>
   // nbsp instad of CSS padding/margin because those cause a break in the
@@ -105,4 +108,4 @@
     {sp}<a href="{$tag.url}" class="tag-label">{$tag.name}</a>
   {/foreach}
 {/if}
-{/template}
+{/deltemplate}
diff --git a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/RepositoryIndex.soy b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/RepositoryIndex.soy
index 14d5335..cdd5005 100644
--- a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/RepositoryIndex.soy
+++ b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/RepositoryIndex.soy
@@ -29,6 +29,7 @@
  * @param? moreTagsUrl URL to show more branches, if necessary.
  * @param? nextUrl URL for the next page of log results.
  * @param? previousUrl URL for the previous page of log results.
+ * @param? logEntryVariant variant name for log entry template.
  * @param entries list of log entries; see .logEntry.
  */
 {template .repositoryIndex}