Restrict long RevCommit.getShortMessage() to first line

Some commit messages in the wild have hundreds of lines in the message
body with no double LF to denote a break between paragraphs.  When
parsed using the traditional oneline view this creates a very disjoint
layout in Gitiles, as the entire message is presented interleaved with
other more well formed online commits.

Short messages are encouraged to be < 65 characters so an abbreviated
SHA-1 can be added to the start of the line by `git log --oneline`.
If the traditional short message is more than 80 characters (well
above the recommended length), display only the first line.

Change-Id: Iba6ad060c0e74a6a0ff37d84c9b4e2fbe9171732
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
index b968d89..107f1e1 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
@@ -152,9 +152,6 @@
       if (fs.contains(Field.PARENTS)) {
         result.parents = Arrays.asList(c.getParents());
       }
-      if (fs.contains(Field.SHORT_MESSAGE)) {
-        result.shortMessage = c.getShortMessage();
-      }
       if (fs.contains(Field.BRANCHES)) {
         result.branches = getRefsById(repo, c, Constants.R_HEADS);
       }
@@ -164,6 +161,20 @@
       if (fs.contains(Field.MESSAGE)) {
         result.message = c.getFullMessage();
       }
+      if (fs.contains(Field.SHORT_MESSAGE)) {
+        String msg = c.getShortMessage();
+        if (msg.length() > 80) {
+          String ft = result.message;
+          if (ft == null) {
+            ft = c.getFullMessage();
+          }
+          int lf = ft.indexOf('\n');
+          if (lf > 0) {
+            msg = ft.substring(0, lf);
+          }
+        }
+        result.shortMessage = msg;
+      }
       if (fs.contains(Field.DIFF_TREE)) {
         result.diffEntries = computeDiffEntries(repo, view, c);
       }