Merge changes I0f844eaa,Ife1777c0

* changes:
  Fix dev server configuration
  Format source code using google-java-format 1.24.0
diff --git a/Documentation/developer-guide.md b/Documentation/developer-guide.md
index d36a24d..0a96b3a 100644
--- a/Documentation/developer-guide.md
+++ b/Documentation/developer-guide.md
@@ -67,8 +67,8 @@
 ```
 
 This will recompile and start a development server.  Open
-http://localhost:8080/ to view your local copy of gitiles, which
-will serve any repositories under `/path/to/repositories`.
+http://localhost:8080/path/to/repositories to view your local copy of gitiles,
+which will serve any repositories under `/path/to/repositories`.
 
 Passing `--debug` option to `tools/run_dev.sh` will suspend the runtime until a
 remote debugger connects to port 5005. If you don't want to suspend the
diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java
index 71f7384..368fd0b 100644
--- a/java/com/google/gitiles/LogServlet.java
+++ b/java/com/google/gitiles/LogServlet.java
@@ -191,10 +191,14 @@
     if (headRef == null) {
       return null;
     }
+    ObjectId id = headRef.getObjectId();
+    if (id == null) {
+      return null;
+    }
     try (RevWalk walk = new RevWalk(repo)) {
       return GitilesView.log()
           .copyFrom(view)
-          .setRevision(Revision.peel(Constants.HEAD, walk.parseAny(headRef.getObjectId()), walk))
+          .setRevision(Revision.peel(Constants.HEAD, walk.parseAny(id), walk))
           .build();
     }
   }
diff --git a/javatests/com/google/gitiles/LogServletTest.java b/javatests/com/google/gitiles/LogServletTest.java
index 93bf80a..7d75849 100644
--- a/javatests/com/google/gitiles/LogServletTest.java
+++ b/javatests/com/google/gitiles/LogServletTest.java
@@ -37,9 +37,9 @@
 public class LogServletTest extends ServletTest {
   private static final TypeToken<Log> LOG = new TypeToken<Log>() {};
   private static final String MAIN = "main";
-  private static final String AUTHOR_METADATA_ELEMENT = "<th class=\"Metadata-title\">author</th>";
+  private static final String AUTHOR_METADATA_ELEMENT = "<dt class=\"Metadata-title\">author</dt>";
   private static final String COMMITTER_METADATA_ELEMENT =
-      "<th class=\"Metadata-title\">committer</th>";
+      "<dt class=\"Metadata-title\">committer</dt>";
 
   @Test
   public void basicLog() throws Exception {
diff --git a/resources/com/google/gitiles/static/base.css b/resources/com/google/gitiles/static/base.css
index f4ef52a..7653f84 100644
--- a/resources/com/google/gitiles/static/base.css
+++ b/resources/com/google/gitiles/static/base.css
@@ -374,11 +374,29 @@
 .Metadata {
   margin-bottom: 15px;
 }
+.Metadata-descriptionList {
+  display: grid;
+  grid-template-columns: max-content minmax(auto, max-content) auto;
+  gap: 2px 12px;
+}
+.Metadata-row {
+  grid-column: 1 / -1;
+  display: grid;
+  grid-template-columns: subgrid;
+}
 .Metadata-title {
+  grid-column: 1;
   font-weight: bold;
-  padding-right: 10px;
   text-align: right;
 }
+.Metadata-description {
+  grid-column: 2 / -1;
+  display: grid;
+  grid-template-columns: subgrid;
+}
+.Metadata-descriptionCell {
+  grid-column: auto;
+}
 .MetadataMessage {
   background-color: #fafafa;
   border: 1px solid #ccc;
@@ -485,6 +503,15 @@
   color: #666;
 }
 
+@media (max-width: 700px) {
+  .Metadata-descriptionList {
+    grid-template-columns: max-content auto;
+  }
+  .Metadata-descriptionCell {
+    grid-column: 2;
+  }
+}
+
 /* BlameDetail.soy */
 
 .Blame {
diff --git a/resources/com/google/gitiles/templates/LogDetail.soy b/resources/com/google/gitiles/templates/LogDetail.soy
index b82b2a4..05fc37c 100644
--- a/resources/com/google/gitiles/templates/LogDetail.soy
+++ b/resources/com/google/gitiles/templates/LogDetail.soy
@@ -254,62 +254,63 @@
       score: the similarity score of the rename or copy.
       */
 <div class="u-monospace Metadata">
-<table>
-  <tr>
-    <th class="Metadata-title">{msg desc="Header for commit SHA entry"}commit{/msg}</th>
-    <td class="sha1">
-      <a href="{$url}">{$sha}</a>
-    </td>
-    <td>
-      {if length($branches)}
-        {for $branch in $branches}
-          {sp}<a href="{$branch.url}" class="branch-label">{$branch.name}</a>
-        {/for}
-      {/if}
-      {if length($tags)}
-        {for $tag in $tags}
-          {sp}<a href="{$tag.url}" class="tag-label">{$tag.name}</a>
-        {/for}
-      {else}
-        {sp}
-      {/if}
-    </td>
-  </tr>
-  <tr>
-    <th class="Metadata-title">{msg desc="Header for commit author"}author{/msg}</th>
-    <td>
-      {call objDetail.person_ data="$author" /}
-    </td>
-    <td>{$author.time}</td>
-  </tr>
-  <tr>
-    <th class="Metadata-title">{msg desc="Header for committer"}committer{/msg}</th>
-    <td>
-      {call objDetail.person_ data="$committer" /}
-    </td>
-    <td>{$committer.time}</td>
-  </tr>
-  {if $rename}
-    <tr>
-      <td colspan="3">
-        <span class="CommitLog-rename">
-          [
-          {switch $rename.changeType}
-            {case 'RENAME'}
-              Renamed
-            {case 'COPY'}
-              Copied
-          {/switch}
-          {if $rename.score != 100}
-            {sp}({$rename.score}%)
-          {/if}
-          {sp}from {$rename.oldPath}]
-        </span>
-      </td>
-    </tr>
-  {/if}
-
-</table>
+<dl class="Metadata-descriptionList">
+  <div class="Metadata-row">
+    <dt class="Metadata-title">{msg desc="Header for commit SHA entry"}commit{/msg}</dt>
+    <dd class="Metadata-description">
+      <div class="sha1 Metadata-descriptionCell">
+        <a href="{$url}">{$sha}</a>
+      </div>
+      <div class="Metadata-descriptionCell">
+        {if length($branches)}
+          {for $branch in $branches}
+            {sp}<a href="{$branch.url}" class="branch-label">{$branch.name}</a>
+          {/for}
+        {/if}
+        {if length($tags)}
+          {for $tag in $tags}
+            {sp}<a href="{$tag.url}" class="tag-label">{$tag.name}</a>
+          {/for}
+        {else}
+          {sp}
+        {/if}
+      </div>
+    </dd>
+  </div>
+  <div class="Metadata-row">
+    <dt class="Metadata-title">{msg desc="Header for commit author"}author{/msg}</dt>
+    <dd class="Metadata-description">
+      <div class="Metadata-descriptionCell">
+        {call objDetail.person_ data="$author" /}
+      </div>
+      <div class="Metadata-descriptionCell">{$author.time}</div>
+    </dd>
+  </div>
+  <div class="Metadata-row">
+    <dt class="Metadata-title">{msg desc="Header for committer"}committer{/msg}</dt>
+    <dd class="Metadata-description">
+      <div class="Metadata-descriptionCell">
+        {call objDetail.person_ data="$committer" /}
+      </div>
+      <div class="Metadata-descriptionCell">{$committer.time}</div>
+    </dd>
+  </div>
+</dl>
+{if $rename}
+  <span class="CommitLog-rename">
+    [
+    {switch $rename.changeType}
+      {case 'RENAME'}
+        Renamed
+      {case 'COPY'}
+        Copied
+    {/switch}
+    {if $rename.score != 100}
+      {sp}({$rename.score}%)
+    {/if}
+    {sp}from {$rename.oldPath}]
+  </span>
+{/if}
 </div>
 <pre class="u-pre u-monospace MetadataMessage">
   {$message}
diff --git a/resources/com/google/gitiles/templates/ObjectDetail.soy b/resources/com/google/gitiles/templates/ObjectDetail.soy
index f7c0b0c..4fc83d8 100644
--- a/resources/com/google/gitiles/templates/ObjectDetail.soy
+++ b/resources/com/google/gitiles/templates/ObjectDetail.soy
@@ -44,52 +44,68 @@
   {@param archiveUrl: ?}  /** URL to a download link of this commit as an archive. */
   {@param archiveType: ?}  /** type of the archive to download. */
 <div class="u-monospace Metadata">
-  <table>
-    <tr>
-      <th class="Metadata-title">{msg desc="Header for commit SHA entry"}commit{/msg}</th>
-      <td>
-        {$sha}
-      </td>
-      <td>
-        <span>
-          [<a href="{$logUrl}">{msg desc="text for the log link"}log{/msg}</a>]
-        </span>
-        {sp}<span>[<a href="{$archiveUrl}">{$archiveType}</a>]</span>
-      </td>
-    </tr>
-    <tr>
-      <th class="Metadata-title">{msg desc="Header for commit author"}author{/msg}</th>
-      <td>
-        {call person_ data="$author" /}
-      </td>
-      <td>{$author.time}</td>
-    </tr>
-    <tr>
-      <th class="Metadata-title">{msg desc="Header for committer"}committer{/msg}</th>
-      <td>
-        {call person_ data="$committer" /}
-      </td>
-      <td>{$committer.time}</td>
-    </tr>
-    <tr>
-      <th class="Metadata-title">{msg desc="Header for tree SHA entry"}tree{/msg}</th>
-      <td><a href="{$treeUrl}">{$tree}</a></td>
-    </tr>
-    {for $parent in $parents}
-      <tr>
-        <th class="Metadata-title">{msg desc="Header for parent SHA"}parent{/msg}</th>
-        <td>
-          <a href="{$parent.url}">{$parent.sha}</a>
-          {sp}<span>
-            [<a href="{$parent.diffUrl}">{msg desc="text for the parent diff link"}diff{/msg}</a>]
-            {if $parent.blameUrl != null}
-              {sp}[<a href="{$parent.blameUrl}">{msg desc="text for the parent blame link"}blame{/msg}</a>]
-            {/if}
+  <dl class="Metadata-descriptionList">
+    <div class="Metadata-row">
+      <dt class="Metadata-title">{msg desc="Header for commit SHA entry"}commit{/msg}</dt>
+      <dd class="Metadata-description">
+        <div class="Metadata-descriptionCell">
+          {$sha}
+        </div>
+        <div class="Metadata-descriptionCell">
+          <span>
+            [<a href="{$logUrl}">{msg desc="text for the log link"}log{/msg}</a>]
           </span>
-        </td>
-      </tr>
+          {sp}<span>[<a href="{$archiveUrl}">{$archiveType}</a>]</span>
+        </div>
+      </dd>
+    </div>
+    <div class="Metadata-row">
+      <dt class="Metadata-title">{msg desc="Header for commit author"}author{/msg}</dt>
+      <dd class="Metadata-description">
+        <div class="Metadata-descriptionCell">
+          {call person_ data="$author" /}
+        </div>
+        <div class="Metadata-descriptionCell">
+          {$author.time}
+        </div>
+      </dd>
+    </div>
+    <div class="Metadata-row">
+      <dt class="Metadata-title">{msg desc="Header for committer"}committer{/msg}</dt>
+      <dd class="Metadata-description">
+        <div class="Metadata-descriptionCell">
+          {call person_ data="$committer" /}
+        </div>
+        <div class="Metadata-descriptionCell">
+          {$committer.time}
+        </div>
+      </dd>
+    </div>
+    <div class="Metadata-row">
+      <dt class="Metadata-title">{msg desc="Header for tree SHA entry"}tree{/msg}</dt>
+      <dd class="Metadata-description">
+        <div class="Metadata-descriptionCell">
+          <a href="{$treeUrl}">{$tree}</a>
+        </div>
+      </dd>
+    </div>
+    {for $parent in $parents}
+      <div class="Metadata-row">
+        <dt class="Metadata-title">{msg desc="Header for parent SHA"}parent{/msg}</dt>
+        <dd class="Metadata-description">
+          <div class="Metadata-descriptionCell">
+            <a href="{$parent.url}">{$parent.sha}</a>
+            {sp}<span>
+              [<a href="{$parent.diffUrl}">{msg desc="text for the parent diff link"}diff{/msg}</a>]
+              {if $parent.blameUrl != null}
+                {sp}[<a href="{$parent.blameUrl}">{msg desc="text for the parent blame link"}blame{/msg}</a>]
+              {/if}
+            </span>
+          </div>
+        </dd>
+      </div>
     {/for}
-  </table>
+  </dl>
 </div>
 {call message_}
   {param className: 'u-pre u-monospace MetadataMessage' /}
@@ -313,27 +329,33 @@
   {@param object: ?}  /** SHA of the object this tag points to. */
   {@param message: ?}  /** tag message. */
 <div class="u-monospace Metadata">
-  <table>
-    <tr>
-      <th class="Metadata-title">{msg desc="Header for tag SHA entry"}tag{/msg}</th>
-      <td class="sha">{$sha}</td>
-      <td>{sp}</td>
-    </tr>
+  <dl class="Metadata-descriptionList">
+    <div class="Metadata-row">
+      <dt class="Metadata-title">{msg desc="Header for tag SHA entry"}tag{/msg}</dt>
+      <dd class="Metadata-description">
+        <div class="sha Metadata-descriptionCell">{$sha}</div>
+        <div class="Metadata-descriptionCell">{sp}</div>
+      </dd>
+    </div>
     {if $tagger}
-      <tr>
-        <th class="Metadata-title">{msg desc="Header for tagger"}tagger{/msg}</th>
-        <td>
-          {call person_ data="$tagger" /}
-        </td>
-        <td>{$tagger.time}</td>
-      </tr>
+      <div class="Metadata-row">
+        <dt class="Metadata-title">{msg desc="Header for tagger"}tagger{/msg}</dt>
+        <dd class="Metadata-description">
+          <div class="Metadata-descriptionCell">
+            {call person_ data="$tagger" /}
+          </div>
+          <div class="Metadata-descriptionCell">{$tagger.time}</div>
+        </dd>
+      </div>
     {/if}
-    <tr>
-      <th class="Metadata-title">{msg desc="Header for tagged object SHA"}object{/msg}</th>
-      <td class="sha">{$object}</td>
-      <td>{sp}</td>
-    </tr>
-  </table>
+    <div class="Metadata-row">
+      <dt class="Metadata-title">{msg desc="Header for tagged object SHA"}object{/msg}</dt>
+      <dd class="Metadata-description">
+        <div class="sha Metadata-descriptionCell">{$object}</div>
+        <div class="Metadata-descriptionCell">{sp}</div>
+      </dd>
+    </div>
+  </dl>
 </div>
 {if $message && length($message)}
   {call message_}