Add REST API endpoint for RepositoryIndexServlet
Added support for the JSON output format to RepositoryIndexServlet and
RefServlet.
Sample JSON response from RepositoryIndexServlet:
)]}'
{
"name": "gitiles",
"clone_url": "https://gerrit.googlesource.com/gitiles",
"description": "A simple browser for Git repositories"
}
Sample JSON response from RefServlet:
)]}'
{
"HEAD": {
"value": "99df26787bf9d8b78bef8c12ad821d7a8fdfa044",
"target": "refs/heads/master"
},
"refs/heads/32.93.1611": {
"value": "e50434a901d89cd40ff1809b40a97bca87de2b3f"
},
"refs/tags/cut/2.8.2": {
"value": "25ec7478b5f2d39d78a8978e727cd089e9af9df3",
"peeled": "7ca778c7451560b27b3c902b21c528b0dde772d6"
}
}
Change-Id: I83caa5a46314b5d16bb6c14d275d191f1e888cc1
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
index bf0f75d..67d5edc 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RefServlet.java
@@ -23,6 +23,7 @@
import com.google.common.collect.Maps;
import com.google.common.collect.Ordering;
import com.google.common.util.concurrent.UncheckedExecutionException;
+import com.google.gson.reflect.TypeToken;
import org.eclipse.jgit.http.server.ServletUtils;
import org.eclipse.jgit.lib.AnyObjectId;
@@ -38,6 +39,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.LinkedHashMap;
import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
@@ -85,6 +87,19 @@
adv.end();
}
+ @Override
+ protected void doGetJson(HttpServletRequest req, HttpServletResponse res)
+ throws IOException {
+ GitilesView view = ViewFilter.getView(req);
+ Map<String, Ref> refs = getRefs(ServletUtils.getRepository(req).getRefDatabase(),
+ view.getPathPart());
+ Map<String, RefJsonData> jsonRefs = new LinkedHashMap<String, RefJsonData>();
+ for (Map.Entry<String, Ref> ref : refs.entrySet()) {
+ jsonRefs.put(ref.getKey(), new RefJsonData(ref.getValue()));
+ }
+ renderJson(req, res, jsonRefs, new TypeToken<Map<String, RefJsonData>>() {}.getType());
+ }
+
static List<Map<String, Object>> getBranchesSoyData(HttpServletRequest req, int limit)
throws IOException {
RefDatabase refdb = ServletUtils.getRepository(req).getRefDatabase();
@@ -209,4 +224,20 @@
writer.close();
}
}
+
+ private static class RefJsonData {
+ public RefJsonData(Ref ref) {
+ value = ref.getObjectId().getName();
+ if(ref.getPeeledObjectId() != null) {
+ peeled = ref.getPeeledObjectId().getName();
+ }
+ if (ref.isSymbolic()) {
+ target = ref.getTarget().getName();
+ }
+ }
+
+ public String value;
+ public String peeled;
+ public String target;
+ }
}
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
index 7dde342..ca1a0dc 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RepositoryIndexServlet.java
@@ -21,6 +21,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import com.google.gitiles.DateFormatter.Format;
+import com.google.gson.reflect.TypeToken;
import org.eclipse.jgit.http.server.ServletUtils;
import org.eclipse.jgit.lib.Constants;
@@ -53,10 +54,17 @@
}
@Override
- protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
+ protected void doGetHtml(HttpServletRequest req, HttpServletResponse res) throws IOException {
renderHtml(req, res, "gitiles.repositoryIndex", buildData(req));
}
+ @Override
+ protected void doGetJson(HttpServletRequest req, HttpServletResponse res) throws IOException {
+ GitilesAccess access = getAccess(req);
+ RepositoryDescription desc = access.getRepositoryDescription();
+ renderJson(req, res, desc, new TypeToken<RepositoryDescription>() {}.getType());
+ }
+
@VisibleForTesting
Map<String, ?> buildData(HttpServletRequest req) throws IOException {
GitilesView view = ViewFilter.getView(req);