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