summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.lfs.server/src
diff options
context:
space:
mode:
authorDavid Pursehouse <david.pursehouse@gmail.com>2016-07-25 14:43:33 +0900
committerDavid Pursehouse <david.pursehouse@gmail.com>2016-07-27 15:54:03 +0900
commitbb9988c2368f1986fc0d59cc44fa754f22ca2708 (patch)
tree08a362cbd49b56e56b37731809e373f55cc3038a /org.eclipse.jgit.lfs.server/src
parente27eab26e2027baba7e96a972b90b17f18843467 (diff)
downloadjgit-bb9988c2368f1986fc0d59cc44fa754f22ca2708.tar.gz
jgit-bb9988c2368f1986fc0d59cc44fa754f22ca2708.zip
LfsProtocolServlet: Pass request and path to getLargeFileRepository
Passing the request and path to the method will allow implementations to have more control over determination of the backend, for example: - return different backends for different requests - accept or refuse requests based on request characteristics - etc Change-Id: I1ec6ec54c91a5f0601b620ed18846eb4a3f46783 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
Diffstat (limited to 'org.eclipse.jgit.lfs.server/src')
-rw-r--r--org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java41
1 files changed, 29 insertions, 12 deletions
diff --git a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java
index 7d2efd26cf..7b1a67007d 100644
--- a/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java
+++ b/org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java
@@ -82,40 +82,57 @@ public abstract class LfsProtocolServlet extends HttpServlet {
/**
* Get the large file repository
*
- * @return the large file repository storing large files
+ * @param request
+ * the request
+ * @param path
+ * the path
+ *
+ * @return the large file repository storing large files or null if the
+ * request is not supported.
*/
- protected abstract LargeFileRepository getLargeFileRepository();
+ protected abstract LargeFileRepository getLargeFileRepository(
+ LfsRequest request, String path);
+
+ /** LFS request. */
+ protected static class LfsRequest {
+ private String operation;
+
+ private List<LfsObject> objects;
+
+ /**
+ * Get the LFS operation.
+ *
+ * @return the operation
+ */
+ public String getOperation() {
+ return operation;
+ }
+ }
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
- res.setStatus(SC_OK);
- res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON);
-
Writer w = new BufferedWriter(
new OutputStreamWriter(res.getOutputStream(), UTF_8));
Reader r = new BufferedReader(new InputStreamReader(req.getInputStream(), UTF_8));
LfsRequest request = gson.fromJson(r, LfsRequest.class);
+ String path = req.getPathInfo();
- LargeFileRepository repo = getLargeFileRepository();
+ LargeFileRepository repo = getLargeFileRepository(request, path);
if (repo == null) {
res.setStatus(SC_SERVICE_UNAVAILABLE);
return;
}
+ res.setStatus(SC_OK);
+ res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON);
TransferHandler handler = TransferHandler
.forOperation(request.operation, repo, request.objects);
gson.toJson(handler.process(), w);
w.flush();
}
- private static class LfsRequest {
- String operation;
-
- List<LfsObject> objects;
- }
-
private static Gson createGson() {
GsonBuilder gb = new GsonBuilder()
.setFieldNamingPolicy(