Add TEXT mode for RevisionServlet in gitiles.

This allows ?format=TEXT queries on the /+/<commit-ish> paths. It returns the
git hash-object compatible format (e.g. the raw commit), base64 encoded like
the other ?format=TEXT apis.

Change-Id: I38235e4a89a9f2b888011d1428488722296b8577
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
index d065a45..c187d72 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionServlet.java
@@ -24,6 +24,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
+import com.google.common.io.BaseEncoding;
 import com.google.gitiles.CommitData.Field;
 import com.google.gitiles.CommitJsonData.Commit;
 import com.google.gitiles.DateFormatter.Format;
@@ -33,6 +34,8 @@
 import org.eclipse.jgit.http.server.ServletUtils;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.ObjectLoader;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevObject;
@@ -42,6 +45,8 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
 import java.util.List;
 import java.util.Map;
 
@@ -134,6 +139,26 @@
   }
 
   @Override
+  protected void doGetText(HttpServletRequest req, HttpServletResponse res) throws IOException {
+    GitilesView view = ViewFilter.getView(req);
+    Repository repo = ServletUtils.getRepository(req);
+    ObjectReader reader = repo.newObjectReader();
+    try {
+        ObjectLoader loader = reader.open(view.getRevision().getId());
+        if (loader.getType() != OBJ_COMMIT) {
+          res.setStatus(SC_NOT_FOUND);
+        } else {
+          try (Writer writer = startRenderText(req, res);
+              OutputStream out = BaseEncoding.base64().encodingStream(writer)) {
+            loader.copyTo(out);
+          }
+        }
+    } finally {
+      reader.release();
+    }
+  }
+
+  @Override
   protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException {
     GitilesView view = ViewFilter.getView(req);
     Repository repo = ServletUtils.getRepository(req);