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);